在SQL Server 2005中创建DDL表格来审计DDL触发活动(二)

日期: 2009-02-17 作者:Robert Sheldon翻译:曾少宁 来源:TechTarget中国 英文

测试审计方法   最佳的测试方法就是运行一对针对AdventureWorks数据库的DDL语句。下面的语句创建了Person、Contact2表,接着删除了表: SELECT FirstName, LastName, EmailAddress INTO Person.Contact2 FROM Person.Contact GO DROP TABLE Person.Contact2   两个语句都应该在AdventureWorks上生成DDL事件,接着启动LogEvents触发器。为了验证触发器是否正确地记录了这两个事件,只……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

测试审计方法

  最佳的测试方法就是运行一对针对AdventureWorks数据库的DDL语句。下面的语句创建了Person、Contact2表,接着删除了表:


SELECT FirstName, LastName, EmailAddress
INTO Person.Contact2
FROM Person.Contact
GO
DROP TABLE Person.Contact2

  两个语句都应该在AdventureWorks上生成DDL事件,接着启动LogEvents触发器。为了验证触发器是否正确地记录了这两个事件,只需简单的运行下面的SELECT语句:


SELECT * FROM dbo.EventLog

  语句必须返回两行。在每一行,EventInstance字段都必须包含一个与具体事件相关的XML。如果查看第一行的XML,那么结果应该是这样的:

  在SQL Server 2005中创建DDL表格来审计DDL触发活动

  注意,事件数据包含了事件类型、创建的对象以及用于创建表格的命令和其它的信息。如果只想从EventInstance字段中检索特定的信息,可以使用XQuery表达式来访问单个元素值。比如,下面的SELECT语句使用了XML value()方法来检索事件类型、模式名和对象名:


SELECT EventID,
EventInstance.value('(//EventType)[1]', 
'nvarchar(30)') AS EventType,
EventInstance.value('concat((//SchemaName)[1], 
".", (//ObjectName)[1])', 'nvarchar(60)') 
AS ObjectName
FROM dbo.EventLog

  正如你所看到的,我先通过指定XML数据类型定义的EventInstance字段调用了value()方法。我可以以这种方法调用任意的XML方法。value()方法包含两个参数。第一个定义了我所要检索的XML元素。第二个定义了数据类型。第一个参数必须包含在括号中,并且后面加上[1],因为value()方法总是返回标量值,。即使指定的元素是在XML(如本例子)中是唯一的也必须指定[1]。当运行这个SELECT语句时,会得到下面的结果:

  

EventID

EventType

ObjectName

1

CREATE_TABLE

Person.Contact2

2

DROP_TABLE

Person.Contact2

                    (2 row(s) affected)

  结果显示的是CREATE_TABLE and DROP_TABLE事件类型,这正是我所运行的DDL语句所应该产生的结果。因为SQL Server现在支持Data Definition Language (DDL)触发器,因此可以非常容易地审计由这些语句生成的事件。正如我所阐述的,一个简单的审计事件的方法就是在SQL Server上创建一个审计表,并定义一个触发器。然而,我们也可以使用DDL触发器来执行一些操作,而不是在审计表中插入一行。比如,当一个特别的DDL事件发生时,发送一封邮件到一个指定的接受者。当创建一个DDL触发器时,我们可以定义一个或多个Transact-SQL语句来完成一些特定的操作,这样就可以通过创建触发器来执行各种不同的任务。

翻译

曾少宁
曾少宁

TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。

相关推荐