要管理对敏感数据的访问,您可以使用认证和访问控制机制来建立数据访问的规则和控制。 但是,为了防止和发现未知或不可接受的行为,您可以使用 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 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_COMPLIANCE
或AUDIT_LOGIN_ONLY
。 请勿将名称以SYS
开头,因为这是针对数据库中的内部系统名称保留的名称。 - 要审计的类别
- 策略确定要审计的类别。 可以将此策略应用于其他数据库对象,以确定如何审计这些对象的使用。 有八个可用类别可供审计。 配置的类别越多,审计的信息越多,在占用计算空间的审计缓冲区中累积的信息就越多。 了解实现您的目的所需的内容对于防止系统的计算空间超负荷非常重要。 摘要描述了每个可用的类别。 如果将
ALL
指定为类别选项,那么不能指定其他类别。为了符合大多数安全标准,以下列表中的建议类别将处理访问控制,认证和特权访问监视。 使用这些类别配置策略将确保在维护安全性时开销最小。EXECUTE WITHOUT DATA
-访问控制VALIDATE
-认证SECMAINT
-特权访问监视
此外,对于每个类别,应审计成功和失败方案,并且错误类型应仅记录 SQL 代码错误。STATUS BOTH
ERROR TYPE NORMAL
配置定制审计策略
您可以配置定制审计策略以捕获认证请求并成功执行 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;
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;
AUDITPOLICYNAME AUDITPOLICYID OBJECTTYPE SUBOBJECTTYPE OBJECTSCHEMA OBJECTNAME AUDITEXCEPTIONENABLED
------------------------- ------------- ---------- ------------- ------------- ----------------- ---------------------
AUDIT_VALIDATE_ONLY 108 - CURRENT SERVER N
1 record(s) selected.
停止对组的审计
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' );
- 调度频率
- 运行用于归档审计日志的预定义任务的频率超出了此测试的范围,但值得注意的是从现实客户情境中收集的建议。 对于较大的数据库,建议每天运行归档任务 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 );
监视调度的审计更新任务的状态
select * from SYSTOOLS.ADMIN_TASK_STATUS;
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"。
此消息指示自上次使用数据装入审计表以来没有任何活动。 它并非指示系统错误。