审计工具:数据库系统的审计实现

在当今的信息技术领域,无论是ERP系统、工作流应用、CRM工具还是任何数据库系统,审计都已成为这些系统不可或缺的一部分。审计可以帮助实现以下方面:

  • 应用程序管理员可以使用审计数据进行分析。
  • 对数据库篡改进行取证分析。
  • 审计数据在一定程度上也有助于快速数据恢复

实现数据审计的方法有很多,但在表的触发器中添加审计逻辑是最高效的方法,同时也便于维护。

创建了一个工具(存储过程),它可以为表生成审计触发器,并将审计数据加载到整个应用程序的单个表中。

还可以根据应用程序的需要定制存储过程。在几个项目中使用了这个工具,节省了大约80%的编码工作量。相信可以在几天内使用这个工具在整个项目中实现审计跟踪。

此外,还上传了示例表和测试数据,这将有助于理解审计跟踪。

工具特性

这个审计工具将在单个表中跟踪整个应用程序的审计数据,便于生成审计报告。请参阅下面的快照“带有示例数据的审计日志表”。

审计工具还将在审计表中跟踪以下信息,这些信息将有助于生成用户友好的报告:

  • 表名
  • 列名
  • 记录标识符名称(主列名)
  • 记录标识符值(主列数据)
  • 操作用户ID
  • 操作日期时间(时间戳)
  • 操作类型(插入/更新/删除)
  • 审计描述
  • 旧值(对于更新和删除操作将加载数据)
  • 旧值解码(来自外键引用表的数据)
  • 新值(对于插入和更新操作将加载数据)
  • 新值解码(来自外键引用表的数据)
  • 类别

任何表的更改都不会影响应用程序审计跟踪,审计触发器能够动态读取列并将数据加载到审计表中。

对于更新操作,可以只将修改后的数据加载到审计表中。

将跟踪表的主列名称和数据作为记录标识符,这可以通过在审计配置表中配置特定列作为记录标识符来覆盖。例如,可以在审计配置表中配置“销售人员名称”,在这种情况下,触发器将使用“销售人员名称”作为记录标识符,而不是“销售人员ID”。

触发器可以访问外键引用表并跟踪数据。以下面的例子为例,在更新“销售人员”表时,它可以通过使用“地区ID”从“销售地区”表中提取“地区名称”,从而为数据审计提供完整的信息。

审计表的创建和配置

为了实现审计,需要创建和配置以下审计表。让了解每个表的重要性。

  1. AuditCategory:此表有助于对审计数据进行分类,例如审计数据可以按如下方式分类:
    • 主数据
    • 销售
    • 采购
  2. AuditSubCategory:应用程序表名应与类别映射配置。
  3. AuditLogDecodeTableMapping:此表非常重要。此表应加载所有外键引用,以便审计触发器可以从外键表中提取必要的信息并加载到审计表中(参见特性6)。
  4. AuditActionType:此表用于维护操作详细信息(插入、更新和删除)。
  5. AuditLogData:审计信息将维护在AuditLogData表中。

下载附件(AuditTool.Zip),并创建以下提到的审计表。

CREATE TABLE [Audit].[AuditCategory] ( -- 列定义 ); CREATE TABLE [Audit].[AuditSubCategory] ( -- 列定义 ); CREATE TABLE [Audit].[AuditLogDecodeTableMapping] ( -- 列定义 ); CREATE TABLE [Audit].[AuditActionType] ( -- 列定义 ); CREATE TABLE [Audit].[AuditLogData] ( -- 列定义 );

创建函数:

CREATE FUNCTION Audit.GenerateDynamicQuery ( -- 参数定义 ) RETURNS TABLE AS BEGIN -- 函数实现 END

创建审计存储过程以创建审计触发器:

CREATE PROCEDURE Audit.Generate_AuditTrigger_For_Insert ( -- 参数定义 ) AS BEGIN -- 存储过程实现 END CREATE PROCEDURE Audit.Generate_AuditTrigger_For_Update ( -- 参数定义 ) AS BEGIN -- 存储过程实现 END CREATE PROCEDURE Audit.Generate_AuditTrigger_For_Delete ( -- 参数定义 ) AS BEGIN -- 存储过程实现 END

生成审计触发器并部署它。

使用示例数据进行实施培训:

下载示例附件(AuditToolSample.Zip),并创建以下示例表。

CREATE TABLE [Sales].[CountryRegion] ( -- 列定义 ); CREATE TABLE [Sales].[SalesTerritory] ( -- 列定义 ); CREATE TABLE [Sales].[SalesPerson] ( -- 列定义 );

在以下审计表中配置示例表信息。

INSERT INTO [Audit].[AuditCategory] ( -- 插入数据 ) INSERT INTO [Audit].[AuditSubCategory] ( -- 插入数据 ); INSERT INTO [Audit].[AuditLogDecodeTableMapping] ( -- 插入数据 ); INSERT INTO [Audit].[AuditActionType] ( -- 插入数据 );

生成审计触发器脚本并执行它。

EXEC Audit.Generate_AuditTrigger_For_Insert 'SalesPerson|SalesPersonInsertAudit,SalesTerritory|SalesTerritoryInsertAudit,CountryRegion|CountryRegionInsertAudit', 'Jash', 'Sales', 'True'; EXEC Audit.Generate_AuditTrigger_For_Update 'SalesPerson|SalesPersonUpdateAudit,SalesTerritory|SalesTerritoryUpdateAudit,CountryRegion|CountryRegionUpdateAudit', 'Jash', 'Sales', 'True'; EXEC Audit.Generate_AuditTrigger_For_Delete 'SalesPerson|SalesPersonDeleteAudit,SalesTerritory|SalesTerritoryDeleteAudit,CountryRegion|CountryRegionDeleteAudit', 'Jash', 'Sales', 'True';
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485