比如你对人员表(User_Id,User_name.....)操作,你想记录对它的增删改 那你可以创建一张日志表专门用来记录对表的更改: 日志表结构(id int identity(1,1),当前登录用户,当前库用户,当前库名,当前表名,操作方式,操作时间,表记录Key) 对人员表的更改,其触发器中可以这么写: create trigger tri_test on 人员表 for update,insert,delete as begin if exists(select 1 from inserted) and not exists(select 1 from deleted)--只插入 insert 日志表 select SYSTEM_USER,user_name(),db_name(),'日志表','插入',getdate(),User_id from inserted ELSE if not exists(select 1 from inserted) and exists(select 1 from deleted)--只删除 insert 日志表 select SYSTEM_USER,user_name(),db_name(),'日志表','删除',getdate(),User_id from deleted ELSE begin INSERT 日志表 select SYSTEM_USER,user_name(),'日志表','更新前',getdate(),User_id from inserted INSERT 日志表 select SYSTEM_USER,user_name(),'日志表','更新后',getdate(),User_id from deleted END END这样就达到了简单的记录操作表的日志
SQL 2008 直接对该表配置“审核”就 ok 了。 -- 创建服务审核。 -- 也可以在 SSMS 中实例的“security\audit”节点下创建。 USE master GO CREATE SERVER AUDIT audit_name TO FILE (filepath='c:\'); GO ALTER SERVER AUDIT audit_name WITH (STATE=ON); GO-- 创建数据库审核——对指定表的 DQL 和 DML 语句操作进行审核。 -- 也可以在 SSMS 中数据库的“security\database audit specification”节点下创建。 USE dbname GO CREATE DATABASE AUDIT SPECIFICATION database_audit_name FOR SERVER AUDIT [audit_table] ADD (DELETE ON OBJECT::[schema_name].[table_name] BY [public]), ADD (INSERT ON OBJECT::[schema_name].[table_name] BY [public]), ADD (SELECT ON OBJECT::[schema_name].[table_name] BY [public]), ADD (UPDATE ON OBJECT::[schema_name].[table_name] BY [public]) WITH (STATE = ON) GO-- 查看。 -- 也可以直接通过 SSMS 中实例的“security\audit”节点下对应的服务审核查看。 SELECT * FROM SYS.fn_get_audit_file('c:\audit_name*.sqlaudit',default,default);
那你可以创建一张日志表专门用来记录对表的更改:
日志表结构(id int identity(1,1),当前登录用户,当前库用户,当前库名,当前表名,操作方式,操作时间,表记录Key)
对人员表的更改,其触发器中可以这么写:
create trigger tri_test
on 人员表
for update,insert,delete
as
begin
if exists(select 1 from inserted) and not exists(select 1 from deleted)--只插入
insert 日志表 select SYSTEM_USER,user_name(),db_name(),'日志表','插入',getdate(),User_id from inserted
ELSE if not exists(select 1 from inserted) and exists(select 1 from deleted)--只删除
insert 日志表 select SYSTEM_USER,user_name(),db_name(),'日志表','删除',getdate(),User_id from deleted
ELSE
begin
INSERT 日志表 select SYSTEM_USER,user_name(),'日志表','更新前',getdate(),User_id from inserted
INSERT 日志表 select SYSTEM_USER,user_name(),'日志表','更新后',getdate(),User_id from deleted
END
END这样就达到了简单的记录操作表的日志
-- 创建服务审核。
-- 也可以在 SSMS 中实例的“security\audit”节点下创建。
USE master
GO
CREATE SERVER AUDIT audit_name TO FILE (filepath='c:\');
GO
ALTER SERVER AUDIT audit_name WITH (STATE=ON);
GO-- 创建数据库审核——对指定表的 DQL 和 DML 语句操作进行审核。
-- 也可以在 SSMS 中数据库的“security\database audit specification”节点下创建。
USE dbname
GO
CREATE DATABASE AUDIT SPECIFICATION database_audit_name
FOR SERVER AUDIT [audit_table]
ADD (DELETE ON OBJECT::[schema_name].[table_name] BY [public]),
ADD (INSERT ON OBJECT::[schema_name].[table_name] BY [public]),
ADD (SELECT ON OBJECT::[schema_name].[table_name] BY [public]),
ADD (UPDATE ON OBJECT::[schema_name].[table_name] BY [public])
WITH (STATE = ON)
GO-- 查看。
-- 也可以直接通过 SSMS 中实例的“security\audit”节点下对应的服务审核查看。
SELECT * FROM SYS.fn_get_audit_file('c:\audit_name*.sqlaudit',default,default);