版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Benjayming/article/details/82832350
SQL Server Audit 功能体验
SQL Server 的Audit功能可以用来对数据库进行某种审计。下面用一个简单的例子来说明一下它的用法和效果。更多详细用法还请自行翻阅联机丛书。
业务场景
对用户dbo对某个表的Delete操作进行审计
创建数据库审计(Audit)步骤
- 创建Server Audit
- 创建Database Audit Specification
- 分别启用Server Audit 和 Database Audit Specification
图形界面
- 创建Server Audit
说明:上图设置的审计日志输出到文件(File),也可以选择到系统的应用程序/安全日志(Application Log/Security Log)。
- Database Audit Specification
- 分别启用
分别右键选择启动即可(图略)
对应 T-SQL 命令
-- 1、创建 Server Audit
USE [master]
GO
CREATE SERVER AUDIT [TestAudit_Temp_Bank]
TO FILE
( FILEPATH = N'D:\DB-File'
,MAXSIZE = 1 GB
,MAX_ROLLOVER_FILES = 10
,RESERVE_DISK_SPACE = OFF
)
WITH
( QUEUE_DELAY = 1000
,ON_FAILURE = CONTINUE
)
GO
-- 2、创建 Database Audit Specification
USE [MyDB]
GO
CREATE DATABASE AUDIT SPECIFICATION [TestAudit_Temp_Bank_MyDB]
FOR SERVER AUDIT [TestAudit_Temp_Bank]
ADD (DELETE ON OBJECT::[dbo].[temp_bank] BY [dbo])
-- 3、分别启用
ALTER SERVER AUDIT [TestAudit_Temp_Bank] WITH (STATUS = ON)
GO
ALTER DATABASE AUDIT SPECIFICATION [TestAudit_Temp_Bank_MyDB] WITH (STATUS = ON)
GO
效果
用数据库拥有者账号(会映射到用户dbo)运行对表temp_bank的Delete语句之后,用sys.fn_get_audit_file函数查看审计日志:
SELECT DATEADD(mi,DATEDIFF(mi,GETUTCDATE(),GETDATE()),event_time) AS RealEventTime,*
FROM sys.fn_get_audit_file ('D:\DB-File\TestAudit_Temp_Bank_AC916F20-A23F-4244-8509-5E3B3ED51445_0_131822638146730000.sqlaudit'
,default,default);
结果:
1.日志中的EventTime实际是UTC时间,查询SQL中转换为了本地时间
2.不管运行的Delete语句是否真的删除了数据(可能Where条件不满足),均会被记录。
3. 如果Delete语句在存储过程中,审计也会被记录,在Additional Informaiton一列中会有调用栈信息。