Excluir informações do banco de dados

4

Nosso banco de dados de produção estava localizado em um servidor de produção. O banco de dados foi excluído de alguma forma, mas não sei como ele foi excluído.

Como posso determinar quem excluiu o banco de dados, qual era o endereço IP do computador, a que horas ele foi excluído e assim por diante?

O banco de dados que usamos é o MS SQL Server 2005.

Deixe-me saber se mais informações são necessárias do meu lado.

    
por Romil N 04.03.2011 / 20:28

1 resposta

4

Eu estou corrigido. Se você observar o script no local a seguir, ele deverá informar a você quem e quando um banco de dados foi descartado. (Aprenda algo novo todos os dias ...)

Detectando alterações no esquema

Aqui está o script completo:

declare @d1 datetime;
declare @diff int;
declare @curr_tracefilename varchar(500);
declare @base_tracefilename varchar(500);
declare @indx int ;
declare @temp_trace table (
 obj_name nvarchar(256) collate database_default
, database_name nvarchar(256) collate database_default
, start_time datetime
, event_class int
, event_subclass int
, object_type int
, server_name nvarchar(256) collate database_default
, login_name nvarchar(256) collate database_default
, application_name nvarchar(256) collate database_default
, ddl_operation nvarchar(40) collate database_default
);

select @curr_tracefilename = path from sys.traces where is_default = 1 ;
set @curr_tracefilename = reverse(@curr_tracefilename)
select @indx = PATINDEX('%\%', @curr_tracefilename)
set @curr_tracefilename = reverse(@curr_tracefilename)
set @base_tracefilename = LEFT(@curr_tracefilename,len(@curr_tracefilename) - @indx) + '\log.trc';

insert into @temp_trace
select ObjectName
, DatabaseName
, StartTime
, EventClass
, EventSubClass
, ObjectType
, ServerName
, LoginName
, ApplicationName
, 'temp'
from ::fn_trace_gettable( @base_tracefilename, default )
where EventClass in (46,47,164) and EventSubclass = 0 and
DatabaseID <> 2

update @temp_trace set ddl_operation = 'CREATE' where
event_class = 46
update @temp_trace set ddl_operation = 'DROP' where
event_class = 47
update @temp_trace set ddl_operation = 'ALTER' where
event_class = 164

select @d1 = min(start_time) from @temp_trace
set @diff= datediff(hh,@d1,getdate())
set @diff=@diff/24;

select @diff as difference
, @d1 as date
, object_type as obj_type_desc
, *
from @temp_trace where object_type not in (21587)
order by start_time desc
    
por 04.03.2011 / 20:40