SQL Server 2005 内置工具建审查系统
2007-05-17 09:34:37 来源:WEB开发网在SQL Server 2005中,通过运行CREATE DATABASE DDLTriggerTest语句建立一个审查索引数据库,然后定义下列域:
IDCol SMALLINT IDENTITY(1,1) PRIMARY KEY,
XMLEvent XML
DatabaseName VARCHAR(50)
SystemUser VARCHAR(50)
EntryDate DATETIME DEFAULT (GETDATE())
注意表格中利用了XML数据类型,这是SQL Server 2005中新增的功能。顾名思义,它的作用是保存XML数据。
一旦表格做好准备追踪事件,就可以建立必要的触发器来监控这些事件。第一步,我们的解决方案寻找服务器上发生的注册事件,包括任何建立注册(CREATE LOGIN)、修改注册(ALTER LOGIN)与删除注册(DELETE LOGIN)事件。运行以下脚本来建立触发器:
CREATE TRIGGER tr_Security
ON ALL SERVER
For DDL_LOGIN_EVENTS
AS
BEGIN
?INSERT INTO DDLTriggerTest..
EventtableData(XMLEvent, DatabaseName, SystemUser)
?VALUES (EVENDATA(), DB_NAME(), SYSTEM_USER)
END
这段脚本建立一个触发器,宣称我们希望寻找服务器上发生的所有DDL注册事件。启动触发器所得到的信息将进入我们前面建立的DDLTriggerTest表格中。注意,我们使用三个函数将数据插入表格中。在此例中,EVENTDATA函数将收集与注册有关的信息,因为它是FOR DDL_LOGIN_EVENTS语句指定的事件。SYSTEM_USER函数执行当前语句,返回注册。而且,如你所猜测的,DB_NAME()函数返回执行当前语句的数据库的名称。由于建立一个注册是一个服务器级事件,我们的审查索引记录下发生在主数据库中的语句。
为测试新的触发器,我们必须在服务器上提出一个LOGIN事件。执行CREATE LOGIN TestLogin WITH PASSWORD = '123456xxYYbaz这样的命令,是建立一个新注册的最简单方法。
运行该语句后,如果我们查看信息窗口,就可看到信息(1行受影响)。由于我们安排好审查,所以此语句才会发生。当我们在服务器上运行CREATE LOGIN语句时,DDL触发器被启动,一项记录插入到DDLTriggerTest数据库的EventTableData表格中。
XML中有什么?
你可以在DDLTriggerTest表格中运行SELECT查询来证明我们向表格中写入了记录。如果你习惯应用SQL Server 2000,那么XMLEvent一栏中的数据可能对你来说有些陌生。在SQL Server Management Studio (SSMS)中,点击XMLEvent一栏中的链接即可查看它包含的XML数据。
XMLEvent域由EVENTDATA()函数从触发器中的INSERT语句中移植过来。在这种情况下,EVENTDATA()函数返回与注册有关的XML数据,包括注册的时间与日期、服务器名称、用户ID与机器系统ID。
刚刚开始
DDL_LOGIN_EVENT触发器只是有助于证明系统安全,你能够进行监控的60多个DDL事件中的一个。其它Sarbanes-Oxley审查感兴趣的事件包括:建立或终止其它数据库对象,如表格、程序、触发器、概念、函数等。
在本文中,我们的讨论仅限于服务器级事件。在以后的文章中,我将说明一个追踪数据库级事件的触发器。我还将向你展示那些触发器如何执行追踪事件以外的功能——实际上,它们可阻止你不想发生的未授权的事件在数据库中出现。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接