No meu caso, existe o Banco de Dados SQL Server que é usado por várias equipes. O banco de dados de repente entrou no modo de usuário único. Agora, como identificar o usuário ou aplicativo responsável que fez isso? Pode ser um aplicativo também.
Se não for possível agora, o que fazer para capturar essas informações no futuro?
O spid é registrado no log de erros do SQL Server, mas não o usuário/aplicativo/host. E, como Grant mencionou, nada é registrado na
system_health
sessão interna (ou no rastreamento padrão, se você ainda tiver ativado ).Resultados:
Para obter essas informações no futuro, você pode configurar uma sessão de eventos estendidos, por exemplo
Ao clicar com o botão direito do mouse na sessão em Gerenciamento > Eventos estendidos > Sessões e escolher Assistir a dados ao vivo (ou ir para o arquivo de evento e escolher Visualizar dados de destino...), você pode ver eventos como este (observe que o banco de dados de destino está realmente listado em
object_name
;database_name
é o banco de dados de contexto ):Mas você também obterá todos os outros eventos de alteração do banco de dados. Vou deixar como exercício para o leitor puxar os dados programaticamente (e filtrar) usando
sys.fn_xe_file_target_read_file
(docs aqui) . Grant Fritchey tem uma consulta inicial aqui .Existem outras opções também, como SQL Server Audit /
DATABASE_OBJECT_CHANGE_GROUP
.As versões modernas do SQL Server permitirão que você crie uma Auditoria de Segurança do Servidor . Eles são um pouco como os eventos estendidos, mas mais enxutos.
Um script básico para configurar as auditorias do SQL Server Security pode ser assim:
Criar auditoria de segurança do servidor
Especificar detalhes da auditoria de segurança
Comentei alguns dos Grupos e Ações de Ação de Auditoria do SQL Server. Uma lista dos quais pode ser encontrada em Grupos e ações de ações de auditoria do SQL Server (Microsoft | SQL Docs)
Ativar auditoria de segurança
Referência: CREATE SERVER AUDIT (Transact-SQL) (Microsoft | SQL Docs)
Usando SSMS
Você pode fazer o mesmo com o SSMS seguindo as etapas descritas em Criar uma auditoria de servidor e especificação de auditoria de banco de dados (Microsoft | SQL Docs).
Visualizando a Auditoria do Servidor
No SSMS de sua instância, navegue até Segurança | Auditorias | Your_Audit_Name e clique com o botão direito do mouse na auditoria e selecione View Audit Logs .
Você pode então selecionar o ID de ação ALTER e ele exibirá os detalhes do que aconteceu.
Detalhes redigidos para proteger os inocentes
Você não pode saber depois do fato. Eu verifiquei e system_health não captura essas informações. No entanto, você pode configurar eventos estendidos para capturar exatamente isso no futuro. Eu tenho exemplos de mudanças de banco de dados de auditoria aqui . Não mostro a configuração para SINGLE_USER, mas o exemplo em que altero o nível de compatibilidade seria absolutamente aplicável.