如何定义含'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
相关产品推荐
相关产品推荐

