Que tipo de informações de auditoria é armazenado pelo servidor SQL quando um CREATE TABLE ou operação ALTER TABLE é realizada?
-
13-09-2019 - |
Pergunta
A inspiração para esta pergunta é um proc armazenados quebrou em mim, porque ele chamou um outro proc armazenado que os dados inseridos em uma tabela cujo esquema foi completamente alterado.
A questão é que você tem uma tabela em um banco de dados SQL Server, e você não sabe como ele chegou lá. Você não tem nenhum gatilhos DDL no local para informações de auditoria personalizada, e não há nenhum registro em seu repositório das tabelas DDL controle de origem. Usando apenas SQL Server, que dados forense você pode obter sobre a mesa.
Eu mesmo, e quem se depara com esta questão em uma situação semelhante, não vai ser ajudado por sugestões sobre controle de versão e gatilhos DDL. Aqueles são grandes go soluções para a frente, e não há muita informação sobre este blog sobre esses tópicos, se a política da empresa nos permite implementar essas soluções. O que eu, e as pessoas na minha situação realmente precisa é ser capaz de reunir o maior número de fragmentos de dados possível a partir de servidor SQL, para combinar com o que outros dados que podem chegar a.
Solução
Infelizmente, você não tem nenhuma maneira de reconstruir o que aconteceu, exceto:
-
Se os DBAs têm traços em execução e a história. SQL Server 2005 tem um traço padrão e há a trace "caixa preta", mas estes são usados ??para descobrir o que aconteceu logo antes de um acidente
-
Se você tem modelo de recuperação completa, então você pode tentar uma ferramenta de visualizador de log ( livre Red gate um )
-
dependendo da atividade e seu modelo de segurança, você também pode verificar o log de segurança do Windows para ver quem conectado com privilégios de DDL
-
os logs de eventos SQL também podem ter informações. Por exemplo, se você tiver ativado o sinalizador de rastreamento que registra erros "permissão", então você pode ver quando começou. Ou a pessoa que fez a alteração pode ter gerado outras exceções que são registrados
-
você poderia pedir aqueles com direitos. Poderia ser um erro genuíno (por exemplo, achava que eles estavam em dev)
Outras dicas
A consulta a seguir-me a criar e última vez Modificar tem.
SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbTableInQuestion]') AND type in (N'U')
Você deve ser capaz de encontrar a criação da tabela no . transação log Eu nunca usei qualquer uma das ferramentas espectador aqui, e eu não poderia dizer-lhe como procurar volta no tempo para isso, mas tudo acontece em uma transação, de modo que tem que estar conectado - até mesmo o tabelas do sistema ...