日期:2014-05-17  浏览次数:20513 次

如何查找出直接操作数据库的那个人?
数据有点不可思议,感觉有人直接操作数据库,对记录进行修改或删除,能查询出来是谁操作的吗,比如电脑IP等?
很多时候即便是有人操作了,但是对方不承认,所以现在要找证据。
------最佳解决方案--------------------
下面的语句是一个触发器,创建一个数据库用于存放账号对数据库各个表的DDL操作的记录,语句要额外新建一个数据库的,然后创建就可以了,每个账号对整个库的DDL操作都会做记录。


CREATE TRIGGER [DDLTriggertTrace] ON DATABASE
--捕获存储过程、视图、表的创建、修改、删除动作
    FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, CREATE_VIEW,
        ALTER_VIEW, DROP_VIEW, CREATE_TABLE, ALTER_TABLE, DROP_TABLE
AS
    BEGIN
        SET NOCOUNT ON ;
        DECLARE @EventData XML = EVENTDATA() ;--返回有关服务器或数据库事件的信息,以XML格式保存。
        DECLARE @ip VARCHAR(32) = ( SELECT  client_net_address
                                    FROM    sys.dm_exec_connections
                                    WHERE   session_id = @@SPID
                                  ) ;

        INSERT  AuditDB.dbo.DDLEvents
                ( EventType ,
                  EventDDL ,
                  EventXML ,
                  DatabaseName ,
                  SchemaName ,
                  ObjectName ,
                  HostName ,
                  IPAddress ,
                  ProgramName ,
                  LoginName
                )
                SELECT  @EventData.value('(/EVENT_INSTANCE/EventType)[1]',
                                         'NVARCHAR(100)') ,
                        @EventData.value('(/EVENT_INSTANCE/TSQLCommand)