Estou tentando criar um log de auditoria para armazenar todos os comandos de exclusão em algumas tabelas, no MSSQL 2012.
O que eu preciso é o nome de usuário que o executou e o comando executado, então posso inseri-los em uma tabela de log.
Estou encontrando muitos exemplos de criação de trigger, mas nenhum que mostre como recuperar essas informações.
Para o nome de usuário, há várias funções internas que retornarão o nome de usuário atual. Eles não são todos iguais, então faça a sua escolha - eu normalmente uso
SUSER_SNAME()
.Para o comando, se você estivesse em uma versão compatível e não antiga (até mesmo o SQL Server 2014 serviria), você poderia usar
sys.dm_exec_input_buffer
para informar o último lote enviado pelo usuário atual (identificado por@@SPID
), portanto, no corpo do seu gatilho você pode ter:No SQL Server 2012, será muito mais feio. Você precisará de uma tabela #temp para manter a saída do SQL dinâmico em execução
DBCC INPUTBUFFER
: