SQL Server 2012审计报告生成

时间:2012-12-06 22:44:50

标签: sql sql-server-2012 audit

尝试确定是否可以在该服务器上没有CONTROL SERVER访问权限的情况下读取一台服务器输出的审计文件。 MSDN docs表明这是可能的:

  

即使数据库引擎正在写入其他Windows文件   用户可以在有权限的情况下读取审计文件。数据库   引擎不会采用阻止读取操作的独占锁定。

还有:

  

我们建议您从单独的实例生成审核报告   SQL Server的一部分,例如SQL Server Express的一个实例   只有审核管理员或审核读者才能访问。通过使用   单独的数据库引擎实例进行报告,您可以提供帮助   防止未经授权的用户获取对审核记录的访问权。

简而言之,我可以这样做吗?

  • 在Prod DB上配置审核以输出到fileshare
  • 为审核读者提供对文件共享的读取权限
  • 使用来自单独数据库的sys.fn_get_audit_file('fileshare *')来生成审计报告。

[澄清] q的关键部分是,您是否可以使用来自单独数据库的sys.fn_get_audit_file访问该文件,而无需在创建审计信息的数据库上拥有管理员访问权限。这样我们就可以让具有DB管理员访问权限的DBA独立于文件系统访问的审计读者。很抱歉没有最初说清楚。

就您的答案而言,此查询是否可以从不相关的SQL Mgmt Studio / DB运行,是否由原始数据库上不是DBA的人运行?

SELECT 
    event_time, action_id, session_id, object_id, class_type, 
    database_principal_name, database_name, object_name, statement
FROM 
    sys.fn_get_audit_file('\\Temp\Audit\*',NULL,NULL);

1 个答案:

答案 0 :(得分:2)

确实,这很有效。

USE [master]
GO

CREATE SERVER AUDIT [SQL2012-Audit-20121214-Demo]
TO FILE 
(   FILEPATH = N'\\Temp\Audit'
    ,MAXSIZE = 2 MB
    ,MAX_FILES = 32
    ,RESERVE_DISK_SPACE = OFF
) WITH (QUEUE_DELAY = 2000,ON_FAILURE = CONTINUE)
GO

ALTER SERVER AUDIT [SQL2012-Audit-20121214-Demo] WITH (STATE = ON);

USE [Performance]
GO

CREATE DATABASE AUDIT SPECIFICATION [SQL2012-DBAudit-20121214-Demo]
FOR SERVER AUDIT [SQL2012-Audit-20121214-Demo]
ADD (SELECT,INSERT,DELETE,UPDATE,EXECUTE ON DATABASE::[Performance] BY [dbo])
WITH (STATE = ON);
GO

在服务器审核和数据库审核到位并激活后,立即创建了第一个审核文件,因为Windows声明该文件正在使用中,因此无法将其删除。

但是,从文件中选择始终有效。这是“工作量”,其中包含可能被审计设置捕获的活动:

SELECT * INTO partition_stats_4 FROM Performance.sys.dm_db_partition_stats
SELECT * INTO partition_stats_3 FROM Performance.sys.dm_db_partition_stats
SELECT * INTO partition_stats_2 FROM Performance.sys.dm_db_partition_stats
SELECT * INTO partition_stats_1 FROM Performance.sys.dm_db_partition_stats
SELECT * INTO partition_stats   FROM Performance.sys.dm_db_partition_stats

DELETE FROM partition_stats
DELETE FROM partition_stats_1
DELETE FROM partition_stats_2
DELETE FROM partition_stats_3
DELETE FROM partition_stats_4

DROP TABLE partition_stats_4
DROP TABLE partition_stats_3
DROP TABLE partition_stats_2
DROP TABLE partition_stats_1
DROP TABLE partition_stats

这是结果:

SELECT 
    event_time, action_id, session_id, object_id, class_type, 
    database_principal_name, database_name, object_name, statement
FROM 
    sys.fn_get_audit_file('\\Temp\Audit\*',NULL,NULL);

SQL Server 2012 - DB Audit Results

顺便说一句,这与服务器端跟踪文件完全相同。我们一直在运行跟踪,文件是“可查询的”,没有任何问题。

快乐的审核!