Usuário com melhor resposta
Auditoria SQL Server 2008 R2

Pergunta
-
Bom Dia a todos
Gostaria de saber se é possivel implementar uma auditoria a nivel de banco ou server onde eu seja capaz de:
- Auditar a maquina que esta conectada a minha instancia que esta sendo auditada.
- Auditar a aplicação que esta conectada à minha instancia que esta sendo conectada.
Ja estou conseguindo monitorar os comandos, o user, e o horário em que alguem esta no meu banco, mas os dois acima eu não consigo.
Respostas
-
Douglas, o Trace do SQLServer faz exatamente o que vc precisa.
Mas se vc quer saber o que está sendo executado e por quem:
SELECT [Spid] = session_Id , ecid , [Database] = DB_NAME(sp.dbid) , [User] = nt_username , [Status] = er.status , [Wait] = wait_type , [Individual Query] = SUBSTRING (qt.text, er.statement_start_offset/2, (CASE WHEN er.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 ELSE er.statement_end_offset END - er.statement_start_offset)/2) ,[Parent Query] = qt.text , Program = program_name , Hostname , nt_domain , start_time FROM sys.dm_exec_requests er INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt WHERE session_Id > 50 -- Ignore system spids. AND session_Id NOT IN (@@SPID) -- Ignore this current statement. ORDER BY 1, 2
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator quarta-feira, 6 de junho de 2012 11:54
Todas as Respostas
-
-
-
Douglas, o Trace do SQLServer faz exatamente o que vc precisa.
Mas se vc quer saber o que está sendo executado e por quem:
SELECT [Spid] = session_Id , ecid , [Database] = DB_NAME(sp.dbid) , [User] = nt_username , [Status] = er.status , [Wait] = wait_type , [Individual Query] = SUBSTRING (qt.text, er.statement_start_offset/2, (CASE WHEN er.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 ELSE er.statement_end_offset END - er.statement_start_offset)/2) ,[Parent Query] = qt.text , Program = program_name , Hostname , nt_domain , start_time FROM sys.dm_exec_requests er INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt WHERE session_Id > 50 -- Ignore system spids. AND session_Id NOT IN (@@SPID) -- Ignore this current statement. ORDER BY 1, 2
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator quarta-feira, 6 de junho de 2012 11:54
-
-
Douglas, não entendi. O Trace pode ficar 24x7 normalmente, eu uso dessa forma faz muito tempo. Mas de qualquer forma, o select que eu te enviei acima trás as informações que você precisa.
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco
-
Douglas,
Então, mas com o Select do Fausto você poderá consultar estas atividades que estão sendo realizada a qualquer momento, além disso, será possível armazenar o resultado deste Select em outra table, como também criar um Job para fazer isso em horários programados.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]