监控表权限变化

Mag*_*ier 5 monitoring sql-server permissions sql-server-2008-r2

我需要一个解决方案来监视表权限更改:

  • 如何监控 SQL Server 2008 R2 中特定表上特定或任何用户的授予权限的每项更改?

Jul*_*eur 4

对于 SQL Server 2008 R2(直到当前版本),您可以使用使用扩展事件的SQL Server AuditSQL Server Audit 。

查看了解 SQL Server 审计

审核 SQL Server 实例或 SQL Server 数据库涉及跟踪和记录系统上发生的事件。您可以使用多种 SQL Server 审核方法,如审核(数据库引擎)中所述。从 SQL Server 2008 Enterprise 开始,您还可以使用 SQL Server Audit 设置自动审核。

SQL Server Audit 是几个部分的组合:

  • SQL Server Audit = 在实例上定义实例或数据库级别的操作或操作组以监视和输出的目标
  • 服务器审核规范 = 链接到一个 SQL Server 审核,用于使用扩展事件收集服务器级别的预定义操作组
  • 数据库审核规范 = 链接到一个 SQL Server 审核,用于使用扩展事件收集数据库级别的操作组或审核事件
  • 目标 = 文件、Windows 安全事件日志或 Windows 应用程序事件日志的输出目标

创建和使用审核的一般流程如下:

  1. 创建审核并定义目标。
  2. 创建映射到审计的服务器审计规范或数据库审计规范。
  3. 启用审核规范。
  4. 启用审核。
  5. 做一些与审计相关的事情...
  6. 使用 Windows 事件查看器、日志文件查看器或 fn_get_audit_file 函数读取审核事件。

1. 创建审核:

USE [master]
GO
CREATE SERVER AUDIT [AuditTest] 
TO FILE 
(   FILEPATH = N'...\...'
    ,MAXSIZE = 0 MB
    ,MAX_ROLLOVER_FILES = 2147483647
    ,RESERVE_DISK_SPACE = OFF
)
WITH
(   QUEUE_DELAY = 1000
    ,ON_FAILURE = CONTINUE
);
Run Code Online (Sandbox Code Playgroud)

2. 创建审核规范:

USE [YourDB]
GO
CREATE DATABASE AUDIT SPECIFICATION [SpecTest] 
FOR SERVER AUDIT [AuditTest] 
ADD (SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP)
WITH (STATE = ON)
Run Code Online (Sandbox Code Playgroud)

3. 启用或更改审核规范:

ALTER DATABASE AUDIT SPECIFICATION [SpecTest] WITH (STATE=OFF);
ALTER DATABASE AUDIT SPECIFICATION [SpecTest] ADD (SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP)
ALTER DATABASE AUDIT SPECIFICATION [SpecTest] WITH (STATE=ON);
Run Code Online (Sandbox Code Playgroud)

4. 启用/禁用审核

USE [master]
GO
-- disable
ALTER SERVER AUDIT [AuditTest2] WITH (STATE=OFF)
-- enable
ALTER SERVER AUDIT [AuditTest2] WITH (STATE=ON)
Run Code Online (Sandbox Code Playgroud)

5. 更改权限

DENY SELECT on dbo.testA to testLogin
REVOKE VIEW DEFINITION ON dbo.testA to testLogin
GRANT ALTER ON dbo.testA to testLogin
Run Code Online (Sandbox Code Playgroud)

6. 读取审核日志:

SELECT * FROM sys.fn_get_audit_file (N'C:\_data\AuditTest_*.sqlaudit', DEFAULT, DEFAULT);
Run Code Online (Sandbox Code Playgroud)

输出:

event_time                  sequence_number action_id   succeeded   permission_bitmask                  is_column_permission    session_id  server_principal_id database_principal_id   target_server_principal_id  ...
2016-01-25 13:50:36.3210127 1               D           1           0x00000000000000000000000000000001  0                       57          260                 1                       271                         ...
2016-01-25 13:50:36.3210127 1               R           1           0x00000000000000000000000000000100  0                       57          260                 1                       271                         ...
2016-01-25 13:50:36.3210127 1               G           1           0x00000000000000000000000000000200  0                       57          260                 1                       271                         ...
Run Code Online (Sandbox Code Playgroud)

请注意,我正在使用SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP代替DATABASE_OBJECT_PERMISSION_CHANGE_GROUP. 您可以从页面中间的SQL Server 审核操作组和操作中阅读更多内容:

每当对模式对象执行授予、拒绝、撤销时都会引发此事件。相当于审核模式对象 GDR 事件类。