代码之家  ›  专栏  ›  技术社区  ›  Shashank Shekhar

如何设置数据库中所有表的数据库审核规范

  •  2
  • Shashank Shekhar  · 技术社区  · 16 年前

    我需要创建一个审计来跟踪数据库中所有表的所有CRUD事件, 现在我在数据库中有100多个表,有没有一种方法可以创建包含数据库中所有表的规范?

    P.S:我正在使用SQL Server 2008

    3 回复  |  直到 8 年前
        1
  •  1
  •   cbailiss    8 年前

    我也有同样的问题。答案实际上比预期的简单,并且不需要定制的C应用程序来生成大量的SQL来覆盖所有的表。下面的SQL示例。重要的是为插入/更新/删除指定数据库和公共数据库。

    USE [master]
    GO
    
    CREATE SERVER AUDIT [CancerStatsAudit]
    TO FILE 
    (   FILEPATH = N'I:\CancerStats\Audit\'
        ,MAXSIZE = 128 MB
        ,MAX_ROLLOVER_FILES = 64
        ,RESERVE_DISK_SPACE = OFF
    )
    WITH
    (   QUEUE_DELAY = 1000
        ,ON_FAILURE = CONTINUE
        ,AUDIT_GUID = '5a0a18cf-fe42-4171-ad01-5e19af9e27d1'
    )
    ALTER SERVER AUDIT [CancerStatsAudit] WITH (STATE = ON)
    GO
    
    USE [CancerStats]
    GO
    
    CREATE DATABASE AUDIT SPECIFICATION [CancerStatsDBAudit]
    FOR SERVER AUDIT [CancerStatsAudit]
    ADD (INSERT ON DATABASE::[CancerStats] BY [public]),
    ADD (UPDATE ON DATABASE::[CancerStats] BY [public]),
    ADD (DELETE ON DATABASE::[CancerStats] BY [public]),
    ADD (EXECUTE ON DATABASE::[CancerStats] BY [public]),
    ADD (DATABASE_OBJECT_CHANGE_GROUP),
    ADD (SCHEMA_OBJECT_CHANGE_GROUP)
    WITH (STATE = ON)
    GO
    

    注意:审核插入、更新和删除不需要数据库\对象\更改\组和架构\对象\更改\组-请参阅下面的附加说明。

    附加说明:

    上面的示例还包括数据库\对象\更改\组和模式\对象\更改\组。因为我的要求是同时跟踪数据库对象上的创建/更改/删除操作,所以这些都包括在内。值得注意的是,这些文档是错误的。 https://docs.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions

    上面的页面说明数据库对象更改组跟踪创建、更新和删除。这不是真的(我在SQL Server 2016中测试过),只跟踪create,请参见: https://connect.microsoft.com/SQLServer/feedback/details/370103/database-object-change-group-audit-group-does-not-audit-drop-proc

    事实上,要跟踪创建、更新、删除,请使用架构\对象\更改\组。尽管上面的docs.microsoft.com文档页面表明这只适用于模式,但实际上它也适用于模式中的对象。

        2
  •  0
  •   Raj More    16 年前

    更改数据捕获

    您可以使用SQL Server 2008提供的变更数据捕获功能机制。

    http://msdn.microsoft.com/en-us/library/bb522489.aspx

    请注意,这只会创建、更新和删除。

    触发器和审计表

        3
  •  0
  •   Shashank Shekhar    16 年前

    找到了创建数据库审计规范的方法, 编写了一个C代码,它为所有表和我需要的所有操作动态生成SQL语句,并执行结果字符串。 坦率地说,如果要为多个表创建数据库审核规范,那么所提供的向导毫无帮助。