本章介绍审计系统如何记录事件。
该信息分为以下几个主题:
Identity Manager 审计的目的是记录操作人员、操作内容、操作的 Identity Manager 对象以及操作时间。
审计事件由一个或多个发布器处理。默认情况下,Identity Manager 使用系统信息库发布器将审计事件记录在系统信息库中。借助审计组,过滤可允许管理员选择审计事件的子集进行记录。您可为每个发布器分配最初已启用的一个或多个审计组。
有关监视和管理用户违规的信息,请参见第 13 章
大多数默认审计是通过内部 Identity Manager 组件执行的。但是,有些接口允许通过工作流或 Java 代码生成事件。
默认的 Identity Manager 审计方法主要针对以下四个领域:
置备程序。称为置备程序的内部组件可以生成审计事件。
视图处理程序。在视图体系结构中,视图处理程序生成审计记录。视图处理程序应始终在创建或修改对象时审计。
会话。会话方法(例如 checkinObject、createObject、runTask、login 和 logout)将在完成可审计操作后创建审计记录。该方法的大部分将被推送到视图处理程序中。
工作流。默认情况下,仅对批准工作流进行程序校验以生成审计记录。当批准或拒绝请求时,这些工作流将生成审计事件。审计记录程序的工作流功能的接口通过 com.waveset.session.WorkflowServices 应用程序实现。有关详细信息,请参见下一节。
默认情况下,仅对批准工作流进行程序校验以生成审计记录。本节介绍了如何使用 com.waveset.session.WorkflowServices 应用程序通过任何工作流进程生成额外的审计事件。
如果需要报告自定义工作流,则可能需要其他审计事件。有关将审计事件添加到工作流中的信息,请参见修改工作流以记录标准审计事件。
也可以在工作流中添加特殊审计事件以支持工作流报告(工作流报告)。工作流报告将报告完成工作流所需的时间。需要使用特殊审计事件来存储时间计算所需的数据。有关将计时审计事件添加到工作流中的信息,请参见修改工作流以记录计时审计事件。
com.waveset.session.WorkflowServices 应用程序可通过任何工作流进程生成审计事件。表 10–1 介绍了可用于此应用程序的参数。
表 10–1 com.waveset.session.WorkflowServices 的参数
参数 |
类型 |
描述 |
---|---|---|
op |
字符串 |
对 WorkflowServices 执行的操作。必须设置为 audit 或 auditWorkflow。audit 用于标准工作流审计。auditWorkflow 用于存储时间计算所需的计时审计事件。该参数是必需的。 |
type |
字符串 |
正在进行审计的对象类型名称。表 B–5 中列出了可审计的对象类型。这是记录标准审计事件所需的参数。 |
action |
字符串 |
执行的操作的名称。表 B–6 中列出了可审计的操作。该参数是必需的。 |
status |
字符串 |
指定操作的状态名称。表 B–7 中列出了状态(在“结果”列中)。这是记录标准审计事件所需的参数。 |
name |
字符串 |
受指定操作影响的对象的名称。这是记录标准审计事件所需的参数。 |
resource |
字符串 |
(可选)进行更改的对象所在资源的名称。 |
accountId |
字符串 |
(可选)正在修改的帐户 ID。它应是本机资源帐户名称。 |
error |
字符串 |
(可选)伴随任何故障的本地化错误字符串。 |
reason |
字符串 |
(可选)ReasonDenied 对象的名称,此名称将映射到描述一般故障原因的国际化消息。 |
attributes |
映射 |
(可选)已添加或已修改的属性名称和值的映射。 |
parameters |
映射 |
(可选)最多映射五个与事件相关的附加名称或值。 |
organizations |
列表 |
(可选)放置该事件的组织名称或 ID 列表。它用于审计日志的组织范围限定。如果不存在,则处理程序将尝试根据类型和名称来解析组织。如果无法解析组织,则将事件置于“顶级”(组织分层结构的最高级别)。 |
originalAttributes |
映射 |
(可选)旧属性值的映射。名称应与属性参数中列出的名称相匹配。这些值是您要在审计日志中保存的任何先前的值。 |
要在工作流中创建标准审计事件,请将以下 <Activity> 元素添加到工作流中:
<Activity name=’createEvent’>
然后,将引用 com.waveset.session.WorkflowServices 应用程序的 <Action> 元素嵌套在 <Activity> 元素中:
<Action class=’com.waveset.session.WorkflowServices’>
将必需和可选的 <Argument> 元素嵌套在 <Action> 元素中。有关这些参数的列表,请参见表 10–1。
要记录标准审计事件,必须将 op 参数设置为 audit。
工作流示例显示了创建标准审计事件所需的最少代码。
以下示例展示了简单的工作流活动,并显示了事件的生成,该事件将记录由 ResourceAdministrator 执行的名为 ADSIResource1 的资源删除活动。
<Activity name=’createEvent’> <Action class=’com.waveset.session.WorkflowServices’> <Argument name=’op’ value=’audit’/> <Argument name=’type’ value=’Resource’/> <Argument name=’action’ value=’Delete’/> <Argument name=’status’ value=’Success’/> <Argument name=’subject’ value=’ResourceAdministrator’/> <Argument name=’name’ value=’ADSIResource1’/> </Action> <Transition to=’end’/> </Activity> |
下一个示例展示了如何将特定属性添加到工作流,该工作流将跟踪由每个用户在批准进程中根据细化级别应用的更改。通常,此添加将遵循从用户请求输入的 ManualAction。
ACTUAL_APPROVER 是根据实际执行批准的人员,在表单和工作流中(如果从批准表中批准)设置的。APPROVER 将标识分配了 APPROVER 的人员。
<Action name=’Audit the Approval’ application=’com.waveset.session.WorkflowServices’> <Argument name=’op’ value=’audit’/> <Argument name=’type’ value=’User’/> <Argument name=’name’ value=’$(CUSTOM_DESCRIPTION)’/> <Argument name=’action’ value=’approve’/> <Argument name=’accountId’ value=’$(accountId)’/> <Argument name=’status’ value=’success’/> <Argument name=’resource’ value=’$(RESOURCE_IF_APPLICABLE)’/> <Argument name=’loginApplication’ value=’$(loginApplication)’/> <Argument name=’attributes’> <map> <s>fullname</s><ref>user.accounts[Lighthouse].fullname</ref> <s>jobTitle</s><ref>user.accounts[Lighthouse].jobTitle</ref> <s>location</s><ref>user.accounts[Lighthouse].location</ref> <s>team</s><ref>user.waveset.organization</ref> <s>agency</s> <ref>user.accounts[Lighthouse].agency</ref> </map> </Argument> <Argument name=’originalAttributes’> <map> <s>fullname</s> <s>User’s previous fullname</s> <s>jobTitle</s> <s>User’s previous job title</s> <s>location</s> <s>User’s previous location</s> <s>team</s> <s>User’s previous team</s> <s>agency</s> <s>User’s previous agency</s> </map> </Argument> <Argument name=’attributes’> <map> <s>firstname</s> <s>Joe</s> <s>lastname</s> <s>New</s> </map> </Argument> <Argument name=’subject’> <or> <ref>ACTUAL_APPROVER</ref> <ref>APPROVER</ref> </or> </Argument> <Argument name=’approver’ value=’$(APPROVER)’/> </Action> |
可以修改工作流以记录计时事件来支持工作流报告(工作流报告)。标准审计事件仅记录已发生的事件;而计时审计事件记录事件的开始和停止时间,以便可以执行时间计算。除了计时事件数据以外,还会存储标准审计事件所记录的大部分信息。有关详细信息,请参见计时审计事件存储哪些信息?。
要记录计时审计事件,必须先为要审计的每种工作流类型激活工作流审计。
对于可以在管理员界面中使用任务模板配置的工作流,请先启用与要审计的工作流对应的任务模板。有关说明,请参见启用任务模板。
然后,选中“审计整个工作流”复选框以启用工作流审计。有关说明,请参见配置“审计”选项卡。
对于没有任务模板的工作流,应定义一个名为 auditWorkflow 的变量,并将其值设置为 true。
请注意,审计工作流将使性能下降。
示例 10–3 显示了创建计时审计事件所需的代码。要记录计时审计事件,必须将 op 参数设置为 auditWorkflow。
还需要 action 参数,并且必须将其设置为以下值之一:
StartWorkflow
EndWorkflow
StartProcess
EndProcess
StartActivity
EndActivity
可以在 auditconfig.xml 中定义其他 action 参数。
示例 10–3 展示了如何在工作流中启用计时审计事件。要对工作流进行程序校验,应在工作流、进程和活动的开头和结尾添加 auditWorkflow 事件。
auditWorkflow 操作是在 com.waveset.session.WorkflowServices 中定义的。有关详细信息,请参见com.waveset.session.WorkflowServices 应用程序。
<Action application=’com.waveset.session.WorkflowServices’> <Argument name=’op’ value=’auditWorkflow’/> <Argument name=’action’ value=’StartWorkflow’/> </Action> |
要在工作流中停止记录计时审计事件,请将示例 10–4 中的代码添加到工作流末尾附近的 pre-end 活动中。请注意,在对工作流或进程进行程序校验时,不允许在 end 活动中添加任何内容。必须创建 pre-end 活动以执行最终 auditWorkflow 事件,然后无条件地转换到 end 事件。
<Action application=’com.waveset.session.WorkflowServices’> <Argument name=’op’ value=’auditWorkflow’/> <Argument name=’action’ value=’EndWorkflow’/> </Action> |
默认情况下,计时审计事件记录常规审计事件存储的大部分信息,其中包括以下属性:
属性 |
描述 |
---|---|
WORKFLOW |
所执行的工作流的名称 |
PROCESS |
所执行的当前进程的名称 |
INSTANCEID |
所执行的工作流的唯一实例 ID |
ACTIVITY |
记录事件的活动 |
MATCH |
工作流实例中的唯一标识符 |
上面的属性存储在 logattr 表中,它们来自于 auditableAttributesList。Identity Manager 还会检查是否定义了 workflowAuditAttrConds 属性。
可以在进程或工作流的单个实例中调用某些活动若干次。为了匹配特定活动实例的审计事件,Identity Manager 将工作流实例中的唯一标识符存储在 logattr 表中。
要在 logattr 表中为工作流存储其他属性,必须定义 workflowAuditAttrConds 列表,该列表被视为 GenericObjects 列表。如果在 workflowAuditAttrConds 列表中定义 attrName 属性,Identity Manager 将通过以下方法从代码内的对象中提取 attrName:先将 attrName 作为键,然后存储 attrName 值。所有键和值都是以大写值形式存储的。
审计配置由一个或多个发布器和若干预定义的组构成。
审计组根据对象类型、操作和操作结果定义所有审计事件的子集。每个发布器都被分配了一个或多个审计组。默认情况下,系统信息库发布器将分配给所有审计组。
审计发布器会将审计事件传送给特定审计目的地。默认系统信息库发布器会将审计记录写入系统信息库。每个审计发布器均可以具有特定于实现的选项。可以为审计发布器分配文本格式化程序。(文本格式化程序提供审计事件的文本表示。)
审计配置 (#ID#Configuration:AuditConfiguration) 对象是在 sample/auditconfig.xml 文件中定义的。此配置对象具有一个扩展,该扩展是一个通用对象。
在顶层,此配置对象具有以下属性:
filterConfiguration 属性列出了事件组,这些组用于使一个或多个事件通过事件过滤器。filterConfiguration 属性中列出的每个组都包含表 10–2 中列出的属性。
表 10–2 filterConfiguration 属性
示例 10–5 展示了默认资源管理组。
<Object name=’Resource Management’> <Attribute name=’enabled’ value=’true’/> <Attribute name=’displayName’ value=’UI_RESOURCE_MGMT_GROUP_DISPLAYNAME’/> <Attribute name=’enabledEvents’> <List> <Object> <Attribute name=’objectType’ value=’Resource’/> <Attribute name=’actions’ value=’ALL’/> <Attribute name=’results’ value=’ALL’/> </Object> <Object> <Attribute name=’objectType’ value=’ResourceObject’/> <Attribute name=’actions’ value=’ALL’/> <Attribute name=’results’ value=’ALL’/> </Object> </List> </Attribute> </Object> |
Identity Manager 提供了默认审计事件组。以下部分介绍了这些组及其启用的事件:
您可以在 Identity Manager 管理员界面的“审计配置”页中配置审计事件组(“配置”>“审计”)。有关说明,请参见配置审计组和审计事件。
还可以在“审计配置”页中为每个组配置成功或失败的事件。此界面不支持添加或修改为组启用的事件,但可通过 Identity Manager 调试页(Identity Manager 的“调试”页)来执行此操作。
并非可以为审计事件组选择的每个操作都会生成日志记录。另外,选择“所有操作”选项并不表示所有列出的操作均可用于所有审计事件组。
默认情况下将启用此组。
表 10–3 默认帐户管理事件组
类型 |
操作 |
---|---|
加密密钥 |
所有操作 |
Identity System 帐户 |
所有操作 |
资源帐户 |
批准、创建、删除、禁用、启用、修改、拒绝、重命名、解除锁定 |
工作流案例 |
结束活动、结束进程、结束工作流、启动活动、启动进程、启动工作流 |
用户 |
批准、创建、删除、禁用、启用、修改、拒绝、重命名 |
默认情况下将禁用此组。
表 10–4 Identity Manager 之外的更改事件组和事件
类型 |
操作 |
---|---|
资源帐户 |
本机更改 |
默认情况下将启用此组。
表 10–5 默认遵循性管理组事件
类型 |
操作 |
---|---|
审计策略 |
所有操作 |
访问扫描 |
所有操作 |
遵循性违规 |
所有操作 |
数据导出器 |
所有操作 |
用户权利 |
已批准证明者、已拒绝证明者、已请求修正、已请求重新扫描、终止 |
访问查看工作流 |
所有操作 |
修正工作流? |
所有操作 |
默认情况下将启用此组。
表 10–6 默认配置管理事件组
类型 |
操作 |
---|---|
配置 |
所有操作 |
用户表单 |
所有操作 |
规则 |
所有操作 |
电子邮件模板 |
所有操作 |
登录配置 |
所有操作 |
策略 |
所有操作 |
Xml 数据 |
导入 |
日志 |
所有操作 |
默认情况下将启用此组。
表 10–7 默认事件管理事件组
类型 |
操作 |
---|---|
电子邮件 |
通知 |
测试通知 |
通知 |
默认情况下将启用此组。
表 10–8 默认 Identity Manager 登录/注销事件组
类型 |
操作 |
---|---|
用户 |
证书到期、锁定、登录、注销、解除锁定、用户名恢复 |
默认情况下将启用此组。
表 10–9 默认密码管理事件组和事件
类型 |
操作 |
---|---|
资源帐户 |
更改密码、重设密码 |
默认情况下将启用此组。
表 10–10 默认资源管理事件组和事件
类型 |
操作 |
---|---|
资源 |
所有操作 |
资源对象 |
所有操作 |
资源表单 |
所有操作 |
资源操作 |
所有操作 |
属性解析 |
所有操作 |
工作流案例 |
结束活动、结束进程、结束工作流、启动活动、启动进程、启动工作流 |
默认情况下将禁用此组。
表 10–11 默认角色管理事件组和事件
类型 |
操作 |
---|---|
角色 |
所有操作 |
默认情况下将启用此组。
表 10–12 默认安全管理事件组和事件
类型 |
操作 |
---|---|
权能 |
所有操作 |
加密密钥 |
所有操作 |
组织 |
所有操作 |
管理员角色 |
所有操作 |
默认情况下将启用此组。
表 10–13 服务提供者 事件组和事件
类型 |
操作 |
---|---|
目录用户 |
质询响应、创建、删除、修改、操作后的标注、操作前的标注、更新验证答案、用户名恢复 |
默认情况下将禁用此组。
表 10–14 任务管理事件组和事件
类型 |
操作 |
---|---|
任务实例 |
所有操作 |
任务定义 |
所有操作 |
任务进度 |
所有操作 |
任务结果 |
所有操作 |
置备任务 |
所有操作 |
可以审计添加到 com.waveset.object.Type 类的每种新类型。必须为新类型分配唯一的双字符数据库键,该键将存储在数据库中。所有新类型将添加到不同的审计报告界面。必须将要记录到数据库而无需过滤的每种新类型添加到审计事件组 enabledEvents 属性(如有关 enabledEvents 属性的内容所述)中。
在某些情况下,您可能要审计不具有关联 com.waveset.object.Type 的项目,或者您要更为细化地表示现有类型。
例如,WSUser 对象在系统信息库中存储用户的所有帐户信息。审计进程并未将每个事件都标记为 USER 类型,而是将 WSUser 对象分割为两种不同的审计类型(资源帐户和 Identity Manager 帐户)。以这种方式分割对象可以更容易地在审计日志中查找特定帐户信息。
通过添加到 extendedObjects 属性来添加扩展审计类型。每个扩展对象必须具有下表中列出的属性。
表 10–15 扩展对象属性
参数 |
类型 |
描述 |
---|---|---|
name |
字符串 |
类型的名称,在构建 AuditEvents 时和事件过滤期间使用。 |
displayName |
字符串 |
表示类型名称的消息目录关键字。 |
logDbKey |
字符串 |
在日志表中存储此对象时要使用的双字符数据库键。有关保留的值,请参见审计日志数据库映射。 |
supportedActions |
列表 |
对象类型支持的操作。在用户界面中创建审计查询时将使用此属性。如果此值为 null,则所有操作将显示为针对此对象类型查询的可能值。 |
mapsToType |
字符串 |
(可选)映射到此类型的 com.waveset.object.Type 的名称(如果适用)。尝试解析对象组织成员资格(如果尚未在事件上指定)时使用此属性。 |
organizationalMembership |
列表 |
(可选)组织 ID 的默认列表,如果此类型的事件尚不具有已分配的组织成员资格,则应将这些事件置于此列表中。 |
所有客户特定的键应以 # 符号开头,以防止添加新的内部键时出现重复的键。
示例 10–6 展示了扩展类型的 Identity Manager 帐户。
<Object name=’LighthouseAccount’> <Attribute name=’displayName’ value=’LG_LIGHTHOUSE_ACCOUNT’/> <Attribute name=’logDbKey’ value=’LA’/> <Attribute name=’mapsToType’ value=’User’/> <Attribute name=’supportedActions’> <List> <String>Disable</String> <String>Enable</String> <String>Create</String> <String>Modify</String> <String>Delete</String> <String>Rename</String> </List> </Attribute> </Object> |
通常,审计操作会映射到 com.waveset.security.Right 对象。当添加新 Right 对象时,必须指定唯一的双字符 logDbKey,它将存储在数据库中。您可能会遇到没有权限符合必须审计的特定操作的情况。这时,可以通过将操作添加到 extendedActions 属性中的对象列表来扩展操作。
每个 extendedActions 对象必须包括表 10–16 中列出的属性。
表 10–16 extendedAction 属性
属性 |
类型 |
描述 |
---|---|---|
name |
字符串 |
操作的名称,在构建 AuditEvents 时和事件过滤期间使用。 |
displayName |
字符串 |
表示操作名称的消息目录关键字。 |
logDbKey |
字符串 |
在日志表中存储此操作时要使用的双字符数据库键。 有关保留的值,请参见审计日志数据库映射。 |
所有客户特定的键应以 # 符号开头,以防止添加新的内部键时出现重复的键。
表 10–16 展示了如何添加注销操作。
<Object name=’Logout’> <Attribute name=’displayName’ value=’LG_LOGOUT’/> <Attribute name=’logDbKey’ value=’LO’/> </Object> |
除可以扩展审计类型和操作外,还可以添加结果。默认情况下,有两种结果:成功和失败。可以通过将它们添加到 extendedResults 属性中的对象列表来扩展结果。
每个 extendedResults 对象必须包括表 10–17 中描述的属性。
表 10–17 extendedResults 属性
属性 |
类型 |
描述 |
---|---|---|
name |
字符串 |
结果的名称,在设置 AuditEvents 的状态时和事件过滤期间使用。 |
displayName |
字符串 |
表示结果名称的消息目录关键字。 |
logDbKey |
字符串 |
在日志表中存储此结果时要使用的单字符数据库键。有关保留的值,请参见标题为数据库键的部分。 |
所有客户特定的键都应使用 0–9 范围内的数字,以防止添加新的内部键时出现重复的键。
publishers 列表中的每个项目均为通用对象。每个 publishers 对象都具有以下属性。
表 10–18 publishers 属性
属性 |
类型 |
描述 |
---|---|---|
class |
字符串 |
发布器类的名称。 |
displayName |
字符串 |
表示发布器名称的消息目录关键字。 |
description |
字符串 |
发布器的描述。 |
filters |
列表 |
分配给此发布器的审计组列表。 |
formatter |
字符串 |
文本格式化程序(如果有)的名称。 |
options |
列表 |
发布器选项列表。这些选项是特定于发布器的;列表中的每个项目均为 PublisherOption 的映射表示。请参见 sample/auditconfig.xml 获得示例。 |
Identity Manager 系统信息库中有两个用于存储审计数据的表:
waveset.log – 存储大多数事件详细信息。
waveset.logattr – 存储每个事件所属组织的 ID。
本节中将首先讨论这些表。
当审计日志数据超过为上述表指定的列长度限制时,Identity Manager 将截断数据以使该数据适合列长度。审计日志截断中介绍了审计日志截断。
审计日志中的少数几列具有可配置的列长度限制。要了解有关这些列的信息以及如何更改其长度限制,请参见审计日志配置。
本节介绍了 waveset.log 表中的列名称和数据类型。数据类型是根据 Oracle 数据库定义获得的,在其他数据库中可能略微有所变化。有关所有受支持数据库的数据模式值列表,请参见附录 B。
一些列值在数据库中存储为键,以便优化空间。有关键的定义,请参见标题为审计日志数据库映射的一节。
objectType CHAR(2) – 表示正在进行审计的对象类型的双字符键。
action CHAR(2) – 表示已执行的操作的双字符键。
actionStatus CHAR(1) – 表示已执行操作的结果的单字符键。
reason CHAR(2) – 用于在出现故障时描述 ReasonDenied 对象的双字符数据库键。ReasonDenied 是一个封装了消息目录条目的类,用于一般的故障(例如证书无效和权限不足)。
actionDateTimeVARCHAR(21) – 执行上述操作的日期和时间。以 GMT 时间存储此值。
objectName VARCHAR(128) – 操作期间对其执行操作的对象的名称。
resourceName VARCHAR(128) – 操作期间使用的资源名称(如果适用)。一些事件不会引用资源;但是,在许多情况下,将会提供更详细的信息来记录已在其中执行操作的资源。
accountName VARCHAR(255) – 对其执行操作的帐户 ID(如果适用)。
server VARCHAR(128) – 在其中执行操作的服务器(由事件记录程序自动分配)。
message VARCHAR(255*) 或 CLOB – 任何与操作相关的本地化消息,包括诸如错误消息的消息。文本将进行本地化存储,因此不会被国际化。可以配置该列的列长度限制。默认数据类型为 VARCHAR,默认大小限制为 255。有关如何调整大小限制的信息,请参见审计日志配置。
interface VARCHAR(50) – 从中执行操作的 Identity Manager 界面(例如管理员、用户、IVR 或 SOAP 界面)。
acctAttrChanges VARCHAR(4000) 到 CLOB – 存储在创建和更新期间已更改的帐户属性。在创建或更新资源帐户或 Identity Manager 帐户对象期间将始终填充的属性更改字段。操作期间所有更改的属性都将作为字符串存储在此字段中。数据的格式为 NAME=VALUE NAME2=VALUE2。通过执行针对名称或值的 "contains" SQL 语句可以查询此字段。
以下代码示例展示了 acctAttrChanges 列中的值。
COMPANY="COMPANY" DEPARTMENT="DEPT" DESCRIPTION="DSMITH DESCRIPTION" FAX NUMBER="5122222222" HOME ADDRESS="12282 MOCKINGBIRD LANE" HOME CITY="AUSTIN" HOME PHONE="5122495555" HOME STATE="TX" HOME ZIP="78729" JOB TITLE="DEVELOPER" MOBILE PHONE="5125551212" WORK PHONE="5126855555" EMAIL="someone@somecompany.COM" EXPIREPASSWORD="TRUE" FIRSTNAME="DANIEL" FULLNAME="DANIEL SMITH" LASTNAME="SMITH" |
如果 Identity Manager 安装使用 Oracle 系统信息库,并且发现审计日志中出现截断错误,则可以将审计日志表中的 accountAttrChanges 字段由 VARCHAR(4000) 转换为 CLOB。Identity Manager 在 /web/sample 目录中提供了一个示例 DDL 脚本,用于将 log.acctAttrChanges 从 VARCHAR(4000) 转换为 CLOB。convert_log_acctAttrChangesCHAR2CLOB.oracle.sql 脚本保留了现有数据,并允许 accountAttrChanges 字段中包含的字符超过 4000 个。
这种转换是可选的,只应在发现截断错误时执行。另外,还要确保先备份受影响的表,然后再运行转换脚本。
在运行转换脚本后,请停止并重新启动 Web 应用服务器。在运行新报告时,它应该会正确进行显示。
acctAttr01label-acctAttr05label VARCHAR(50) – 这五个附加 NAME 槽是最多可以提升五个属性名称的列,这些属性名称将存储在各自的列中,而不是存储在大的二进制大对象中。可以使用 "audit?" 设置从“资源模式配置”页中提升属性,此属性可用于数据挖掘。
acctAttr01value-acctAttr05value VARCHAR(128) – 5 个附加 VALUE 槽,最多可以提升 5 个属性值,这些属性值将存储在单独的列中,而不是存储在二进制大对象列中。
parm01label-parm05label VARCHAR(50) – 用于存储与事件相关的参数的 5 个槽。示例如客户机 IP 和会话 ID 名称。
parm01value-parm05value VARCHAR(128*) 或 CLOB – 用于存储与事件相关的参数的 5 个槽。示例如客户机 IP 和会话 ID 值。可以配置这些列的列长度限制。默认数据类型为 VARCHAR,默认大小限制为 128。有关如何调整大小限制的信息,请参见审计日志配置。
id VARCHAR(50) – 由 waveset.logattr 表中引用的系统信息库分配给每个记录的唯一 ID。
name VARCHAR(128) – 生成的分配给每个记录的名称。
xml BLOB – 由 Identity Manager 内部使用。
waveset.logattr 表用于存储每个事件的组织成员资格的 ID,这可以按组织限定审计日志的范围。
id VARCHAR(50) – waveset.log 记录的 ID。
attrname VARCHAR(50) – 当前始终为 MEMBEROBJECTGROUPS。
attrval VARCHAR(255) – 事件所属的 MemberObject 组的 ID。
当审计日志数据的一个或多个列超过指定的列长度限制时,将截断列数据以使该数据适合列长度。具体来说,将数据截断为指定限制,减去三个字符。然后,在列数据末尾附加省略号 (...) 以表示发生截断。
此外,还会在该审计记录的 NAME 列前面添加字符串 #TRUNCATED#,以便于查询截断的记录。
在计算消息的截断位置时,Identity Manager 将使用 UTF–8 编码。如果配置使用 UTF–8 以外的编码,截断的数据仍可能会超过数据库中的实际列大小。如果发生这种情况,审计日志中将不会显示截断的消息,并且系统日志中将写入错误。
可以配置审计日志中的某些列以在系统信息库中存储大量数据。
审计日志中的一些列具有可配置的列长度限制。这些列包括:
message 列
parmNNvalue 列(其中 NN = 01、02、03、04 或 05)
xml 列
有关审计日志列的描述,请参见数据库模式。
可通过编辑 RepositoryConfiguration 对象来更改列长度限制。有关编辑 RepositoryConfiguration 对象的说明,请参见编辑 Identity Manager 配置对象。
要更改 message 列的列长度限制,请修改 maxLogMessageLength 值。
要更改 parmNNvalue 列的列长度限制,请修改 maxLogParmValueLength 值。同一限制值适用于所有 5 个列。(无法定义单个列长度值。)
要更改 xml 列的列长度限制,请修改 maxLogXmlLength 值。
需要重新启动服务器以使新值生效。
RepositoryConfiguration 对象中的列长度限制设置决定了可以在列中存储的最大数据量。如果要存储的数据超过这些设置,Identity Manager 将会截断数据。有关详细信息,请参见审计日志截断。
如果增加 RepositoryConfiguration 对象中的列长度设置,还要确保数据库中的列大小设置至少与 RepositoryConfiguration 对象中配置的大小一样。
应定期截断审计日志,以使其不致变得太大。可以使用审计日志维护任务调度从审计日志中删除旧记录的任务。
在管理员界面中,单击“服务器任务”->“管理进度表”。
在“可调度的任务”部分中,单击“审计日志维护任务”。
将打开“创建新的审计日志维护任务任务进度表”页。
填写表单,然后单击“保存”。
Identity Manager 可以将审计事件提交给自定义审计发布器。
提供了以下自定义发布器:
控制台。将审计事件打印到标准输出或标准错误。
文件。将审计事件写入平面文件。
JDBC。在 JDBC 数据存储中记录审计事件。
JMS。在 JMS 队列或主题中记录审计事件。
JMX。发布审计事件,以使 JMX (Java Management Extensions) 客户机可以监视 Identity Manager 审计日志活动。
脚本化。允许使用自定义脚本存储审计事件。
如果要创建您自己的发布器,请参见开发自定义审计发布器。
本节中的信息包含以下主题:
自定义审计发布器是从“审计配置”页中启用的。
在管理员界面中,单击主菜单中的“配置”,然后单击次级菜单中的“审计”。
将打开“审计配置”页。
选择页面底部的“使用自定义发布器”选项。
将打开一个表,其中列出了当前配置的审计发布器。
要配置新的审计发布器,请从“新建发布器”下拉菜单中选择自定义发布器类型。
填写“配置新审计发布器”表单。单击“确定”。
要点!请单击“保存”以保存新的审计发布器!
要启用控制台、文件、JDBC 或执行脚本的审计发布器,请按照启用自定义审计发布器中的步骤进行操作。从“新建发布器”下拉菜单中选择相应的发布器类型。
填写“配置新审计发布器”表单。如果存在表单方面的问题,请参阅 i-Helps 和联机帮助。
控制台审计发布器用于将审计事件打印到标准输出或标准错误。
文件审计发布器用于将审计事件写入平面文件。
JDBC 审计发布器用于在 JDBC 数据存储中记录审计事件。
执行脚本的审计发布器允许使用 JavaScript 或 BeanShell 编写自定义脚本以存储审计事件。
可以使用 JMS 审计日志自定义发布器将审计事件记录发布到 JMS(Java Message Service,Java 消息服务)队列或主题中。
通过发布到 JMS,可以在具有多个 Identity Manager 服务器的环境中提供更大的关联灵活性。此外,还可以在限制使用文件审计日志发布器的环境中使用 JMS,例如,在服务器运行时客户机报告工具无法访问日志的 Windows 环境中。
JMS 为具有多个服务器的环境提供了很多好处:
JMS 消息存储集中处理(并简化)消息存储和检索。
JMS 体系结构不限制可访问服务的客户机数。
可通过防火墙和其他网络基础结构方便地发送 JMS 协议。
Java Message System 提供了两种消息传送模型:点对点或队列模型,以及发布和订阅或主题模型。Identity Manager 支持这两种模型。
在点对点模型中,生成方将消息发布到特定队列,而使用方从队列中读取消息。此处,生成方知道该消息的目的地,并将该消息直接发布到使用方的队列。
点对点模型具有以下特征:
只有一个使用方将获得消息。
不必在接收者使用消息时运行生成方,也不需要在发送消息时运行接收者。
接收者将确认成功处理的每条消息。
另一方面,发布和订阅模型支持将消息发布到特定消息主题。零个或多个订阅者可以登记对接收特定消息主题的消息的意向。在此模型中,发布者和订阅者均不了解对方。一个贴切的比喻是,此模型就像一个匿名布告栏。
发布和订阅模型具有以下特征:
多个使用方可以接收消息。
发布者和订阅者之间存在计时依赖关系。发布者必须先创建一个订阅,然后客户机才能进行订阅。在订阅后,除非已建立持久订阅,否则订阅者必须持续处于活动状态才能接收消息。对于持久订阅,在订阅者未连接时发布的消息将在订阅者重新连接时重新分发。
有关 JMS 的详细信息,请访问 http://www.sun.com/software/products/message_queue/index.xml
JMS 发布器将审计事件设置为 JMS TextMessage 格式。然后,根据配置情况将这些 TextMessage 发送到队列或主题。可以根据配置情况将文本消息的格式设置为 XML 或通用日志记录格式 (Universal Logging Format, ULF)。
要启用 JMS 发布器类型,请按照启用自定义审计发布器中的步骤进行操作,然后从“新建发布器”下拉菜单中选择 "JMS"。
要配置 JMS 发布器类型,请填写“配置新审计发布器”表单。如果存在表单方面的问题,请参阅 i-Helps 和联机帮助。
JMX 审计日志发布器发布审计事件,以使 JMX (Java Management Extensions) 客户机能够监视 Identity Manager 审计日志活动。
Java Management Extensions (JMX) 是一项 Java 技术,用于管理和/或监视应用程序、系统对象、设备和面向服务的网络。管理/监视的实体由称为 MBean(受管 Bean)的对象表示。
Identity Manager 的 JMX 审计日志发布器监视审计日志中的事件。在检测到事件时,JMX 发布器将使用 MBean 封装审计事件记录,并且还会更新临时历史记录(保留在内存中)。对于每个事件,将向 JMX 客户机发送单独的较小通知。如果对该事件感兴趣,JMX 客户机可以向封装审计事件的 MBean 查询其他信息。
有关审计事件记录的信息,请参见 com.waveset.object.AuditEvent Javadoc。开发自定义审计发布器中介绍的 REF 工具包中提供了该 Javadoc。
要从正确的 MBean 中检索信息,需要历史记录序列号。此号码包含在事件通知中。
每个事件通知包含以下信息:
类型。描述事件类型的字符串。该字符串采用 AuditEvent.<ObjectType>.<Action> 格式,其中 ObjectType 和 Action 是从 com.waveset.AuditEvent 返回的。例如,如果发送解除锁定事件,则类型为 AuditEvent.LighthouseAccount.Unlock。
序列号。用于从 MBean 查询信息的历史记录缓冲区键。
要启用 JMX 发布器类型,请按照启用自定义审计发布器中的步骤进行操作,然后从“新建发布器”下拉菜单中选择 "JMX"。
要配置 JMX 发布器类型,请填写“配置新审计发布器”表单。如果存在表单方面的问题,请参阅 i-Helps 和联机帮助。
发布器名称。为 JMX 审计事件发布器键入唯一名称。
历史记录限制。根据需要,更改默认值以指定发布器应在内存中保留的事件项目数。(默认值为 100。)
单击“测试”以验证发布器名称是否为可接受的名称。
单击“确定”。将关闭“配置新审计发布器”表单。
要点!单击“保存”。
可以使用 JMX 客户机来查看 JMX 发布器。JDK 1.5 中包含的 JConsole 用于创建以下屏幕捕获。
如果使用 JConsole,请选择连接到进程以查看 IDM:type=AuditLog MBean。有关配置 JConsole 以用作 JMX 客户机的信息,请参见《Sun Identity Manager 8.1 System Administrator’s Guide》中的“Viewing JMX Data”。
在 JConsole 中,单击“通知”选项卡可查看审计事件。记下通知中的序列号。在 MBean 中查询其他信息时需要使用序列号。
在 JConsole 中,单击“操作”选项卡。使用通知中的序列号从 MBean 中查询事件详细信息。每个操作都带有 'get' 前缀,并且唯一的参数是“序列”号。
实际上,MBean 是到 com.waveset.object.AuditEvent 类的一一映射。表 10–19 为 MBean 提供的每个属性/操作提供了说明。
表 10–19 MBeanInfo 属性/操作描述
属性/操作 |
描述 |
---|---|
AccountAttributesBlob |
已更改的属性的列表 |
AccountId |
与事件关联的帐户 ID |
Action |
在事件期间执行的操作 |
AuditableAttributes |
可审计属性 |
ErrorString |
任何错误字符串 |
Interface |
审计界面 |
MemberObjectGroupRefs |
成员对象组引用 |
ObjectName |
对象名 |
ObjectType |
对象类型 |
OverflowAttributes |
所有溢出属性 |
Parameters |
所有参数 |
Reason |
事件原因 |
ResourceName |
与事件关联的资源 |
RoleName |
与事件关联的角色 |
SubjectName |
与事件关联的用户或服务 |
Server |
从中触发事件的服务器名称。 |
Status |
审计事件的状态。 |
Timestamp |
审计事件的日期/时间 |
在 JConsole 中,单击“属性”选项卡。属性带有 Current 前缀,表示属性包含发送到系统的最新审计事件。
本节说明了如何使用 Java 创建新的自定义审计发布器。
随 Identity Manager 提供的控制台、文件和 JDBC 自定义发布器实现了 AuditLogPublisher 接口。可以在 REF 工具包中找到这些发布器的源代码。也可以在 REF 工具包中找到 Javadoc 格式的接口文档。(有关接口的详细信息,请参阅 Javadoc。)
REF(Resource Extension Facility,资源扩充工具)工具包是在产品 CD 上的 /REF 目录中提供的,或者是随安装映像提供的。
建议开发者扩展 AbstractAuditLogPublisher 类。此类可以解析配置并确保已将所有必需选项提供给发布器。(请参见 REF 工具包中的发布器示例。)
发布器必须具有一个无参数的构造函数。
以下步骤介绍发布器的生命周期:
实例化对象。
使用 setFormatter() 方法设置格式化程序(如果有)。
使用 configure( Map) 方法提供选项。
使用 publish( Map, LoggingErrorHandler) 方法发布事件。
使用 shutdown() 方法终止发布器。
Identity Manager 启动以及更新审计配置时都执行步骤 1-3。如果调用关闭之前没有生成审计事件,则不会执行步骤 4。
在同一发布器对象上仅调用一次 configure(Map)。(发布器无需准备运行中的配置更改)。更新审计配置后,将先关闭当前发布器,然后再创建新发布器。
步骤 3 中的 configure() 方法可能会抛出 WavesetException。在这种情况下,将忽略发布器,并且对于此发布器不再会执行其他调用。
发布器可以没有选项,也可以具有多个选项。getConfigurationOptions() 方法将返回发布器支持的选项列表。这些选项可以使用 PublisherOption 类(有关此类的详细信息,请参见 Javadoc)进行封装。审计配置查看器在构建发布器的配置接口时将调用此方法。
Identity Manager 将在服务器启动时以及审计配置更改之后使用 configure( Map) 方法配置发布器。
REF 工具包包括以下格式化程序的源代码:
XmlFormatter。将审计事件格式化为 XML 字符串。
UlfFormatter。根据通用日志记录格式 (Universal Logging Format, ULF) 格式化审计事件。Sun Application Server 使用此格式。
格式化程序必须实现 AuditRecordFormatter 接口。此外,格式化程序必须具有一个无参数的构造函数。有关详细信息,请参阅 REF 工具包中的 Javadoc。
#ID#Configuration:SystemConfiguration 对象的审计属性列出了所有已注册的发布器和格式化程序。仅这些发布器和格式化程序可在审计配置用户界面中使用。