试图确定一台服务器输出的审计文件是否可以在没有 CONTROL SERVER 访问该服务器的情况下被读取。MSDN 文档建议这是可能的:
即使数据库引擎正在写入文件,如果其他 Windows 用户有权限,他们也可以读取审计文件。数据库引擎不采用阻止读取操作的排他锁。
并且:
我们建议您从单独的 SQL Server 实例(例如 SQL Server Express 实例)生成审计报告,只有审计管理员或审计读者才能访问该实例。通过使用数据库引擎的单独实例进行报告,您可以帮助防止未经授权的用户获得对审计记录的访问权限。
简而言之,我可以这样做吗?
- 在 Prod DB 上配置审核以输出到文件共享
- 授予审核读者对文件共享的读取权限
- 使用来自单独数据库的 sys.fn_get_audit_file('fileshare*') 生成审计报告。
[澄清] q 的关键部分是,您能否使用 sys.fn_get_audit_file 从单独的数据库访问文件,而无需对创建审计信息的数据库进行管理员访问。这样,我们就可以将具有文件系统访问权限的审计阅读器与具有数据库管理员访问权限的 DBA 分开。很抱歉最初没有说清楚。
关于您的回答,这个查询可以从一个不相关的 SQL Mgmt Studio/DB 运行,由不是原始 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);