跟踪对表的授予权限

use*_*163 6 sql-server audit permissions sql-server-2012

我想看看授予特定表的权限是否有任何更改。

例如,我不想让登录名“John”拥有SELECT对表 Invoices的权限。

如果这个许可是GRANTed给约翰的,我想知道。我想知道是谁授予了他的许可,什么时候授予的。

我正在使用 SQL Server 2012 企业版。

Mik*_*Fal 6

由于您使用的是 SQL 2012,您可以利用SQL Server 审计,它是随 SQL 2008 引入的。SQL Server 审计可用于跟踪 SQL Server 中的大量操作,包括数据库对象权限GRANT/REVOKE/DENY操作。您将能够看到执行该语句的安全主体、该语句的运行时间以及该语句的确切内容。要创建审核,您需要执行以下操作:

创建审计

审计定义了所有审计的总体日志记录。要创建审计,您可以使用对象资源管理器在实例下浏览到安全->审计。右键单击审计并选择“新建审计”。填写下一个对话框(这里重要的是您存储审计文件的位置,其余的您可以使用默认值)。创建后,您需要在对象浏览器中右键单击审核并启用它。

创建审计规范

规范定义了您要跟踪的操作,使用操作/组的任意组合来定义规范。可以跟踪服务器和数据库级别的许多不同操作。要为数据库权限更改创建规范,请在要跟踪的数据库下浏览到安全性-> 数据库审计规范。右键单击并填写对话框。选择您在上面创建的审计以写入。在审核操作类型下,SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP从下拉列表中选择。此操作允许您跟踪架构对象的权限更改。完成后,单击“确定”以创建规范。然后,在对象浏览器中启用它。

查看审计

一旦这一切完成,审计就会运行,并将捕获GRANT/REVOKE/DENY该数据库中的操作。要查看审计日志,请在 Security->Audits 中浏览到实例下的审计。右键单击审计并选择“查看审计日志”,您将能够看到自开始审计以来在数据库中发生的所有审计操作。

作为替代方案,可以使用 T-SQL 和以下命令启用您的审计:

--Create Audit
USE [master];

CREATE SERVER AUDIT [PermissionTracking]
TO FILE 
(   FILEPATH = N'C:\DBData'
    ,MAXSIZE = 0 MB
    ,MAX_ROLLOVER_FILES = 2147483647
    ,RESERVE_DISK_SPACE = OFF
)
WITH
(   QUEUE_DELAY = 1000
    ,ON_FAILURE = CONTINUE
);

--Enable Audit
ALTER SERVER AUDIT [PermissionTracking] WITH (STATE=ON);

--Create Database Audit Specification
USE [foo];

CREATE DATABASE AUDIT SPECIFICATION [FooDBPermissions]
FOR SERVER AUDIT [PermissionTracking]
ADD (SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP)
WITH (STATE=ON);
Run Code Online (Sandbox Code Playgroud)