You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义含'BY Any User'的数据库审计规范?能否替换脚本中的指定用户?

实现SQL Server数据库审计规范的"Any User"审计

好问题!在SQL Server的数据库审计体系中,要实现对所有用户的INSERT/UPDATE/DELETE操作审计,有两种简洁的方式:

1. 省略BY子句(推荐方式)

当你在添加审计操作时,去掉BY [SomeUser]部分,就会默认审计**所有主体(包括所有用户、角色、应用程序账户等)**对目标对象的指定操作。这是最直接的"Any User"等价实现,因为BY子句的作用本来就是限制审计范围到特定主体,省略它就表示不做限制。

修改后的脚本示例:

ALTER DATABASE AUDIT SPECIFICATION [mySpec] 
ADD (INSERT ON OBJECT::[dbo].[SomeTable]),
ADD (UPDATE ON OBJECT::[dbo].[SomeTable]),
ADD (DELETE ON OBJECT::[dbo].[SomeTable]),
-- 继续添加其他表的操作...
WITH (STATE = ON);

2. 显式指定public角色

如果你希望显式写出"所有用户"的等价主体,可以使用public角色——SQL Server中所有数据库用户默认都属于这个角色,所以审计public角色的操作就等同于审计所有用户的操作。

对应的脚本示例:

ALTER DATABASE AUDIT SPECIFICATION [mySpec] 
ADD (INSERT ON OBJECT::[dbo].[SomeTable] BY [public]),
ADD (UPDATE ON OBJECT::[dbo].[SomeTable] BY [public]),
ADD (DELETE ON OBJECT::[dbo].[SomeTable] BY [public]),
-- 继续添加其他表的操作...
WITH (STATE = ON);

额外注意事项

  • 确保你的**服务器审计对象(SERVER AUDIT)**已经创建并启用,数据库审计规范需要关联到服务器审计才能生成审计记录。
  • 可以使用sys.fn_get_audit_file函数查询审计日志,验证是否所有用户的操作都被正确捕获:
    SELECT * FROM sys.fn_get_audit_file('\\your-audit-file-path\*.sqlaudit', DEFAULT, DEFAULT);
    

内容的提问来源于stack exchange,提问作者Hugh Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:01:19