IBM Cognos 最佳实践: 基于平面文件向 IBM Cognos 8 验证身份

产品:IBM Cognos 8;关注领域:安全性

这个包包含一个简单的基于平面文件的 Custom Java Authentication Provider。它对于离线设置或测试安装非常方便,不需要任何第三方软件。

Nikhil Mayaskar, 软件工程师, IBM

Nikhil MayaskarNikhil Mayaskar 在 Pune 的 IBM India Software Labs 的 IBM Cognos 团队工作。Nikhil 的工作涉及分析、设计、开发和增强 Cognos 产品套件的测试框架。他的专业和兴趣领域是金融和 BI 领域中的 Java、J2EE 和 Web 技术。在空闲时间,他喜欢听音乐。Nikhil 拥有印度 IT-BHU 的电子工程学士学位。



Nitin Chaturvedi, 自动化测试工程师, IBM

Nitin ChaturvediNitin Chaturvedi 在 Pune 的 IBM India Software Labs 的 IBM Cognos Product Engineering 团队工作。他参与了 Cognos 产品的自动化基础设施的开发。他在为不同的应用领域设计自动化框架方面具有丰富的经验,比如 Flex、Web 和 Eclipse RCP。他热衷于问答游戏,在空闲时间喜欢读书。



Rajanikant Malviya, 资深软件工程师, IBM

R Malviya 照片Rajanikant Malviya 是在 IBM 印度软件实验室的一名软件工程师。他在基于 Java 运行平台和基础架构方面有 6 年多的经验。他在设计框架方面有强烈的兴趣。



2011 年 6 月 02 日 (最初于 2010 年 8 月 17 日)

免费下载:IBM® Cognos® Express V9.5 或者 Cognos® 8 Business Intelligence Developer Edition V8.4 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

目的

IBM Cognos 8 本身并不验证用户的身份,而是依靠 LDAP 或 Microsoft Active Directory 等第三方身份验证源执行身份验证。这意味着 IBM Cognos 8 会把用户输入的或通过单点登录 (SSO) 机制获得的登录数据(本质上是凭证)交给第三方身份验证源。完成身份验证之后,IBM Cognos 8 还需要从身份验证源读取用户的组和角色,让授权功能可以使用这些信息。这个任务由身份验证提供者实现。

因此,要想为 IBM Cognos 环境配置任何类型的安全性,就必须配置安全性提供者。尽管 IBM Cognos 8 提供几个重要的提供者,但是根据软件的可用性和个人技能水平不同,配置它们可能有难度。因此,需要一个轻量的 Custom Java Authentication Provider (CJAP),它应该容易配置和掌握,而且不需要任何其他软件。

本文档的目的是描述一个基于简单文本文件的 Custom Java Authentication Provider。可以使用这个提供者执行简单的测试安装,因为它不需要数据库或外部源等任何其他软件。另外,可以使用它演示用户供应支持,因为可以使用 Tivoli Identity Manager 等其他软件创建并管理包含用户、组和角色的文本文件。

适用性

本文档中描述的技术和行为已经在 IBM Cognos 8.4(包含 Refresh Pack 1)上测试过。这个 CJAP 使用 IBM JRE version 1.5。

这个提供者当前没有实现可信凭证,因此不支持调度。

功能范围

这个定制提供者的功能如下:

  1. 独立于平台的轻量的定制提供者,因为它只使用平面文件。
  2. 在定制的名称空间只由一个组织/组/租用者共享的情况下,用基本的定制安全性提供者实现用户供应和单点登录。(参见 在定制的名称空间只由一个组织/组/租用者共享的情况下配置基本的提供者
  3. 在定制的名称空间由多个组织/组/租用者共享的情况下,用复杂的定制安全性提供者实现用户供应和单点登录。(参见 在定制的名称空间由多个组织/组/租用者共享的情况下配置复杂的提供者
  4. 通过可信单点登录机制集成 IBM Cognos 8 和自己的安全基础设施。(参见 通过配置定制的可信登录提供者在安全基础设施中集成 IBM Cognos 8 组件
  5. 可以使用相同的 customprovider.jar 文件配置所有提供者示例。

了解 IBM Cognos 8 安全模型

身份验证请求的处理流程

图 1. IBM Cognos 8 中身份验证请求的处理流程
IBM Cognos 8 中身份验证请求的处理流程

当用户请求对 IBM Cognos 8 进行需要身份验证的访问时,处理流程如下(见上面的图 1):

  1. 用户单击一个报告或分析以查看它,请求经过 Gateway 和 Dispatcher 发往表示服务。
  2. Gateway 接收请求并把它发送给 Dispatcher。
  3. Dispatcher 注意到请求中没有 passport 并把请求发送给 Content Manager。
  4. Content Manager 把请求发送给 Access Manager。
  5. IBM Cognos 8 系统中禁止匿名访问,所以 Access Manager 把请求发送回 Content Manager 并附带一个错误。这个错误包含的信息说明登录需要什么。例如,如果存在多个名称空间,就要求用户选择一个名称空间。如果只有一个名称空间,可能要求用户提供用户 ID 和密码。
  6. Content Manager 把请求和附带的错误返回给 Dispatcher。
  7. Dispatcher 把请求发送给表示服务。
  8. 表示服务为用户创建适当的登录页面,并通过 Dispatcher 和 Gateway 把页面返回给用户。
  9. 用户输入必需的信息,比如用户 ID 和密码。把信息附加到原来的请求中并通过 Gateway 发送给 Dispatcher。
  10. Dispatcher 把请求发送给 Content Manager。
  11. Content Manager 把请求发送给 Access Manager。
  12. Access Manager 通过身份验证服务与身份验证提供者通信以检验提供的凭证。如果所需的所有信息都是正确的,Access Manager 会颁发一个 Passport ID,把它附加到原请求的 HTTP 头中,再把请求发送回 Content Manager。如果所需的信息不正确或不完整,请求处理失败,返回到第 9 步。
  13. Content Manager 把请求发送给 Dispatcher。
  14. Dispatcher 处理请求并把它发送给表示服务。
  15. 表示服务通过 Dispatcher 和 Gateway 把欢迎页面发送给用户。

授权和 CAMID

当用户通过身份验证时,颁发 passport,这个对象包含 visa。对于每个名称空间,在成功完成身份验证之后,身份验证提供者都会颁发一个 visa。在这种情况下,passport 包含多个 visa。Passport ID 是 passport 对象的引用,由 Content Manager 组件在内存中维护 passport 对象。Passport ID 被放在 cam_passport cookie 中,使用这个 cookie 检查用户在当前会话中是否已经成功地通过了身份验证。现在,确定用户的身份,确认对 IBM Cognos Portal 内容的访问权。

IBM Cognos 8 通过继承(嵌套的组成员关系)表明用户(直接或间接)所属的组和角色。对于已经为其颁发了 Passport ID 的名称空间中的组和角色,以及 IBM Cognos 名称空间中的组和角色,都采用这种方法。

在 IBM Cognos 8 中,授权基本上应用于组成 IBM Cognos 8 应用程序的所有对象。所有内容(报告、分析、文件夹、包等等)以及许多函数和系统功能都可以有相关联的权限(例如对 Studios 的访问权)。权限指定谁(用户、组或角色)对于某个对象/功能/函数有哪些特权。

IBM Cognos 中的五个特权级别是:

  • READ
  • WRITE
  • EXECUTE
  • TRAVERSE
  • SET POLICY

在内部,这些特权级别并不包含用户、组或角色的名称,而是包含称为 CAMID 的内部 ID。对于从外部身份验证提供者读取的每个对象,由身份验证提供者构造 CAMID。这也适用于内部身份验证提供者,所以 IBM Cognos 名称空间的所有对象都有分配给它们的 CAMID。IBM Cognos 8 使用 CAMID 存储对对象的访问权,当需要授权时使用它们检查访问权。对用户身份中的对象的 CAMID 和分配给对象的权限进行比较,然后相应地授予或拒绝特权。尽管不同的身份验证提供者以不同的方式构造 CAMID,但是它们都使用一致的布局。CAMID 是一个字符串,由两个相连的字段组成:

CAMID:="CAMID(<NamespaceID>:<AuthProviderSpecificID>)"

NamespaceID 是在 IBM Cognos 配置中为名称空间指定的 ID。AuthProviderSpecificID 是身份验证提供者在内部构造的 ID。

下面是两个示例:

  • 示例 1,用户:
    CAMID("LDAP:u:uid=admin,cn=admin,ou=support")
    其中:
    – LDAP 是 NamespaceID
    uid=admin 是用户的 Relative Distinguished Name (RDN)
    cn=admin, ou=support 是 Distinguished Name (DN)
  • 示例 2,组:
    CAMID("LDAP:g:cn=admin,ou=support")
    其中:
    – LDAP 是 NamespaceID
    cn=admin, ou=support 是 Distinguished Name (DN)

注意:这个 ID 没有正式的文档记载,因为它是内部的,可能改变而无须通知。这里描述的布局是 IBM Cognos 8.4 当前的情况,在以后的版本中可能会改变而无须通知。当前,AuthProviderSpecificID 由一个类型字段(表示条目的类型)和某个 ID 字符串组成。类型包括:u 表示用户,g 表示组,f 表示文件夹。ID 完全取决于提供者。


Custom Java Authentication Provider 的安装

配置 IBM Cognos 环境

把示例 zip 文件(由两个 jar 文件和四个文本文件组成)解压到一个临时目录并执行以下步骤:

  1. customprovider.jar 复制到 <C8_ROOT>/webapps/p2pd/WEB-INF/lib 目录中。
  2. 把所有 .txt 文件复制到 <C8_ROOT>/configuration 目录中。
    现在,执行以下步骤为以下使用场景配置 Custom Java Authentication Provider (CJAP)。

注意:对于 Content Manager (CM) 和应用层位于不同系统上的分布式 IBM Cognos 8,必须在运行 CM 的所有系统上部署 CJAP。


在定制的名称空间只由一个组织/组/租用者共享的情况下配置基本的提供者

配置 IBM Cognos 8

在 Cognos Configuration 中执行以下步骤:

  1. 进入 Security -> Authentication 文件夹。
  2. 使用弹出菜单在 Authentication 文件夹中添加一个新的名称空间资源(图 2)。
  3. 给名称空间指定名称,比如 “Basic Custom Provider”,在 Type 菜单中选择类型 “Custom Java Provider”,单击 Ok。
    图 2. 为定制的提供者添加新的名称空间资源
    为定制的提供者添加新的名称空间资源
    这为单一组织 CJAP 创建新的名称空间,现在必须像下面这样配置它(图 3)。
  4. 选择这个名称空间。
  5. 输入 BASIC 作为提供者 ID。
  6. 输入 com.ibm.cognos.security.text.BasicCustomProvider 作为类名。
    图 3. 配置单一组织 CJAP
    配置单一组织 CJAP

现在保存配置并关闭 Cognos Configuration。再次启动 Cognos Configuration,使用名称空间上的弹出菜单测试名称空间。如果在前面的复制步骤中正确地复制了 jar 文件,现在会装载提供者并完成安装,可以为提供者配置用户、角色和组了。

保存新配置并重新启动 IBM Cognos 8 服务。现在,可以作为配置的用户之一登录刚配置的名称空间。

配置单一组织数据库

在第 3 节中,把几个文本文件复制到了 <C8_ROOT>/configuration 目录中。对于单一组织配置,重要的文件是 customprovider_db.txt,它是单一组织提供者的数据库文件。

文件的格式很松散。

这个文件基本上分为四个部分 — 用户、组、角色和文件夹。依次解析每个部分,用在前面的部分中创建的 ID 引用所有对象,否则会出现错误。首先装载用户,然后是角色并分配用户角色,然后装载组并分配成员。最后,装载用于 IBM Cognos Admin 显示的文件夹。

示例用户数据库文件

//User
user:40:Test:User A:usera@us.ibm.com:usera:usera
user:50:Test:User B:userb@us.ibm.com:userb:userb

// Roles
role:100:::Administrator::40
role:101:::Author::40,50
role:102:::Consumer::40,50
role:103:::AdHoc::50

// Groups
group:200:::Developers::40,50
group:201:::Test Users::40
group:202:::All Users::40,50

// Folders
folder:300:::Users::40,50
folder:301:::Groups::200,201,202
folder:302:::Roles::100,101,102,103

用户部分

用户部分包含一些格式严谨的行。行的格式如下:

user:<objectid>:<First Name>:<Last Name>:<email><username>:<password>

objectid 是文本字符串,在这个文本文件中必须是惟一的。

角色部分

角色部分包含一些格式严谨的行,它们代表这个名称空间中需要的每个角色。行的格式如下:

User:<objectid>:::<role name>:<comma delimited member list>

objectid 是文本字符串,在这个文本文件中必须是惟一的。角色的成员列表应该包含您希望在登录时具有此角色的所有用户。

组部分

组部分包含一些格式严谨的行,它们代表这个名称空间中需要的每个组。行的格式如下:

User:<objectid>:::<group name>:<comma delimited member list>

objectid 是文本字符串,在这个文本文件中必须是惟一的。组的成员列表可以包含用户、角色或在前面行中已经定义的组的 <objectid>。

文件夹部分

文件夹部分包含一些格式严谨的行,它们代表这个名称空间中需要的每个文件夹。行的格式如下:

User:<objectid>:::<group name>:<comma delimited member list>

objectid 是文本字符串,在这个文本文件中必须是惟一的。文件夹的成员列表可以包含用户、角色和组或在前面行中已经定义的文件夹的 <objectid>。在 Cognos Administration 工具中使用文件夹层次结构组织名称空间。必须有至少一个文件夹,其中包含所有对象。

在使用单一组织提供者的 IBM Cognos 中标识对象

装载提供者之后,就可以在 Cognos Administration 应用程序中使用数据库中的所有对象。

为 Content Store 中每个对象构造的搜索路径采用以下格式:

CAMID(“<namespace id>:<objectid>”)

2.2 节解释过 CAMID 的作用。

在 4.1 节中用 Cognos Configuration 定义了 BASIC 名称空间,而在这个名称空间中定义的 customprovider_db.txt 用 objectid 40 标识用户 A,所以对于这个用户,提供的示例会生成搜索路径 CAMID(“BASIC:40”)。

然后,可以为配置的用户设置权限。

图 4. 为配置的用户设置权限
为配置的用户设置权限

在定制的名称空间由多个组织/组/租用者共享的情况下配置复杂的提供者

根据客户应用程序的规模、客户的多样性以及角色/特性的多样性等因素,多个独立的客户可以共享一个 IBM Cognos 8 实例。这里描述的 “多组织” 配置实现一个由多个 “租用者” 共享的系统,租用者不必知道其他租用者,甚至不必知道他们的应用程序是由单一系统驻留的。随着在企业范围部署 IBM Cognos 8,在大系统上驻留多个 “租用者” 的需求越来越常见了。

配置 IBM Cognos 8

在 Cognos Configuration 中执行以下步骤:

  1. 进入 Security -> Authentication 文件夹。
  2. 使用弹出菜单在 Authentication 文件夹中添加一个新的名称空间资源(图 5)。
  3. 给名称空间指定名称,比如 “Complex Custom Provider”,在 Type 菜单中选择类型 “Custom Java Provider”,单击 Ok。
    图 5. 配置复杂的 CJAP
    配置复杂的 CJAP
    这为多组织 CJAP 创建新的名称空间,现在必须像下面这样配置它(图 6)。
  4. 选择这个名称空间。
  5. 输入 MULTI 作为提供者 ID。
  6. 输入 com.ibm.cognos.security.text.ComplexCustomProvider 作为类名。
图 6. 配置复杂 CJAP 的类名
配置复杂 CJAP 的类名

再次使用名称空间上的弹出菜单测试名称空间。如果在前面的复制步骤中正确地复制了 jar 文件,现在会装载提供者并完成安装。

保存新配置并重新启动 IBM Cognos 8 服务。

配置多组织数据库

在第 3 节中,把几个文本文件复制到了 <C8_ROOT>/configuration 目录中。对于多租用者配置,重要的文件是 customprovider_orgs.txt,它是用于多个组织的注册文件,它引用多个单一组织数据库文件。

在启动时,提供者解析这个文件,然后装载引用的每个单一组织数据库文件。

示例组织注册文件如下所示。

示例组织注册文件

这是基于文件的提供者使用的组织数据库。

org:1:IBM:customprovider_db_ibm.txt

org:2:IBM QA: customprovider_db_ibmqa.txt

组织部分

这个文件中只有组织部分,其中包含一些格式严谨的行,它们代表需要在这个名称空间中添加的每个组织。行的格式如下:

org:<orgid>:<organization name>:<file name>

orgid 是 IBM Cognos 8 在为 Content Store 条目构造惟一搜索路径时使用的 id。file name 是 4.2.1 节讨论过的单一组织提供者的用户数据库文件名。

在使用复杂提供者的 IBM Cognos 中标识对象

装载提供者之后,就可以在 Cognos Administration 应用程序中使用数据库中的所有对象。为 Content Store 中每个对象构造的搜索路径采用以下格式:

CAMID(“<namespace id>:<organisation id>-<objectid>”)

在 5.1 节中用 Cognos Configuration 定义了 MULTI 名称空间,在这个名称空间中用 customprovider_orgs.txt 中的 orgid 1 和 customprovider_db_ibm.txt 中的 objectid 40 标识用户 A,所以对于这个用户,提供的示例会生成搜索路径 CAMID(“MULTI:1-40”)。

登录 Complex Custom Provider

对于同一名称空间注册多个组织之后,在登录时应该选择 Complex Custom Provider(图 7)。

图 7. 在登录时选择复杂提供者
在登录时选择复杂提供者

屏幕现在应该会更新,会增加选择组织的控件(图 8)。显示所有组织不太安全,在真实的提供者中这应该是文本输入框或隐藏的值,但是显示所有组织对于本文档比较方便。

图 8. 选择适当的组织
选择适当的组织

选择需要的组织并输入相关的凭证。当作为此组织中的用户登录时,如果此用户有权访问 Cognos Administration,那么只会显示相关用户数据库文件中定义的文件夹。

作为管理员登录 Complex Custom Provider

为了增强安全性,需要内部的管理功能。

这由用户名为 “cognos” 的内部管理用户提供。这个账号的密码也是 “cognos”,当前是硬编码的。可以从名为 “Administrators” 的组织访问此用户,这个组织会自动地添加到选择列表的末尾(图 9)。

图 9. 作为管理员登录 Complex Custom Provider
作为管理员登录 Complex Custom Provider

登录之后,管理用户 “cognos” 是 “Cognos Administrators” 组的成员,具有 “Cognos Administrator” 角色。可以从 Cognos Administration 访问这些角色和组。

登录 Cognos Administration 之后,应该能够访问 customprovider_orgs.txt 文件中定义的所有组织以及内置的 Administration 组织(图 10)。选择任何组织,就会显示此组织的用户数据库文件中定义的文件夹结构。

图 10. 管理员登录功能
管理员登录功能

因此,可以访问所有组织中的角色和组,现在应该按 Security and Administration Guide 中的说明使用它们保护 IBM Cognos 8 系统。


通过配置定制的可信登录提供者在安全基础设施中集成 IBM Cognos 8 组件

前面介绍的两个提供者只支持基于 “TRUSTED_SIGNON_USER” 变量的 SSO。实现 SSO 需要使用可信登录提供者,这种提供者从 cookie 或 URL 参数获取用户名并填充指定的变量。

可信登录的用户应该是有效的用户,能够成功地向 IBM Cognos 8 验证身份,否则在当前实现中会抛出未处理的异常。

下图显示在实现可信登录提供者的情况下 IBM Cognos 8 的安全架构。

图 11. 定制的可信登录提供者架构
定制的可信登录提供者架构

配置 IBM Cognos 8 环境

在 Cognos Configuration 中执行以下步骤:

  1. 进入 Security -> Authentication 文件夹。
  2. 使用弹出菜单在 Authentication 文件夹中添加一个新的名称空间资源(图 12)。
  3. 给名称空间指定名称,比如 “CustomTrustedSignonProvider”,在 Type 菜单中选择类型 “Custom Java Provider”,单击 Ok。
    图 12. 为定制的可信登录提供者添加新的名称空间资源
    为定制的可信登录提供者添加新的名称空间资源
    这为可信登录 CJAP 创建新的名称空间,现在必须像下面这样配置它(图 13)。
  4. 选择这个名称空间。
  5. 输入 TRUSTED 作为提供者 ID。
  6. 输入 com.ibm.cognos.security.text.CustomTrustedSignon 作为类名。
图 13. 配置定制的可信登录提供者
配置定制的可信登录提供者

配置的可信登录提供者在内部调用 Basic Custom Provider(在 com.ibm.cognos.security.text.CustomTrustedSignon 类中配置)执行身份验证,如果愿意,可以隐藏它。把基本提供者的 “Selectable for Authentication” 字段设置为 “false”(图 14)。它会从登录页面上的名称空间下拉列表中消失。

图 14. 对于身份验证隐藏可信登录提供者名称空间
对于身份验证隐藏可信登录提供者名称空间
图 15. 登录可信登录提供者名称空间
登录可信登录提供者名称空间

可以通过设置 cookie 变量或 Cognos URL 在 com.ibm.cognos.security.text.CustomTrustedSignon 类中用可信用户实现 SSO。在上面的类中从变量 “TRUSTED_SIGNON_USER” 获取用户。

如果可信用户是有效的用户,他会自动地登录 Cognos 名称空间 “BASIC”;否则通过 UI 提示用户输入凭证。也可以配置为登录其他名称空间。

注意:根据应用程序开发人员的习惯不同,注入 cookie 的实现可能不一样。


结束语

本文解释了一个容易使用的 Custom Java Authentication Provider (CJAP),它只使用文本文件驱动用户供应所需的所有配置(比如身份验证和授权),不需要特殊的数据库、其他软件或外部源。

使用平面文件的 CJAP 的优点

  1. 很容易用 TIM (Tivoli Identity Manager) 等外部工具填充 CJAP 使用的平面文件,因此有助于集成 POC 或测试环境。
  2. 它可以作为轻量的目录服务器,而且在所有系统上都使用平面/文本文件,因此不需要任何数据库或特殊技能。用户只需编写/修改文本文件。它不需要任何第三方软件,所以对于离线设置和测试安装非常方便。
  3. 它可以在离线状态下保护 IBM Cognos,甚至是在非 Windows 环境中。例如,可以使用它简便地对 Linux 用户进行身份验证。这个 CJAP 只需用在登录时指定的用户名和密码通过 telnet 连接 Linux 计算机。如果没有它,就需要按 http://www.ibm.com/developerworks/linux/library/l-pam 中的说明集成 IBM Cognos 和 PAM (Pluggable Authentication Module)。
  4. 可以隐藏在 Cognos Configuration 中为名称空间配置的目录服务器信息(IP、端口等)。

常见问题

  1. 在 Namespace ID 属性中不要使用冒号 (:)。
  2. 错误 “Bad Offset at version 6”:这是由于用比较高的 JRE 版本(JRE 1.5.X 之前的版本)编译 Custom Java Provider 名称空间使用的 jar 文件,在 IBM Cognos 环境中造成 JRE 不匹配。尝试使用比较低的 JRE 版本(JRE 1.4.X 之前的版本)。

注意:这里的示例代码已经用 IBM JRE version 1.5 编译过。


参考资料

本节中列出的参考资料非常适合对本文档中讨论的主题进行更深入的研究。

Handling Changes to IBM Cognos 8 Security

IBM Cognos 8 v4 Business Intelligence 信息中心


下载

描述名字大小
示例代码flat_file_CJAP.zip474KB

参考资料

学习

获得产品和技术

讨论

  • 参与 developerWorks 博客 并加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=677486
ArticleTitle=IBM Cognos 最佳实践: 基于平面文件向 IBM Cognos 8 验证身份
publish-date=06022011