尝试确定是否可以在该服务器上没有CONTROL SERVER访问权限的情况下读取一台服务器输出的审计文件。 MSDN docs表明这是可能的:
即使数据库引擎正在写入其他Windows文件 用户可以在有权限的情况下读取审计文件。数据库 引擎不会采用阻止读取操作的独占锁定。
还有:
我们建议您从单独的实例生成审核报告 SQL Server的一部分,例如SQL Server Express的一个实例 只有审核管理员或审核读者才能访问。通过使用 单独的数据库引擎实例进行报告,您可以提供帮助 防止未经授权的用户获取对审核记录的访问权。
简而言之,我可以这样做吗?
[澄清] 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);
答案 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);
顺便说一句,这与服务器端跟踪文件完全相同。我们一直在运行跟踪,文件是“可查询的”,没有任何问题。
快乐的审核!