Alguns dos desenvolvedores da minha equipe sabem senhas de contas SQL que têm permissões estendidas
Gostaríamos de rastrear e ser alertados sempre que algum desenvolvedor estiver usando qualquer uma dessas contas SQL para se conectar
Estamos prestes a implementar logon trigger
isso para cada tentativa de login, avaliar as propriedades do login e enviar um relatório por e-mail se eles corresponderem a determinados critérios. A lógica é a seguinte:
se original_login() em (...lista de contas SQL aqui...) e:
a) o endereço IP do cliente é 192.168.xx sub-rede VPN (nenhum aplicativo de produção se conectando a partir desta sub-rede, somente desenvolvedores podem) ou
b) nome do host do cliente em (... lista de nomes de máquinas host do Dev...) ou
c) nome do aplicativo cliente em (SSMS, az-Data etc.)
exec sp_send_dbmail (enviar relatório por e-mail para o DBA)
O gatilho teria a cláusula "execute as" e seria executado em nome de um logon SQL cuja única permissão é enviar e-mails de db mail
Quais podem ser os efeitos colaterais indesejados de habilitar esse tipo de acionador de logon na produção?
Pode retardar o processo de login ou causar outros problemas?
ps Estou ciente DAC
e como usá-lo.
Testado conectando usando DAC
e contando com ele para me ajudar a desativar o gatilho se algum problema começar
O correio de banco de dados usa uma fila do Service Broker e um processo em segundo plano assíncrono para realmente enviar emails, portanto, o desempenho não deve ser um grande problema. Mas os acionadores de logon podem facilmente causar tempo de inatividade, por isso exigem muito cuidado ao escrever e testar. Além disso, você pode acabar com milhares de e-mails se um desenvolvedor executar um teste de carga ou algo assim.
Portanto, provavelmente é um exagero usar um gatilho de logon para isso. Em vez disso, use uma auditoria ou mesmo apenas uma sessão XEvent. Grave os dados em um arquivo de evento e os processe com um trabalho agendado.
Veja como criar e consultar uma auditoria:
Um aspecto que pode não ser o tipo de implicação que você está pedindo, mas a IMO é igualmente importante:
O nome do aplicativo e o nome do host são definidos pelo aplicativo cliente. Assim, seus desenvolvedores podem se conectar facilmente ao seu SQL Server usando o SSMS e na string de conexão especificar algo como abaixo:
Nome do aplicativo=MyAppName;ID da estação de trabalho=MickeyMouse
(Você pode especificar os atributos da cadeia de conexão na caixa de diálogo "Conectar" do SSMS.)
Não posso dizer com certeza sobre o endereço IP, se é "seguro" de usar.
Você pode tentar este gatilho: