创旗管理系统服务中心
创旗管理系统服务中心

SQL Server 2005 内置工具建审查系统

作为收费应用方面的数据库管理员(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审查感兴趣的事件包括:建立或终止其他数据库对象,如表格、程式、触发器、概念、函数等。

在本文中,我们的讨论仅限于服务器级事件。在以后的文章中,我将说明一个追踪数据库级事件的触发器。我还将向您展示那些触发器如何执行追踪事件以外的功能——实际上,他们可阻止您不想发生的未授权的事件在数据库中出现。

附件列表

文章内容仅供参考,如果您需要解决具体问题建议您提交有问必答。 0

标签: SQL Server 审查日志

收藏到: Favorites  

同义词: 暂无同义词

文章信息
客服导航
如果您在使用我们的产品中遇到问题,建议您首先在“常见问题”中查询解决方法;
如果没有找到该问题的解决方法,您可以在“问题搜索”中进行搜索;
如果搜索后没有找到满意答案,您可以“在线提问”,我们会在1个工作日内给您答复。