IBM Cognos 最佳实践: 基于角色的安全性动态报告

文档:技巧或技术;产品:IBM Cognos BI;领域:安全性、建模、报告

本文简要介绍创建提供用户级安全性的报告和模型所需的步骤。

Kanako Harada, 业务分析 — Cognos 软件技术支持, IBM

Kanako Harada 是一位 IT 专业人员,拥有在几个国际组织的工作经验。她的多语言能力有助于她参与多文化团队的工作。此前,她作为项目经理管理过许多集成项目,她还是一位经验丰富的软件分析师,主要从事实时财务智能信息交付领域。Kanako Harada 目前是一位 IBM COGNOS 产品客户支持分析师,主要从事商业智能和企业规划领域。



Hatif Samgita, 业务分析师 — Cognos 软件技术支持, IBM

Hatif Samgita 是一位 IT 专业人员,拥有在几个国际组织的工作经验。他的多语言能力有助于他参与多文化团队的工作。他感兴趣的领域是开源技术和 IT 安全。此前,他负责支持一些内容安全软件产品,比如电子邮件内容安全和 web 内容安全。Hatif Samgita 目前是一位 IBM COGNOS 产品客户支持分析师。



2011 年 4 月 25 日 (最初于 2010 年 12 月 17 日)

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

简介

目的

IBM Cognos BI 是一个商业智能工具,支持基于用户请求创建和分析公司级报告、记分卡和事件通知。

IBM Cognos BI 构建于一个基于单 web 的架构之上,支持所有级别的企业用户通过 web 浏览器创建报告并分析数据。结合基于角色的安全性,IBM Cognos BI 还提供动态报告功能。

基于角色的安全性是一种用户级安全性,主要关注用户的逻辑角色而不是个人身份。IBM Cognos 安全模型允许将用户作为角色和组的成员来进行管理。这些组和角色可用于一些安全性策略,比如针对 IBM Cognos 8 门户中的每个对象的访问权限。

图 1 所示,在传统电子表格报告中,需要为每个组合角色创建不同的报告,但 IBM Cognos 可以简化这个过程,这是因为一种报告格式可以为每个组和角色提供不同的视图。

图 1. 传统报告(左侧)和使用 IBM Cognos BI 的动态报告(右侧)比较
图 1. 传统报告(左侧)和使用 IBM Cognos BI 的动态报告(右侧)比较

动态报告有以下优点:

  • 共享企业级概念。
  • 通过针对多种用途共享相同的报告格式和数据源来减少报告创建和维护所需的工作量。
  • 增强数据完整性。
  • 简化数据源维护工作,因为报告并不存储数据本身。

本文已经从以下 developerWorks 文章翻译为英文:http://www.ibm.com/developerworks/jp/data/library/cognos/j_d-openldap02/index.html

适用性

本文中的技术通过 IBM Cognos 8.4.1 BI 和 IBM Cognos BI 版本 10 验证。

例外

本文中的示例使用相对较小的数据量。大量使用自定义过滤器可能会影响报告执行性能。


用于实现基于角色的安全性的 IBM Cognos BI 特性

要创建实现基于角色的安全性的动态报告,可使用以下 IBM Cognos BI 功能。

  1. 配置一个名称空间
    在本文中,我们将 OpenLDAP 设置为身份验证提供者,并将其配置为 IBM Cognos Configuration 中的一个名称空间。
  2. 针对组和角色的安全管理
    在 OpenLDAP 存储库中创建组和角色并在 IBM Cognos Administration 界面中分配权限和功能。
  3. 参数映射
    当两个项目之间需要关系映射时,这个特性主要用作一个查询表。在本例中,此功能用于映射 OpenLDAP 中的帐户名称和数据源中的员工代码。
  4. 查询过滤器
    这个过滤器适用于查询主题。在本例中,此功能用于基于登录用户过滤结果。
  5. 动态过滤
    此功能允许数据项表达式基于一个条件更改其显示值。本例中为当前用户的作业类型和/或角色。

样例案例

本节中的示例设计用于样例公司 “Great Outdoors Co., Ltd”。

这个样例的目的是展示用于业务和技术用途的产品特性和最佳实践。

下面,我们将使用我们的一个样例包 “Great Outdoors Warehouse” 展示如何根据基于角色的安全性创建动态报告(见图 2)

样例概览:

  1. OpenLDAP 用作目录服务器(兼容 LDAP V3)。
    • 员工(用户)名和部门存储在 OpenLDAP 存储库中。
    • 每个部门的帐户和组存储在 OpenLDAP 存储库中。
  2. 工资数据存储在报告数据源中。
  3. 对机密人力资源信息的访问受到保护。
  4. 有 6 位员工隶属于亚太地区人力资源部,其中两位高级执行官拥有对 HR 及其机密信息的完全访问权。
  5. 人力资源部的员工能访问除机密信息之外的本地 HR 信息,工资和奖金等机密信息受到保护,只允许高级执行官访问。
  6. 人力资源部之外的其他员工只能访问他们的个人 HR 信息。
图 2. 样例案例和本文使用的 IBM Cognos BI 特性概览
图 2. 样例案例和本文使用的 IBM Cognos BI 特性概览

实现基于角色的安全性的步骤

实现步骤

本节描述基于上一节提到的示例实现基于角色的安全性的步骤。下面是步骤概览:

  1. 将 OpenLDAP 条目映射为 IBM Cognos BI Session Parameters。
  2. 将 OpenLDAP 组和用户分配给 Cognos Namespace 组和角色。
  3. 在 Framework Manager 中创建 Parameter Maps。
  4. 在 Framework Manager 中定义 Conditional Query Filters。
  5. 在 Report Studio 中创建 Dynamic Reports

将 OpenLDAP 条目映射为 IBM Cognos BI Session Parameters

OpenLDAP 默认使用 “inetorgperson.schema” 作为其用户帐户的基础。此架构将 “departmentNumber”、“employeeNumber” 和其他条目作为用户帐户对象的属性(见图 3)

图 3. LDAP 浏览器:用户 Daichi Tanaka 的 OpenLDAP 条目
图 3. LDAP 浏览器:用户 Daichi Tanaka 的 OpenLDAP 条目

在本例中,我们创建匹配 “Great Outdoor Warehouse” 样例包的 OpenLDAP 条目。在 “Human Resources” 组下,我们为亚太地区的人力资源部员工创建 “Go Asia Pacific” 子组。这个子组的 “uniqueMember” 属性体现了这一点(见图 4)

图 4. LDAP 浏览器:“Human Resources GO Asia Pacific Group” 的成员
图 4. LDAP 浏览器:“Human Resources GO Asia Pacific Group” 的成员”

要将 OpenLDAP 条目用于 IBM Cognos 安全性,需要在 IBM Cognos Configuration 中设置 LDAP 参数映射。用户对象和组对象映射通过设置 LDAP Namespace 上的 “Account Mapping” 和 “Group Mapping” 实现,如图 5 所示。

在本例中,我们配置了 “LDAP_NS” Namespace。根据图 3 和图 4 中的信息(使用的 LDAP 属性),我们能以如下方式匹配属性:

图 5. Cognos 配置:名称空间配置
图 5. Cognos 配置:名称空间配置

还可以定义到 “Custom Properties” 字段的额外属性映射。图 6 显示 “departmentNumber” 和 “employeeNumber” 的自定义属性,它们在默认 LDAP 名称空间中没有对等的条目。

图 6. Cognos 配置:“departmentNumber” 和 “employeeNumber” 的自定义属性
图 6. Cognos 配置:“departmentNumber” 和 “employeeNumber” 的自定义属性

将 OpenLDAP 组和用户分配给 Cognos Namespace 组和角色

默认情况下,IBM Cognos 提供一个名为 “Cognos” 的默认名称空间,区中包含预定义组和角色。为简化安全管理任务,可以关联这些默认组和角色与 OpenLDAP 名称空间中的用户和组。

可以使用 “IBM Cognos Administration” 将 OpenLDAP 用户和组轻松添加到 Cognos 组和角色。可以在 “Security” 选项卡下的 “Users, Groups and Roles” 区域管理 OpenLDAP 和 Cognos 名称空间。

当您将 LDAP 组添加为 Cognos 名称空间中的角色和组的成员时,对应的 OpenLDAP 组的成员也将被添加为关联 Cognos 名称空间的组或角色的成员。

在本例中,我们将 “Human Resources: Go Asia Pacific” OpenLDAP 组添加到 Cognos 名称空间角色 “Consumers”(见图 7)

图 7. IBM Cognos 管理:将 OpenLDAP 组分配到一个 Cognos 名称空间角色
图 7. IBM Cognos 管理:将 OpenLDAP 组分配到一个 Cognos 名称空间角色

在 Framework Manager 中创建 Parameter Maps

Parameter Map 是一个 “键-值” 对集合,显示为一个两列表,看起来像一个查询表。要正常工作,Parameter Map 中的每个 “键-值” 对都应该有一个惟一键。Parameter Map 接受的数据中不能包含引号。

右键单击 “Project Viewer” 窗格中的 “Parameter Maps” 条目,通过上下文菜单创建 Parameter Map(见图 8)。

图 8. Framework Manager:在 Framework Manager 中创建 Parameter Map
图 8. Framework Manager:在 Framework Manager 中创建 Parameter Map

在 Parameter Map definition 窗口中(见图 9),可以通过单击 “New Key” 添加新键和键值。可以使用 “Edit” 和 “Delete” 按钮删除它。“Clear Map” 用于删除 Parameter Map 上的所有键和值。

可以通过 “Export File” 按钮将 “键-值” 对导出为 CSV 文件,文件编辑后,可以通过 “Import File” 按钮再次导入。

在本例中,我们创建了一个名为 “All_EmpKey” 的 Parameter Map。这些键(OpenLDAP 用户帐户)被映射到对应的 “Employee Key” 值(图 9)

图 9. Framework Manager:将 OpenLDAP 用户帐户映射到 “Employee Key” 的 Parameter Map Definition
图 9. Framework Manager:将 OpenLDAP 用户帐户映射到 “Employee Key” 的 Parameter Map Definition

在 Framework Manager 中定义条件查询过滤器

可以使用 Query Subject 过滤器限制对数据源的用户访问。要基于用户登录信息限制用户只能检索特定数据,可以在 Query Subject 过滤器中使用以下表达式。

[Business view].[Query Item]=#sq($ALL_EmpKey{$account.personalInfo.userName})#

例如,图 10 显示没有对这个 Query Subject 设置过滤器时,使用 “Test Sample” 按钮进行的 “Employee by position-department” 查询的结果。

图 10. Framework Manager:“Employee by position-department” Query Subject
图 10. Framework Manager:“Employee by position-department” Query Subject” Query Subject

为限制用户只能查询与他们的登录帐户相关的信息,我们定义了以下 Query Filter(图 11)

[Business view].[Employee by region].[Employee key]=#sq($ALL_EmpKey{$account.personalInfo.userName})#

图 11. Framework Manager:限制用户只能查询与他们的登录帐户相关的信息的过滤器定义
图 11. Framework Manager:限制用户只能查询与他们的登录帐户相关的信息的过滤器定义
EmployeeKey用户帐户用户姓名职位
4032ayamadaAkemi YamadaNon HR Staff

使用这个 Query Filter,这个宏将匹配用户登录信息(用作 “ALL_EmpKey” Parameter Map 中的键)并将其替换为它的值。这导致传递到查询定义的关联 Employee Key 值。如图 12 所示,Test 选项卡只显示当前登录用户 “ayamada” 的相关信息。这意味着 Query Filter 的结果是 [Employee key] =4032。

图 12. Framework Manager:帐户 ayamada 的查询结果
图 12. Framework Manager:帐户 ayamada 的查询结果

可以使用布尔表达式在单个 Query Filter 定义中定义多个条件。使用多个数据项定义一个过滤条件时,需要将 “if..then..else” 和 “case..” 表达式转换为 “and..or” 表达式,这是因为它们不能返回布尔结果。

在本例中,我们允许人力资源部员工检索他们所在国家的所有 HR 数据。其他部门的员工只能检索他们的个人 HR 数据。换句话说,我们设置了以下过滤器。

  1. 使用 Country_Code for HR 组
  2. 使用 EmpKey for NonHR 组

要实现这个场景,可以使用以下条件 Query Filter。

If (logon user’s group = nonHR then [employee key] = EmpKey 
Else [Country Code] = Country_Code
图 13. Framework Manager:“HR_Country” 的 Parameter Map
图 13. Framework Manager:“HR_Country” 的 Parameter Map

Parameter Map “HR_Country” 提供一个 HR 员工列表。登录帐户用作键,Country Code 用作对应的值(图 13、14)。这个 Parameter Map 中没有列示的登录帐户将被分配一个默认值 “non-HR”。使用这个 Parameter Map,可以使用以下 “and..or” 表达式作为 Filter Definition。

(#sq($HR_Country{$account.personalInfo.userName})#='nonHR' and [Business view].
[Employee by region].[Employee key]=#sq($ALL_EmpKey{$account.personalInfo.userName})#) or
(#sq($HR_Country{$account.personalInfo.userName})# <>nonHR' and [Business view].
[Employee by region].[Country code] = #sq($HR_Country{$account.personalInfo.userName})#)
图 14. Framework Manager:多个条件的 Filter Definition
图 14. Framework Manager:多个条件的 Filter Definition

登录的用户帐户不同,这个 Query Subject 的结果也不同,如图 15图 16 所示。当我们作为普通员工 “ayamada” 登录时,Query Subject 被 Yamada Akemi 的 EmpKey 过滤,只返回一条记录。但是,如果我们作为 HR 员工 “dtanaka” 登录,Query Subject 将被 Tanaka Daichi 的国家代码过滤,返回所有针对日本的记录。

EmployeeKey用户帐户用户名职位
4032ayamadaAkemi YamadaNon HR Staff
4960dtanakaDaichi TanakaHR Vice President
图 15. Framework Manager:登录帐户 ayamada 的查询结果
图 15. Framework Manager:登录帐户 ayamada 的查询结果
图 16. Framework Manager:登录帐户 dtanaka 的查询结果
图 16. Framework Manager:登录帐户 dtanaka 的查询结果

在 Report Studio 中创建动态报告

Report Studio 支持使用 Parameter Maps 和 Session Parameters 创建动态报告和查询。可以通过选择 “Project -> Session Parameters” 获取 Framework Manager 中的当前登录用户的可用 Session Parameters 列表(见图 17)

图 17. Framework Manager:Session Parameters
图 17. Framework Manager:Session Parameters

要创建动态 Data Items,我们将使用此前在 Framework Manager 中使用的相同宏语法创建动态 Query Subject 过滤器。

图 18 所示,我们可以在 Report Studio 中使用以下 Expression Definition 创建一个 Data Item,在一个报告上显示登录帐户信息:

#sq($account.personalInfo.userName)#

图 18. Report Studio:如何在 Report Studio 中使用登录信息
图 18. Report Studio:如何在 Report Studio 中使用登录信息

为确定这个 HR 员工是 “Executive” 还是 “Regular Staff” 成员,我们使用 Parameter Map “Position Code”,它查询对应登录帐户的职位码值。在本例中,我们使用 2000 作为这个 Parameter Map 的默认值(见图 19)

注意:执行官的职位码小于 2000。

图 19. Framework Manager:Parameter Map “PositionCode”
图 19. Framework Manager:Parameter Map “PositionCode”

要显示登录用户的职位,可以在引用 Parameter Map “Position Code” 的 Data Item Expression 中使用以下条件表达式(见图 20)

if (#$PositionCode{$account.personalInfo.userName}# < 2000) then ('Executive') else ('Regular Employee')

图 20. Report Studio:用于显示 “Position” 信息的条件表达式
图 20. Report Studio:用于显示 “Position” 信息的条件表达式

在本例中,我们允许所有 HR 员工检索关于他们的国家的所有 HR 信息。但我们也想将对工资和奖金等机密信息的访问权限制到执行官。

可以在 Data Item 中使用条件表达式屏蔽机密信息 — 使用特定字符替换机密信息。在本例中,我们使用 “*****” 屏蔽工资,避免非执行官用户查看。

为此,可以针对每个 Data Item 使用以下条件表达式(见图 21)

If ((#$PositionCode{$account.personalInfo.userName}#<2000) or (#$account.parameters.employeeNumber# = [Employee key])) then ('US$ ' + cast([Employee summary (query)].[Employee summary fact].[Salary], varchar(10))) else ('*****')

图 21. Report Studio:屏蔽机密的 “Salary” 信息
图 21. Report Studio:屏蔽机密的 “Salary” 信息

图 22、23 和 24 所示,这个报告中显示的结果将基于报告执行使用的用户帐户动态改变。例如,当一个非 HR 帐户(例如 “ayamada”)执行此报告时,结果只显示 Akemi Yamada 的 HR 信息。当一个 HR 员工(例如 “akato”)执行报告时,所有针对 Japan 的 HR 信息都会显示,只是工资信息被屏蔽了。当执行官帐户(例如 “dkato”)执行报告时,可以只显示工资信息。

图 22. Report Viewer:ayamada 的报告结果
图 22. Report Viewer:ayamada 的报告结果
图 23. Report Viewer:akato 的报告结果
图 23. Report Viewer:akato 的报告结果
图 24. Report Viewer:dtanaka 的报告结果
图 24. Report Viewer:dtanaka 的报告结果

附录 A:资源

  1. IBM Cognos 管理和安装指南
    http://publib.boulder.ibm.com/infocenter/c8bi/v8r4m0/index.jsp?topic=/com.ibm.swg.im.cognos.ug_cra.8.4.1.doc/ug_cra.html
  2. IBM Cognos Business Intelligence 安装和配置指南
    http://publib.boulder.ibm.com/infocenter/c8bi/v8r4m0/index.jsp?topic=/com.ibm.swg.im.cognos.inst_cr_winux.8.4.1.doc/inst_cr_winux.html
  3. Framework Manager 用户指南
    http://publib.boulder.ibm.com/infocenter/c8bi/v8r4m0/index.jsp?topic=/com.ibm.swg.im.cognos.ug_fm.8.4.1.doc/ug_fm.html
  4. 将多值 LDAP 属性用作会话参数
    http://www.ibm.com/developerworks/data/library/cognos/page120.html
  5. 针对 LDAP 配置 Framework Manager 行级安全性
    http://www.ibm.com/developerworks/data/library/cognos/page30.html
  6. OpenLDAP Software 2.4 管理员指南
    http://www.OpenLDAP.org/doc/admin24/OpenLDAP-Admin-Guide.pdf

参考资料

学习

获得产品和技术

讨论

  • 参与 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=650493
ArticleTitle=IBM Cognos 最佳实践: 基于角色的安全性动态报告
publish-date=04252011