DB2 V9.7 for Linux, UNIX, and Windows

审计策略

安全性管理员可以使用审计策略来配置审计设施,以仅收集关于所需数据和对象的信息。

安全性管理员可以创建审计策略来控制在单个数据库内审计的内容。下列对象可以具有关联的审计策略:

安全性管理员可以创建多个审计策略。例如,您所在的公司可能需要一个策略来审计敏感数据,并需要一个策略来审计拥有 DBADM 权限的用户的活动。如果多个审计策略对一个语句有效,那么将审计每个审计策略要求审计的所有事件(但只审计一次)。例如,如果数据库的审计策略要求审计特定表的成功 EXECUTE 事件,并且用户的审计策略要求审计同一个表的失败 EXECUTE 事件,那么将审计访问该表时的成功和失败尝试。

对于特定对象,只能有一个审计策略有效。例如,不能同时有多个审计策略与同一个表关联。

审计策略不能与视图或类型表关联。根据基础表的策略,将审计访问具有关联审计策略的表的视图。

适用于表的审计策略不会自动适用于基于该表的 MQT。如果将审计策略与一个表关联,那么应将相同策略与基于该表的任何 MQT 关联。

事务期间执行的审计是根据事务开始时的审计策略及其关联进行的。例如,如果安全性管理员将一个审计策略与用户关联并且该用户当时处于事务中,那么该审计策略不会影响在该事务内执行的任何其余语句。此外,对审计策略所作的更改要在落实后才生效。如果安全性管理员发出 ALTER AUDIT POLICY 语句,那么该语句要在落实后才生效。

安全性管理员使用 CREATE AUDIT POLICY 语句来创建审计策略,并使用 ALTER AUDIT POLICY 语句来修改审计策略。这些语句可以指定:

安全性管理员使用 AUDIT 语句将审计策略与当前数据库或当前服务器中的数据库对象关联。只要该对象在使用中,就会根据此审计策略对它进行审计。

要删除审计策略,安全性管理员可以使用 DROP 语句。不能删除与任何对象关联的审计策略。使用 AUDIT REMOVE 语句除去与对象的任何其余关联。要将元数据添加至审计策略,安全性管理员可以使用 COMMENT 语句。

在建立完全连接之前生成的事件

对于在执行连接和切换用户操作期间生成的一些事件,唯一可用的审计策略信息是与数据库关联的策略。下表中显示了这些事件:
表 1. 连接事件
事件 审计类别 注释
CONNECT CONTEXT  
CONNECT_RESET CONTEXT  
AUTHENTICATION 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 执行的任何操作的示例

为了完成安全合格证书,一家公司必须表明能够监视数据库内由拥有系统管理 (SYSADM) 或数据库管理 (DBADM) 权限的那些人执行的任何和所有活动。

要捕获数据库内的所有操作,应审计 EXECUTE 和 SYSADMIN 类别。安全性管理员创建一个审计这两种类别的审计策略。安全性管理员可以使用 AUDIT 语句将此审计策略与 SYSADM 和 DBADM 权限关联。然后,拥有 SYSADM 或 DBADM 权限的任何用户将记录任何可审计事件。以下示例显示如何创建这种审计策略并将它与 SYSADM 和 DBADM 权限关联:
CREATE AUDIT POLICY ADMINSPOLICY CATEGORIES EXECUTE STATUS BOTH,
   SYSADMIN STATUS BOTH ERROR TYPE AUDIT
COMMIT
AUDIT SYSADM, DBADM USING POLICY ADMINSPOLICY
COMMIT

审计特定角色执行的任何访问的示例

一家公司允许对其企业数据库进行 Web 应用程序访问。使用 Web 应用程序的确切个人未知。只知道使用的角色,该角色用于管理数据库权限。该公司希望监视作为该角色成员的任何人的操作,以便检查他们提交给数据库的请求并确保他们只通过 Web 应用程序访问数据库。

EXECUTE 类别包含跟踪这种情况下的用户活动所需的审计级别。第一步是创建适当的审计策略并将它与 Web 应用程序所使用的角色关联(在本示例中,角色为 TELLER 和 CLERK):
CREATE AUDIT POLICY WEBAPPPOLICY CATEGORIES EXECUTE WITH DATA 
   STATUS BOTH ERROR TYPE AUDIT
COMMIT
AUDIT ROLE TELLER, ROLE CLERK USING POLICY WEBAPPPOLICY
COMMIT

对数据库启用审计的示例

某个公司想要确定谁在对名为 SAMPLE 的数据库进行 DDL 更改(示例:ALTER TABLE)。

CONNECT TO SAMPLE

CREATE AUDIT POLICY ALTPOLICY CATEGORIES AUDIT STATUS BOTH, 
				OBJMAINT STATUS BOTH,  CHECKING STATUS BOTH, 
				EXECUTE STATUS BOTH, ERROR TYPE NORMAL

AUDIT DATABASE USING POLICY ALTPOLICY