SQL Server 数据库级审核过滤不起作用

Her*_*ner 6 sql-server sql-server-2012 sql-server-2014

我已经SQL Server 2014 Enterprise Edition安装了。出于隐私考虑,需要记录私有数据上的 SELECT 语句(特定域用户除外),由写入数据库的服务使用。

创建数据库级审计规范效果很好。例如

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-01]
FOR SERVER AUDIT [My_Audit]
ADD (SELECT ON SCHEMA::[dbo] BY [public])
WITH (STATE = OFF)
GO
Run Code Online (Sandbox Code Playgroud)

导致每个人的所有 SELECT 语句都写入日志文件。当我用 替换SCHEMA::[dbo][MyTable],日志被正确过滤为 SELECTs on MyTableonly。

但是当我替换public为特定的用户名时MYDOMAIN\myuser,日志条目不会像我预期的那样针对给定的用户名进行过滤。

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-01]
FOR SERVER AUDIT [My_Audit]
ADD (SELECT ON SCHEMA::[dbo] BY [MYDOMAIN\myuser])
WITH (STATE = OFF)
GO
Run Code Online (Sandbox Code Playgroud)

任何用户发出的每个 SELECT被记录下来。

我查询sys.server_principals以检查给定的用户是否是有效的主体名称,但它实际上显示在结果中。

我的第二个审计规范有什么问题?

编辑:似乎有问题的 CREATE 语句已被默默丢弃。在 SQL management studio 中发布Script Database Audit Specification as ...时,将原始语句写入查询编辑器窗口。但是,将值更改为用户名以外的其他值(例如,替换publicdbo)效果很好。

Her*_*ner 1

就我而言,MYDOMAIN\myuser服务器主体,而不是数据库主体。只有后者可以在数据库审计定义中使用。

数据库主体可以是数据库用户或角色(请参阅文档)。我创建了一个新的数据库角色以在审计定义中使用。然后,我为相关用户创建了登录名,并在“用户映射”下选择了 apt 角色成员资格。

提示:由于某些原因,似乎有必要在添加用户登录之前定义角色。添加现有登录名作为角色成员对我来说不起作用。