0 / 0
Go back to the English version of the documentation
使用Data Virtualization中的 "Db2审计工具监控数据访问
Last updated: 2024年11月26日
在Data Virtualization中使用审计策略监控数据访问

要管理对敏感数据的访问,您可以使用认证和访问控制机制来建立数据访问的规则和控制。 但是,为了防止和发现未知或不可接受的行为,您可以使用 Db2® 审计工具来监视数据访问。

成功监视不需要的数据访问和后续分析,可改善对数据访问的控制,并最终防止对数据的恶意的未授权访问或因为粗心而导致的未授权访问。 监视应用程序和单独的用户访问(包括系统管理操作)可提供有关数据库系统活动的历史记录。

您可以使用 Db2 审计工具来生成和维护一系列预定义数据库事件的审计跟踪。 对于可用于审计的每个事件类别,将使用一个单词关键字来标识类别名称后面的类别类型。 以下类别的事件可用于审计:
审计 (AUDIT)
当更改审计设置或访问审计日志时会生成记录。
授权检查 (CHECKING)
在尝试访问或处理 Db2 数据库对象或函数的授权检查期间生成记录。
对象维护 (OBJMAINT)
当创建或删除数据对象以及改变某些对象时会生成记录。
安全维护 (SECMAINT)
针对以下条件生成记录:
  • 授予或撤销对象特权或数据库权限。
  • 授予或撤销安全标号或免除。
  • 更改组授权,角色授权或覆盖或限制 LBAC 安全策略的属性。
  • 授予或撤销 SETSESSIONUSER 特权。
  • 修改下列任一配置参数:SYSADM_GROUP、SYSCTRL_GROUP、SYSMAINT_GROUP 或 SYSMON_GROUP。
系统管理 (SYSADMIN)
执行需要 SYSADM , SYSMAINT 或 SYSCTRL 权限的操作时生成记录。
用户验证 (VALIDATE)
当认证用户或检索系统安全性信息时会生成记录。
操作上下文 (CONTEXT)
当执行数据库操作时,生成记录以显示该操作上下文。 此类别允许对审计日志文件进行更好的解释。 当与该日志的事件相关因子字段配合使用时,可将一组事件重新与单个数据库操作关联。 例如,动态查询的查询语句、静态查询的程序包标识或可执行的操作类型的指示符(如 CONNECT)均可提供分析审计结果时所需的上下文。
执行 (EXECUTE)
在执行 SQL 语句期间生成记录。

对于所列示的任何类别,您都可以审计失败的操作和/或成功的操作。

在数据库服务器上执行的任何操作都可以生成多个记录。 审计日志中生成的实际记录数目取决于审计设施配置所指定的要记录的事件类别数。 它还取决于是审计成功的操作,还是失败的操作,或二者兼有。 选择要审计的事件很重要。

可以从一组 AUDIT 表中查看从此工具生成的记录,其中每个表对应于每个类别。 对这些记录的分析可以揭示可识别系统误用的使用模式。 在识别误用时,可以采取行动来减少或消除系统误用。

审计设施提供了在数据库级别进行审计的功能。 管理员组的任何成员都可以配置审计策略,以控制何时收集此类审计信息,例如监视授权标识,数据库权限,可信上下文或特定表。

快速入门

  • AUDIT_ALL 是在部署期间配置的预定义策略。 此策略会对每类审计记录的所有成功和失败进行审计。 建议您创建符合您需求的定制策略。
  • AUDIT_UPDATE 是一个预定义过程,用于抽取审计记录并将其装入到 AUDIT.* tables.
  • AUDIT 语句要求用户具有 SECADM 权限。 在 AUDIT.* 中查看数据。 表,被授予对这些表的 SELECT 特权的用户能够访问这些表。
要点: 启用审计策略并调度审计任务时, AUDIT.* 表在系统上累积空间。 您必须管理 AUDIT.* 所使用的存储器。 tables. 您必须定期导出审计数据以将其脱机存储,并清除 AUDIT.* 中的数据。 tables.
启用 AUDIT 以针对每个角色捕获服务中的所有事件
AUDIT ROLE DV_ADMIN USING POLICY AUDIT_ALL;
AUDIT ROLE DV_ENGINEER USING POLICY AUDIT_ALL;
AUDIT ROLE DV_STEWARD USING POLICY AUDIT_ALL;
AUDIT ROLE DV_WORKER USING POLICY AUDIT_ALL;
创建调度审计更新任务以每 15 分钟将最新审计记录放入审计表中 (更新之间的最小时间间隔)
CALL SYSPROC.ADMIN_TASK_ADD( 'AUDIT_UPDATE', NULL, NULL, NULL, '*/15 * * * *', 'AUDIT', 'UPDATE', NULL, NULL, 'Periodically update to audit tables' );
查看 8 审计事件类别中的审计记录
select * from AUDIT.AUDIT;
select * from AUDIT.CHECKING;
select * from AUDIT.CONTEXT;
select * from AUDIT.EXCUTE;
select * from AUDIT.OBJMAINT;
select * from AUDIT.SECMAINT;
select * from AUDIT.SYSADMIN;
select * from AUDIT.VALIDATE;

有关更多信息,请参阅 审计策略


创建审计策略
CREATE AUDIT POLICY policy_name CATEGORIES category or ALL STATUS status ERROR TYPE NORMAL;

有关更多信息,请参阅 CREATE AUDIT POLICY 语句

审计策略名称
请确保名称是唯一的,并且其用途易于识别,例如, AUDIT_SOC2_COMPLIANCEAUDIT_LOGIN_ONLY。 请勿将名称以 SYS 开头,因为这是针对数据库中的内部系统名称保留的名称。
要审计的类别
策略确定要审计的类别。 可以将此策略应用于其他数据库对象,以确定如何审计这些对象的使用。 有八个可用类别可供审计。 配置的类别越多,审计的信息越多,在占用计算空间的审计缓冲区中累积的信息就越多。 了解实现您的目的所需的内容对于防止系统的计算空间超负荷非常重要。 摘要描述了每个可用的类别。 如果将 ALL 指定为类别选项,那么不能指定其他类别。
为了符合大多数安全标准,以下列表中的建议类别将处理访问控制,认证和特权访问监视。 使用这些类别配置策略将确保在维护安全性时开销最小。
  • EXECUTE WITHOUT DATA -访问控制
  • VALIDATE -认证
  • SECMAINT -特权访问监视
此外,对于每个类别,应审计成功和失败方案,并且错误类型应仅记录 SQL 代码错误。
  • STATUS BOTH
  • ERROR TYPE NORMAL


开始使用审计策略
AUDIT database_entity USING POLICY policy_name;

有关更多信息,请参阅 AUDIT 语句



配置定制审计策略

您可以配置定制审计策略以捕获认证请求并成功执行 SQL 命令并将其启用。

CREATE AUDIT POLICY AUDIT_VALIDATE_EXECUTE CATEGORIES VALIDATE STATUS BOTH, EXECUTE STATUS SUCCESS ERROR TYPE NORMAL;
要审计的数据库对象
审计整个数据库将导致计算空间超负荷。 建议确定要应用策略的表和关联具体化查询表 (MQT)。
注: 应用于表的审计策略不适用于基于该表的具体化查询表 (MQT)。 建议在将审计策略与表相关联时,还将该策略与基于该表的任何 MQT 相关联。 即使 SQL 语句引用了基本表,编译器也可能自动使用 MQT; 但是,用于基本表的审计策略仍将生效。

另一个建议配置是将策略应用于组或角色。 您可以使用此配置来监视哪些用户在哪个组和角色中执行任何意外操作。 如果选择将策略应用于整个数据库,请确保策略未保留所有类别的记录。

对表启用审计策略
AUDIT TABLE CUSTOMTABLE USING POLICY AUDIT_VALIDATE_EXECUTE;

您还可以配置定制审计策略以仅捕获认证请求 (成功和失败) 并将其启用。

CREATE AUDIT POLICY AUDIT_VALIDATE_ONLY CATEGORIES VALIDATE STATUS BOTH ERROR TYPE NORMAL;


查看已创建的所有审计策略
select * from SYSCAT.AUDITPOLICIES;
以下示例输出是运行上一个 SELECT 语句的结果:

AUDITPOLICYNAME              AUDITPOLICYID CREATE_TIME                ALTER_TIME                 AUDITSTATUS CONTEXTSTATUS VALIDATESTATUS CHECKINGSTATUS SECMAINTSTATUS OBJMAINTSTATUS SYSADMINSTATUS EXECUTESTATUS EXECUTEWITHDATA ERRORTYPE REMARKS

---------------------------- ------------- -------------------------- -------------------------- ----------- ------------- -------------- -------------- -------------- -------------- -------------- ------------- --------------- --------- -------

AUDIT_VALIDATE_ONLY                    108 2018-07-23-21.00.57.024758 2018-07-23-21.00.57.024758 N           N             B              N              N              N              N              N             N               N         -

AUDIT_ALL                              106 2018-07-23-20.51.18.017062 2018-07-23-20.51.18.017062 B           B             B              B              B              B              B              B             N               N         -

  2 record(s) selected.


检查当前正在使用的审计策略
select * from SYSCAT.AUDITUSE;
以下示例输出是运行上一个 SELECT 语句的结果:

AUDITPOLICYNAME           AUDITPOLICYID OBJECTTYPE SUBOBJECTTYPE OBJECTSCHEMA  OBJECTNAME        AUDITEXCEPTIONENABLED

------------------------- ------------- ---------- ------------- ------------- ----------------- ---------------------

AUDIT_VALIDATE_ONLY                 108                          -             CURRENT SERVER    N

  1 record(s) selected.


停止对数据库实体的审计

要停止对数据库实体的审计,必须除去策略。

AUDIT database_entity REMOVE POLICY;

有关更多信息,请参阅 AUDIT 语句



停止对组的审计
AUDIT GROUP BLUUSERS REMOVE POLICY;


创建调度任务

有关更多信息,请参阅 ADMIN_TASK_ADD 过程-调度新任务

要创建调度的审计更新任务以每 20 分钟将最新审计记录放入审计表中:
CALL SYSPROC.ADMIN_TASK_ADD( 'AUDIT_UPDATE', NULL, NULL, NULL, '*/20 * * * *', 'AUDIT', 'UPDATE', NULL, NULL, 'Periodically update to audit tables' );
有关更多信息,请参阅 UNIX cron 格式 以获取调度格式。
调度频率
运行用于归档审计日志的预定义任务的频率超出了此测试的范围,但值得注意的是从现实客户情境中收集的建议。 对于较大的数据库,建议每天运行归档任务 15 分钟。 这允许数据库在发生任何意外性能问题时进行恢复。 如果根据建议配置了策略,那么审计缓冲区应该能够包含该时间范围内的工作负载。 正如性能测试所显示的那样,如果复杂的查询并行运行到审计记录的归档中,那么会出现预期的性能问题。


修改调度任务

有关更多信息,请参阅 ADMIN_TASK_UPDATE 过程-更新现有任务

要修改已调度的审计更新任务,以便每 20 分钟将最新的审计记录放入审计表中:
CALL SYSPROC.ADMIN_TASK_UPDATE( 'AUDIT_UPDATE', NULL, NULL, NULL, '*/20 * * * *', 'Periodically update to audit tables every 20 minutes' );
要移除调度型审计更新任务,请执行以下命令:
CALL SYSPROC.ADMIN_TASK_REMOVE( 'AUDIT_UPDATE', NULL );
有关更多信息,请参阅 ADMIN_TASK_REMOVE 过程-除去调度任务或任务状态记录


监视调度的审计更新任务的状态
select * from SYSTOOLS.ADMIN_TASK_STATUS;
以下示例输出是运行上一个 SELECT 语句的结果:

  NAME          TASKID  STATUS     AGENT_ID     INVOCATION  BEGIN_TIME                 END_TIME                   SQLCODE  SQLSTATE SQLERRMC RC
  ------------- ------- ---------- ------------ ----------- -------------------------- -------------------------- -------- -------- -------- -----
  AUDIT_UPDATE        1 COMPLETE          16433           1 2018-07-23-21.50.00.135211 2018-07-23-21.50.10.584127        0          x''          0
  AUDIT_UPDATE        1 RUNNING           16448           2 2018-07-23-21.55.00.608060 -                                 - -        -            -

    2 record(s) selected.
  


将最新的审计记录装入到 AUDIT.* 立即表
CALL AUDIT.UPDATE();
注: 运行此过程调用后,可能会迂到以下消息:
SQL1307N 调用安全性审计工具期间发生错误。  原因码: "9"。

此消息指示自上次使用数据装入审计表以来没有任何活动。 它并非指示系统错误。


Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more