【问题标题】:SQL Server 2012 Audit Report GenerationSQL Server 2012 审计报告生成
【发布时间】:2012-11-25 02:16:02
【问题描述】:

试图确定一台服务器输出的审计文件是否可以在没有 CONTROL SERVER 访问该服务器的情况下被读取。 MSDN docs 建议这是可能的:

即使数据库引擎正在写入文件,其他 Windows 如果有权限,用户可以读取审计文件。数据库 引擎不采用阻止读取操作的排他锁。

还有:

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

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

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

[澄清] q 的关键部分是,您能否使用 sys.fn_get_audit_file 从单独的数据库访问文件,而无需对创建审计信息的数据库进行管理员访问。这样,我们就可以将具有文件系统访问权限的审计阅读器与具有数据库管理员访问权限的 DBA 分开。很抱歉一开始没有说清楚。

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

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);

【问题讨论】:

  • 您是否尝试过上面列出的简短步骤?你有没有尝试过别的东西?
  • @mceda - 我至少要到 1 月中旬才能访问 SQL 2012,同时我计划在 SQL 2008 上尝试这个,因为文档看起来很相似。
  • 我没有尝试的唯一部分是要点 3 - 单独的数据库无关紧要 - 访问文件的用户是您的 SQL Server 服务用户。
  • @mceda - 再次感谢 - 您已经做了很多工作来获得赏金,但用户职责的分离(实时数据的审计员不必是 DBA)至关重要。
  • 无论我尝试过什么上下文切换、存储过程帽子读取文件等等,在同一台服务器上,我都无法为我的普通用户提供足够的权力。

标签: sql sql-server-2012 audit


【解决方案1】:

确实,这行得通。

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);

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

审核愉快!

【讨论】:

  • 我没有可以测试对活动审计文件的只读访问权限的环境。但是,一旦用户拥有CONTROL SERVER 权限,从从生产复制到不同环境的同一个审计文件中选择记录,就会在不同的服务器上工作。
猜你喜欢
  • 2017-12-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多