我正在处理一些敏感的Accounting表,我想审计在表上执行的任何SELECT语句或与它们相关的任何视图.
我没有在BOL(联机丛书)上找到任何与SELECT语句有关的DDL Events.
DML触发器仅用于INSERT,UPDATE和DELETE.
是否可以通过SELECT语句记录谁访问表和视图?
解决方法
你有3个选择:
>如果要记录(并删除表权限),则允许通过存储过程进行访问
>如果要限制并保持“直接”访问,请将视图隐藏在视图后面
>运行永久跟踪
我会选择选项1或2,因为它们是您的应用程序的一部分并且是自包含的.
虽然,开始记录确实听起来有点迟:但应该事先限制对表的访问.
此外,如果最终用户没有直接更正(例如通过Web服务器或服务帐户),任何解决方案都会失败.除非你使用存储过程发送最终用户名…
查看示例:
CREATE VIEW dbo.MyTableMask AS SELECT * FROM MyTable CROSS JOIN (SELECT 1 FROM SecurityList WHERE name = SUSER_SNAME()) --WHERE could use NOT EXISTS too with table GO