自己写个数据库级别的细微粒度审核 求服务器级别的.
if object_id(N'xwj_table_all_event','U') is not null
drop table xwj_table_all_event
go
create table xwj_table_all_event
(lsn int identity(1,1),
posttime datetime,
eventtype varchar(200),
login_name varchar(200),
schema_name varchar(200),
targetobjectname varchar(200),
eventdata xml
);
go
create trigger all_event on database for ddl_database_level_events
as
declare @eventdata xml
set @eventdata=eventdata()
insert into xwj_table_all_event(posttime,eventtype,login_name,schema_name,targetobjectname,eventdata)
values
(@eventdata.value('(/EVENT_INSTANCE/PostTime)[1]','datetime'),
@eventdata.value('(/EVENT_INSTANCE/EventType)[1]','varchar(200)'),
@eventdata.value('(/EVENT_INSTANCE/LoginName)[1]','varchar(200)'),
@eventdata.value('(/EVENT_INSTANCE/SchemaName)[1]','varchar(200)'),
@eventdata.value('(/EVENT_INSTANCE/TargetObjectName)[1]','varchar(200)'),
@eventdata)
go--测试
create table dbo.xx(id int )create index x_index on xwj_table_all_event(lsn)--查看
select lsn,posttime,eventtype,login_name,schema_name,targetobjectname,
eventdata.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','varchar(max)')
as eventdata
from xwj_table_all_event/*
lsn posttime eventtype login_name schema_name targetobjectname
1 2008-09-24 22:30:15.780 DROP_TABLE sa dbo NULL drop table xx
2 2008-09-24 22:30:18.640 CREATE_TABLE sa dbo NULL create table dbo.xx(id int )
3 2008-09-24 22:30:21.577 CREATE_INDEX sa dbo xwj_table_all_event create index x_index on xwj_table_all_event(lsn)
*/
if object_id(N'xwj_table_all_event','U') is not null
drop table xwj_table_all_event
go
create table xwj_table_all_event
(lsn int identity(1,1),
posttime datetime,
eventtype varchar(200),
login_name varchar(200),
schema_name varchar(200),
targetobjectname varchar(200),
eventdata xml
);
go
create trigger all_event on database for ddl_database_level_events
as
declare @eventdata xml
set @eventdata=eventdata()
insert into xwj_table_all_event(posttime,eventtype,login_name,schema_name,targetobjectname,eventdata)
values
(@eventdata.value('(/EVENT_INSTANCE/PostTime)[1]','datetime'),
@eventdata.value('(/EVENT_INSTANCE/EventType)[1]','varchar(200)'),
@eventdata.value('(/EVENT_INSTANCE/LoginName)[1]','varchar(200)'),
@eventdata.value('(/EVENT_INSTANCE/SchemaName)[1]','varchar(200)'),
@eventdata.value('(/EVENT_INSTANCE/TargetObjectName)[1]','varchar(200)'),
@eventdata)
go--测试
create table dbo.xx(id int )create index x_index on xwj_table_all_event(lsn)--查看
select lsn,posttime,eventtype,login_name,schema_name,targetobjectname,
eventdata.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','varchar(max)')
as eventdata
from xwj_table_all_event/*
lsn posttime eventtype login_name schema_name targetobjectname
1 2008-09-24 22:30:15.780 DROP_TABLE sa dbo NULL drop table xx
2 2008-09-24 22:30:18.640 CREATE_TABLE sa dbo NULL create table dbo.xx(id int )
3 2008-09-24 22:30:21.577 CREATE_INDEX sa dbo xwj_table_all_event create index x_index on xwj_table_all_event(lsn)
*/
解决方案 »
- 关于数据库被SQL注入的解决方法?
- 存储过程的游标什么作用
- SQL server2005安装的问题 5555
- 触发器执行后,主动触发的表怎么没有更新?
- HQL
- 请问:开发B/S结构,主要要注意什么问题呢?
- sql 里面的case 函数这种写不行吗?
- count()怎么用呢?怎样得到COUNT(*)的返回值
- 时间字段是varchar型,想查询当日信息
- 请问SQL2005下LINKED SERVER PROVIDER为何没MS MS SQL SERVER OLEDB FOR ODBC驱动程序选择?
- 如何用sql语句生成‘作业’每周五临晨自动完全备份数据库?
- 在sql中如何通过存储过程或触发器实现如下功能
根据各自的需求,关联一些DMV,得到自己想要的东西,比如应用程序名,客户端IP等。
就好比2008里的策略配置,我想开启什么策略,禁止什么,按照模式,配置就好了。
完全个人喜好~。
做这些东西,实际意义不大,反而如果跑在生产环境下,会带来负面的效率影响。
可操作性,可管理性得到了比较大的改观,感觉还有其实际价值。我曾经在想,是不是真的很多企业没有用这个,MS才考虑把其升级成为一个应用功能。
就好比NOTIFICATION SERVICE将要被取缔一样。