SQL Server 2005 内置工具建审查系统
作者:Tim Chapman 发布时间:2009-01-19 14:24:00
作为收费应用方面的数据库管理员(DBA),公司首席信息官(CIO)经常邀请我与Sarbanes-Oxley审查员开会讨 * 司数据的安全与整合问题。简单地说,他希望我们通过适当的文件回答许多问题:如谁访问了我们的数据、如何批准访问权、以及我们如何对访问进行监控,以防止某些人入侵、登录数据或做他们不该做的事情。
我的CIO与我了解了一些证明Sarbanes-Oxley法案遵守的商业解决方案。但是,我们决定应用SQL Server 2005内置工具来建立我们“自产的”审查系统。
Server 2005新功能
在使用SQL Server 2005之前,我们应用数据操作语言(DML)触发器来了解数据库中何时会发生数据变化。我们可以指着审查日志说,这里有一个列表,列出了自上次审查以来我们发布的所有插入(INSERT)、更新(UPDATE)与删除(DETELE)语句,包括执行语句的时间、日期、个人或程序。
DML触发器是一个数据库引擎启动的专用存储程序,它在为数据变化建立审查索引方面有很大的作用。但是,DML触发器只有在数据发生变化时才会启动。在使用SQL Server 2005之前,我们没有较好的办法来追踪数据库服务器中的结构或安全变化。
SQL Server 2005支持数据定义语言(DDL)触发器。在发生服务器或数据库级事件时,这些触发器才会建立并启动。DDL触发器允许我们追踪数据库中的重要变化——有意的、无意的或恶意的改变。
追踪所有注册
下面是一个DDL触发器改善数据库监控能力的典型例子。在以前版本的SQL Server中,我们很难了解何时建立新注册、何时建立新数据库、或是何时给不同用户分配了新许可。
在SQL Server 2005中,追踪这样的安全变化要相对容易一些。为说明这一点,无论用户是谁,让我们设计了一个追踪服务器上所有行为的解决方案。我们将用DDL触发器事件DDL_LOGIN_EVENTS来建立审查索引。这个事件触发器将寻找服务器上的任何注册事件,包括所有的建立注册(CREATE LOGIN)、修改注册(ALTER LOGIN)与删除注册(DELETE LOGIN)事件。
在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审查感兴趣的事件包括:建立或终止其它数据库对象,如表格、程序、触发器、概念、函数等。
在本文中,我们的讨论仅限于服务器级事件。在以后的文章中,我将说明一个追踪数据库级事件的触发器。我还将向你展示那些触发器如何执行追踪事件以外的功能——实际上,它们可阻止你不想发生的未授权的事件在数据库中出现。
猜你喜欢
- ul: unordered lists ol: ordered lists li: Listsol 有序列表:<ol>
- 目前,保护数据免受未授权用户的侵犯是系统管理员特别关心的问题。如果你现在用的是MySQL,就可以使用一些方便的功能来保护系统,来大大减少机密
- 这世上“没有丑女人,只有懒女人”这是女人美丽圣经里的最精彩的一句话了,一个女人只要舍得花时间琢磨怎么保养,怎么打扮,总能够找到方法展现自己美
- //设置已存在表中字段为auto_incrementALTER TABLE tablename change id id int(2) no
- 在 ASP 的内建对象中除了用于发送、接收和处理数据的对象外,还有一些非常实用的代表 Active Server 应用程序和单个
- 简介 函数式编程语言在学术领域已经存在相当长一段时间了,但是从历史上看,它们没有丰富的工具和库可供使用。随着 .NET 平台上的
- 死锁是指在某组资源中,两个或两个以上的线程在执行过程中,在争夺某一资源时而造成互相等待的现象,若无外力的作用下,它们都将无法推进下去,死时就
- 一般上电子商务网站买东西的用户分三种:随便看看,就是不买先看看,买不买再说就是来买东西的这样的需求反应到产品页的购买按钮上,我们一般会看到购
- 继续Mootools常用方法扩展,依然还是String类的扩展。方法:unescapseHTML说明:这个上次忘了,和escapseHTML
- OL是有序列表,但给list-style-type:decimal 定义,在IE中却显示的全是1,在火狐、Opera、谷歌、Safari等中
- 通常我们会在一些javascript的书籍上看到,使用Javascript保留字作为标识符(变量名、函数名、循环标记等)时,会引起程序报错!
- 如何显示数据库中的图片和超级链接?代码见下:<% set conn=server.creatobject(&quo
- iframe 标签 -- 代表HTML内联框架iframe 标签是成对出现的,以<iframe>开始,</ifr
- 如何在页面中实现对电子信箱的访问?emaile.htm<HTML><HEAD><META NAME=
- 有感于中国互联网设计界十几年的变化,从网页设计师变身界面设计师,和近一两年来兴起的转型交互设计师。大多数都是随着一个行业的兴起而前赴后继的投
- 网上有这样一道题目:一个字符串String=“adadfdfseffserfefsefseetsdg”,找出里面出现次数最多的字母和出现的次
- sql server端口,我们可以通过\"服务器端网络试用工具\"和\"客户端实用工具\"来设定,设
- 最近正在做首页,处理很棘手的浏览器兼容的问题,主要调试的浏览器为 IE6 ,IE7 ,FF3 ,Opera9.5 ,Safari3.1.2兼
- SQL Server导出表到EXCEL文件的存储过程:*--数据导出EXCEL导出表中的数据到Excel,包含字段名,文件为真正的Excel
- 这是一个很简单的纯CSS相册滑动浏览效果,仅用一个无序列表ul结合简单的CSS就可以实现。原文中介绍的纵向滑动相册的实现方法,但是相比之下个