无论如何为"SELECT"语句创建SQL Server DDL触发器?

dan*_*die 8 t-sql sql-server ddl triggers sql-server-2005

我正在处理一些敏感的会计表,我想审计SELECT在表上执行的任何语句或与它们相关的任何视图.

我没有在BOL(联机丛书)上找到任何与声明有关的DDL事件SELECT.和DML触发器是INSERT,UPDATEDELETE只.

是否可以通过SELECT语句记录谁访问表和视图?

Rem*_*anu 10

是的,可以通过在AUDIT_DATABASE_OBJECT_ACCESS_EVENT事件上创建事件通知来实现.不过,做这样的事情的成本会非常高.

使用审计基础架构或使用gbn推荐的自定义访问包装器要好得多.

  • 我必须再次强调,为数据库中的每个对象访问检查生成一个事件将是非常重量级的. (5认同)

gbn*_*gbn 9

你有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
Run Code Online (Sandbox Code Playgroud)