Estou tentando descobrir quem alterou a senha de um login no SQL Server 2008 R2.
Já verifiquei o rastreamento padrão - e ele não registra esse evento. O rastreamento padrão incluirá estes eventos relacionados à segurança:
/*
Audit Add DB user event
Audit Add login to server role event
Audit Add Member to DB role event
Audit Add Role event
Audit Add login event
Audit Backup/Restore event
Audit Change Database owner
Audit DBCC event
Audit Database Scope GDR event (Grant, Deny, Revoke)
Audit Login Change Property event
Audit Login Failed
Audit Login GDR event
Audit Schema Object GDR event
Audit Schema Object Take Ownership
Audit Server Starts and Stops
*/
Além disso, examinei o backup do log de transações para descobrir isso, mas sem sorte.
Existe alguma outra maneira de descobrir?
Além disso, estou ciente de que um rastreamento do lado do servidor ajudará, mas, infelizmente, em nosso rastreamento do lado do servidor, não incluímos o arquivo Audit Login Change Password Event
.
O melhor artigo que encontrei é de Aaron Bertrand: Rastreando alterações de senha de login no SQL Server
Meu artigo ajudará se você configurar com antecedência, mas não quando o evento aconteceu no passado e você não tinha nenhum tipo de mecanismo de auditoria configurado.
Ainda há esperança, no entanto. Digamos que eu fiz isso:
Essas informações estão no rastreamento padrão em EventClass 104 (Audit Addlogin Event). No entanto, se eu alterar a senha usando um destes métodos:
Esses eventos não são capturados pelo rastreamento padrão, por motivos óbvios de segurança - não deve ser possível para ninguém com acesso ao rastreamento padrão descobrir qual é a senha de outra pessoa, nem eles querem facilitar a descoberta disso uma senha foi alterada (a sondagem da frequência desses eventos, por exemplo, pode revelar certas propriedades de sua estratégia de segurança).
Então o que mais você faz? Embora isso dependa das informações que ainda estão no log e também do uso de um comando DBCC não documentado em um banco de dados do sistema (você pode querer fazer backup do mestre e restaurá-lo em outro lugar), você pode obter algumas informações do log de transações, por exemplo:
Isso produzirá, para os dois comandos acima, linhas com as seguintes informações (parciais):
Não parece muito, mas agora pegue essa parte 0x da descrição e faça:
Arma fumegante! Esta é a pessoa responsável por esse evento.
Claro, se eles usam
ALTER LOGIN
sintaxe para todas as operações (que deveriam estar usando em vez desp_password
), você não pode distinguir entre alguém alterando o banco de dados padrão e alguém alterando a senha. Você também não pode dizer (pelo menos que eu possa ver) qual login foi afetado, apenas que essa pessoa alterou um login. Jon parece pensar que essa informação também está no log, mas não consegui encontrá-la (ao contrário da informação de tempo, que de alguma forma eu passei direto).Pode haver respostas diferentes para usuários contidos no SQL Server 2012 - embora eu suspeite que as alterações de senha ainda sejam ofuscadas de maneiras semelhantes. Vou deixar isso para uma pergunta separada.
isso é mais do que um comentário, postando como resposta
Você pode utilizar o gatilho DDL no nível do servidor (observe que, para este exemplo, você deve ter o recurso SQL Server Database Mail ativado e definido):