步骤1:打开SSMS,登录到指定的实例,展开“Security”,“Audits”节点。
步骤2:在“Audits”节点上,右键选择“New Audit…”选项。
步骤3:在“Create Audit”窗口,输入以下的参数。
? 在“Audit name”输入Audit-AdventureWorks2012-Create/Alter/Drop。
? 在“Audit destination”选择“File”
? 在“File path”输入D:\MSSQL\DATA\Audit_logs。
步骤4:单击“OK”完成设置。
步骤5:右键点击刚刚创建的审核“Audit-AdventureWorks2012-Create/Alter/Drop”,选择“Enable Audit”选项。
步骤1:在“Object Explorer”窗口,展开“Databases”,“AdventureWorks2012”,“Security”,“Database Audit Specifications”节点。
步骤2:在“Database Audit Specifications”节点,单击右键选择“Create Database Audit Specification”选项。
步骤3:在“Create Database Audit Specification”窗口,输入以下参数。
l 在“Name”输入DatabaseAuditSpecification-Object-Create/Alter/Drop。
l 在“Audit”选择之前创建的审核对象“Audit-AdventureWorks2012-Create/Alter/Drop”。
l 在“Actions”区域中“Audit Action Type”下的第一行,选择“SCHEMA_OBJECT_CHANGE_GROUP”。
“SCHEMA_OBJECT_CHANGE_GROUP”是属于数据库级别的审核操作组,在架构上执行CREATE、ALTER和DROP操作时,就会引发这个事件。
步骤4:单击“OK”按钮,完成设置。
步骤5:右键单击刚才创建的数据库审核规范“DatabaseAuditSpecification-Object-Create/Alter/Drop”,选择“Enable Database Audit Specification”选项。
步骤1:打开SSMS,单击“New Query”执行以下代码,在数据库AdventureWorks2012创建、修改与删除数据库的对象。
USE AdventureWorks2012 GO --Create Database Object CREATE TABLE T1(Col1 int not null primary key) GO CREATE VIEW V1 AS SELECT * FROM T1 GO CREATE SYNONYM SYN1 FOR T1 GO CREATE FUNCTION FUN1(@InParm int) RETURNS int AS BEGIN RETURN @InParm END GO CREATE PROCEDURE PROC1(@InParm int) AS BEGIN SET @InParm = 0 END GO CREATE TRIGGER TRIG1 ON T1 AFTER INSERT AS RAISERROR('This is a dummy table',16,10) GO --Alter Database Object ALTER TABLE T1 ADD Col2 varchar(32) GO ALTER PROC PROC1 AS SELECT 1 GO --Drop Database Object DROP TRIGGER TRIG1 GO DROP PROCEDURE PROC1 GO DROP FUNCTION FUN1 GO DROP SYNONYM SYN1 GO DROP VIEW V1 GO DROP TABLE T1 GO
步骤1:展开“Security”,“Audits”节点。
步骤2:在刚才创建的“Audit-AdventureWorks2012-Create/Alter/Drop”对象上,右键选择“View Audit Logs”。
步骤3:在“Log File Viewer”窗口左上角的“Select logs”区域中,确认有勾选“Audit Collection”,“Audit-AdventureWorks2012-Create/Alter/Drop”。并用以下方式来阅读所记录的审核数据。
l 在右边“Log file summary”区域内,在“Action ID”区域中,分别点击“CREATE”、“ALTER”、“DROP”等操作类型。
l 在“Class Type”显示所记录的各类对象“TABLE”、“VIEW”、“STORED PROCEDURE”等数据库对象。
l 在下面的“Statement”区域,可以看到所记录的程序代码。
l 取得发生事件的日期与时间,可能是利用的SQL Server 2008之后新提供的日期时间函数SYSUTCDATETIME()。回传的数据类型是datetime2,内容值包含执行SQL Server实例的服务器的日期和事件。而这个日期与时间是以国际标准时间(Coordinated Universal Time:UTC)时间格式回传,此函数将取回服务器上的格林威治时间(Greenwich Mean Time:GMT),也就是落后北京时间标准8小时。
备注:datetime2是SQL Server 2008之后新增的数据类型,包含了日期数据,并结合以24小时制为基础的时间。Datetime2可视为既有的datetime数据类型的扩展,它具有较大的日期范围、较精确的小数有效位数和选择性的用户指定有效位数。日期范围可以从公元1年1月1日到公元9999年12月31日,时间范围可以到00:00:00到23:59:59.9999999,精确度为100ns(1ns=10的负九次方秒)。
采用格林威治时间(GMT)来记录日期时间数据,对于DBA而言,若拥有位于不同时区的数据库服务器时,这是一个将日志的时间标准化的作法。但对于非格林威治时间(GMT)时区的用户而言,例如:北京时区是(GMT+08:00),可能是个困扰。在接下来的实践中,将使用T-SQL函数fn_get_audit_file来分析与查看审核日志的数据,就可以将格林威治时间(GMT)转为适合的时区的信息。
步骤1:在“Security”,“Audits”节点上的“Audit-AdventureWorks2012-Create/Alter/Drop”对象上,右键禁用审核。
若要调整“Audits”对象的属性,必须要先禁用此“Audits”之后才能进行调整,否则将产生错误信息,无法调整属性。
步骤2:单击被禁用的审核对象,单击鼠标右键选择“Properties”选项。
步骤3:在“Audit Properties”窗口中的“Audit destination”框,下拉选择“Application Log”。
步骤4:单击“OK”按钮,完成属性的调整。
步骤5:单击被禁用的审核对象,右键再启用审核。
步骤6:再次执行之前在数据库AdventureWorks2012创建、修改与删除数据库对象的T-SQL代码。
步骤1:展开“Security”,“Audits”节点。
步骤2:在刚才创建的“Audit-AdventureWorks2012-Create/Alter/Drop”对象上,右键选择“View Audit Logs”。
步骤3:在“Log File Viewer”窗口左上角的“Select logs”区域中,确认有勾选“Windows NT”,“Application”。
步骤4:在右边的“Log file summary”区域,即可查看所记录到数据。
采用“Windows应用程序事件日志文件”方式来存放审核日志,具备以下特性。
l 审核内部所记录的日期时间部分,仍以格林威治时间(GMT)来记录。
l 在应用程序事件日志文件所记录的日志时间,已经转为数据库服务器所在时区的日期时间。
l 审核所记录到数据全部存放在消息区域内,其“statement”部分,有记录所执行的T-SQL程序代码。但这在阅读与后续分析上,势必会增加困扰。若与存放到二进制文件的审核目标比较起来,二进制文件存放的审核日志已经分类在各数据行中,如此一来,不但增加可读性,也容易进行筛选与分析。
若使用Windows的事件查看器来阅读所记录到的审核数据,可以在“Application”页查看所记录的信息。