DB2 审计设施简介
要管理对敏感数据的访问,可以使用各种认证和访问控制机制来对已知和可接受的数据访问行为建立规则并施加控制。但要防止出现并发现未知或不可接受的行为,也需要监视数据访问。为了帮助您完成此任务,DB2? 数据库系统提供了审计设施。
成功监视不需要的数据访问和后续分析,可改善对数据访问的控制,并最终防止对数据的恶意访问或粗心的未经授权的访问。监视应用程序和单独的用户访问(包括系统管理操作)可提供有关数据库系统活动的历史记录。
DB2 审计设施为一系列预定义数据库事件生成审计跟踪,并允许您对其进行维护。将此工具生成的记录保存在审计日志文件中。对这些记录的分析可揭示标识系统误用的使用模式。一旦标识出该模式,就可执行操作来减少或消除这类系统误用。
审计设施提供在实例级和单个数据库级进行审计的能力,并对每个活动使用不同日志独立地记录所有实例和数据库级活动。系统管理员(他/她在实例级拥有 SYSADM 权限)可以使用 db2audit 工具在实例级配置审计,并控制收集这种审计信息的时间。系统管理员可以使用 db2audit 工具归档实例和数据库审计日志并从任一类型的已归档日志中抽取审计数据。
安全性管理员(他/她在数据库级拥有 SECADM 权限)可以将审计策略与 SQL 语句 AUDIT 一起使用来配置并控制单个数据库的审计要求。安全性管理员可以使用 SYSPROC.AUDIT_ARCHIVE 存储过程、SYSPROC.AUDIT_LIST_LOGS 表函数和 SYSPROC.AUDIT_DELIM_EXTRACT 存储过程来归档审计日志、查找感兴趣的日志并将数据抽取到定界文件中以进行分析。
当在分区数据库环境中工作时,许多可审计的事件将在与用户连接的数据库分区(协调程序分区)或目录分区(若它们不是相同的数据库分区)中发生。这意味着审计记录可由多个数据库分区生成。每个审计记录的一部分包含用于标识协调程序分区和始发分区(产生审计记录的分区)的信息。 在实例级,必须使用 db2audit start 和 db2audit stop 命令来显式停止和启动审计设施。在启动实例级审计时,审计设施使用现有审计配置信息。因为审计设施与 DB2 数据库服务器无关,所以即使停止该实例,审计设施将仍然是活动的。事实上,当停止该实例时,可在审计日志中生成审计记录。要在数据库级启动审计,将审计策略与要审计的任何对象关联。
审计记录的类别
可生成不同类别的审计记录。在下面关于可用于审计的事件类别描述中,您应注意每个类别的名称后面是一个单词的关键字,它用来标识该类别的类型。可用于审计的事件类别是:
? ? ? ?
审计(AUDIT)。当更改审计设置或访问审计日志时会生成记录。
权限检查(CHECKING)。对访问或操纵 DB2 数据库对象或函数的尝试进行权限检查期间会生成记录。
对象维护(OBJMAINT)。当创建或删除数据对象以及改变某些对象时会生成记录。 安全维护(SECMAINT)。在下列情况下会生成记录:
o 授予或撤销数据库特权或数据库权限 o 授予或撤销安全标号或免除权
o 改变组权限、角色权限或者覆盖或限制 LBAC 安全策略的属性 o 授予或撤销 SETSESSIONUSER 特权 o 授予或撤销 DBADM 或 SECADM 权限
o 修改下列任一配置参数:SYSADM_GROUP、SYSCTRL_GROUP、
SYSMAINT_GROUP 或 SYSMON_GROUP。
? ? ?
系统管理(SYSADMIN)。当执行需要 SYSADM、SYSMAINT 或 SYSCTRL 权限的操作时会生成记录。
用户验证(VALIDATE)。当认证用户或检索系统安全性信息时会生成记录。
操作上下文(CONTEXT)。当执行数据库操作时,生成记录以显示该操作上下文。此类别允许对审计日志文件进行更好的解释。当与该日志的事件相关因子字段一起使用时,可将一组事件重新与单个数据库操作关联。例如,动态查询的查询语句、静态查询的程序包标识或可执行的操作类型的指示符(如 CONNECT)均可提供分析审计结果时所需的上下文。 注:提供该操作上下文的 SQL 或 XQuery 语句可能很长,并可在 CONTEXT 记录内完全显示。这可能使 CONTEXT 记录变得很大。
? 执行(EXECUTE)。在执行 SQL 语句期间生成记录。
对于上面任一种类别,您可以审计失败的操作和/或成功的操作。
在数据库服务器上执行的任何操作可能生成几个记录。审计日志中生成的实际记录数目取决于审计设施配置所指定的要记录的事件类别数。它还取决于是审计成功的操作,还是失败的操作,或二者兼有。由于此原因,对要审计的事件的选择十分重要。
? ?
审计策略
安全性管理员可以使用审计策略来配置审计系统,以便仅收集关于需要的数据和对象的信息。 存储和分析审计日志
系统管理员可以使用 db2audit configure 命令配置活动审计日志和已归档审计日志的路径。归档审计日志会将活动审计日志移至一个归档目录,而服务器开始写入新的活动审计日志。这将允许脱机存储审计日志,而不必从审计日志中抽取数据,直到需要时才这样做。在安全性管理员或系统管理员归档了日志后,他们可以将日志中的数据抽取到定界文件中。可以将定界文件中的数据装入到 DB2 数据库表中以进行分析。
? 用于审计 SQL 语句的 EXECUTE 类别
EXECUTE 类别允许您准确地跟踪用户发出的 SQL 语句(在 V9.5 之前,必须使用 CONTEXT 类别来查找此信息)。
审计策略
安全性管理员可以使用审计策略来配置审计系统,以便仅收集关于需要的数据和对象的信息。 安全性管理员可以创建审计策略来控制在单个数据库内审计的内容。下列对象可以具有关联的审计策略:
? 整个数据库
根据审计策略,将审计该数据库内发生的所有可审计事件。
? 表
审计所有数据操作语言(DML)以及对表(无类型)、MQT(具体化查询表)或昵称的 XQUERY 访问。在访问表时,只生成包含或不包含数据的 EXECUTE 类别审计事件,即使策略指示应审计其他类别亦如此。
? 可信上下文
根据审计策略,将审计由特定可信上下文定义的可信连接内发生的所有可审计事件。
? 表示用户、组或角色的授权标识
根据审计策略,将审计由指定用户启动的所有可审计事件。
根据审计策略,将审计作为组或角色成员的用户所启动的所有可审计事件。还包括间接角色成员资格,例如,通过其他角色或组。
通过为一个组定义工作负载并捕获活动详细信息,可以使用“工作负载管理”事件监视器来捕获类似数据。您应该了解,至工作负载的映射不仅仅涉及授权标识,还可能涉及其他属性,这可能会使您无法获得期望的审计粒度,或者在修改了这些其他属性时,连接可能会映射至不同(可能是未监视的)工作负载。审计解决方案保证审计用户、组或角色。
? 权限(SYSADM、SECADM、DBADM、SYSCTRL、SYSMAINT 和 SYSMON) 根据审计策略,将审计由拥有指定权限的用户启动的所有可审计事件,即使该权限对事件来说不是必需的亦如此。如果审计策略与 DBADM 权限关联,那么根据此策略还会审计任何具有 SYSADM 权限的用户,因为这些用户被视为具有 DBADM 权限。
安全性管理员可以创建多个审计策略。例如,您所在的公司可能需要一个策略来审计敏感数据,并需要一个策略来审计拥有 DBADM 权限的用户的活动。如果多个审计策略对一个语句有效,那么将审计每个审计策略要求审计的所有事件(但只审计一次)。例如,如果数据库的审计策略要求审计特定表的成功 EXECUTE 事件,并且用户的审计策略要求审计同一个表的失败 EXECUTE 事件,那么将审计访问该表时的成功和失败尝试。
对于特定对象,只能有一个审计策略有效。例如,不能同时有多个审计策略与同一个表关联。 审计策略不能与视图或类型表关联。根据基础表的策略,将审计访问具有关联审计策略的表的视图。 适用于表的审计策略不会自动适用于基于该表的 MQT。如果将审计策略与一个表关联,那么应将相同策略与基于该表的任何 MQT 关联。
事务期间执行的审计是根据事务开始时的审计策略及其关联进行的。例如,如果安全性管理员将一个审计策略与用户关联并且该用户当时处于事务中,那么该审计策略不会影响在该事务内执行的任何其
余语句。此外,对审计策略所作的更改要在落实后才生效。如果安全性管理员发出 ALTER AUDIT POLICY 语句,那么该语句要在落实后才生效。
安全性管理员使用 CREATE AUDIT POLICY 语句来创建审计策略,并使用 ALTER AUDIT POLICY 语句来修改审计策略。这些语句可以指定:
? 要审计的事件的状态值:无、成功、失败或两者。 仅审计与指定状态匹配的可审计事件。
? 审计期间发生错误时的服务器行为。
安全性管理员使用 AUDIT 语句将审计策略与当前数据库或当前服务器中的数据库对象关联。只要该对象在使用中,就会根据此审计策略对它进行审计。
要删除审计策略,安全性管理员可以使用 DROP 语句。不能删除与任何对象关联的审计策略。使用 AUDIT REMOVE 语句除去与对象的任何其余关联。要将元数据添加至审计策略,安全性管理员可以使用 COMMENT 语句。
在建立完全连接之前生成的事件
对于在执行连接和切换用户操作期间生成的一些事件,唯一可用的审计策略信息是与数据库关联的策略。下表中显示了这些事件:
表 1. 连接事件 事件 CONNECT CONNECT_RESET AUTHENTICATION 审计类别 CONTEXT CONTEXT VALIDATE 这包括在可信连接内连接和切换用户期间的认证。 CHECKING_FUNC CHECKING 尝试的访问是 SWITCH_USER。 注释 将只根据与数据库关联的审计策略审计这些事件,而不使用与任何其他对象(例如,用户、用户组或权限)关联的审计策略进行审计。对于在连接期间发生的 CONNECT 和 AUTHENTICATION 事件,将使用实例级审计设置,直到数据库被激活为止。数据库在第一次连接期间或发出 ACTIVATE DATABASE 命令时被激活。
切换用户的影响
如果在可信连接内切换用户,那么不会留下原始用户的任何信息。在这种情况下,将不再考虑与原始用户关联的审计策略,并且将针对新用户重新评估适用的审计策略。任何与可信连接关联的审计策略仍有效。
如果使用 SET SESSION USER 语句,那么只切换会话授权标识。原始用户的授权标识(系统授权标识)的审计策略保持有效,并且还使用新用户的审计策略。如果在会话内发出了多个 SET SESSION USER 语句,那么只考虑与原始用户(系统授权标识)和当前用户(会话授权标识)关联的审计策略。
数据定义语言限制
下列数据定义语言(DDL)语句称为 AUDIT 独占式 SQL 语句:
? ? ?
AUDIT
CREATE AUDIT POLICY、ALTER AUDIT POLICY 和 DROP AUDIT POLICY
DROP ROLE 和 DROP TRUSTED CONTEXT(如果要删除的角色或可信上下文与审计策略关联)
AUDIT 独占式 SQL 语句在使用时具有一些限制:
? ?
每个语句后面必须跟有 COMMIT 或 ROLLBACK。 不能在全局事务内发出这些语句,例如,XA 事务。
所有分区中一次只允许有一个未落实的 AUDIT 独占式 DDL 语句。如果未落实的 AUDIT 独占式 DDL 语句正在执行,那么后续 AUDIT 独占式 DDL 语句将等待,直到当前 AUDIT 独占式 DDL 语句落实或回滚为止。
注:更改将写入目录,但要在落实后才生效,即使对于发出该语句的连接亦如此。
审计对特定表的任何访问的示例
请考虑这样一家公司,其 EMPLOYEE 表包含非常敏感的信息,并且该公司希望审计对该表中的数据的任何和所有 SQL 访问。可以使用 EXECUTE 类别来跟踪对表的所有访问;该类别审计 SQL 语句,并可以选择审计在执行时为该语句提供的输入数据值。
跟踪该表上的活动需要执行两个步骤。首先,安全性管理员创建一个指定 EXECUTE 类别的审计策略,然后安全性管理员将该策略与表关联:
CREATE AUDIT POLICY SENSITIVEDATAPOLICY
CATEGORIES EXECUTE STATUS BOTH ERROR TYPE AUDIT COMMIT
AUDIT TABLE EMPLOYEE USING POLICY SENSITIVEDATAPOLICY COMMIT
审计 SYSADM 或 DBADM 执行的任何操作的示例