用 Section Access 管理数据安全
区域权限用于控制应用程序的安全。它基本上是数据加载脚本的一部分,您可以在其中添加一个安全表来定义谁可以查看什么。当用户打开应用程序时, Qlik Cloud 使用此信息将数据缩小到适当的范围,也就是说,应用程序中的一些数据根据用户的身份对用户隐藏。区域权限与应用程序中的数据紧密集成并且依赖它来控制访问。这种形式的动态数据减少可以表格行、列或二者的组合为目标。有关更多信息,请参阅在 Qlik 的信任和安全。
加载脚本中的部分
通过一个或数个安全性表格来管理数据访问控制,其加载方式与常规加载数据相同。也可将这些表格存储在标准数据库或电子表格中。在授权区域内给定了管理安全性表格的脚本语句,它在脚本内由语句 Section Access 发起。
区域权限中列出的所有字段名称和字段值始终转换为大写。因此,作为数据精简一部分的所有字段都必须转换为大写,以匹配区域权限语句中所述的内容,即使它们位于区域权限语句之外。您可以使用 Upper 函数将数据库内任何包含小写字母的字段名全部转换为大写,这样才能被 LOAD 或 SELECT 语句读取。
有关更多信息,请参阅Upper - 脚本和图表函数。
如果授权区域被定义在脚本内,则加载应用程序数据的脚本部分应被放置于其他区域,由语句 Section Application 发起。
示例:
请注意,在对加载脚本进行更改之后,必须始终重新加载数据才能使更改生效。
Section Access 系统字段
访问级别被指派给一个或数个安全表格中的用户,并加载在脚本的 Section Access 部分内。这些表格必须至少包含两个系统字段:ACCESS,其为定义访问级别以及 USERID 或 USER 的字段。EMAIL。其他可选的系统字段可以根据用例添加。以下描述的是全套 Section Access 系统字段。
ACCESS
定义相应用户拥有哪些访问权限。
存取 Qlik Sense 应用程序可以为指定用户授权。在安全性表格内,用户可以指派到访问级别 ADMIN 或 USER。具有 ADMIN 权限的用户拥有对于应用程序中所有数据的访问权限,除非受到安全性表格的限制。具有 USER 权限的用户仅能访问安全表中定义的数据。如果未指派有效访问级别,则用户无法打开应用程序。
USERID
包含与 Qlik Cloud 用户名对应的字符串。Qlik Cloud 将从 Idp 主题获取登录信息并将之与此字段中的值相比较。有关使用电子邮件地址验证用户身份的其他方法,请参阅 USER.EMAIL。对于多云环境,Idp 主题可以根据您的内部 Windows 身份映射。在使用 Qlik Account 时,主题不能根据内部 Windows 身份映射。 用户 Idp 主题可以在 管理 活动中心的用户部分查看。
通配符 (*) 被解释为所有用户,受安全表中指定的其他条件的限制。例如,在下面的安全表中,Qlik Sense 租户管理员用户可以看到列出的所有缩减值。
NTNAME
应包含与 Windows NT 域用户名或组名的 NetBIOS 版本相对应的字符串的字段。如果使用不同的身份验证系统,它应该包含经过身份验证的用户的名称。
Qlik Cloud 将从身份提供者的 subject 声明获取登录信息并将之与此字段中的值相比较。
USER.EMAIL
包含与用户电子邮件地址对应的字符串。Qlik Cloud 将从身份提供者获取登录信息并将之与此字段中的值相比较。
GROUP
包含与 Qlik Cloud 中的组对应的字符串。Qlik Cloud 将从身份提供者的 “groups” 声明获取信息并将之与此字段中的值相比较。
OMIT
包含将为此指定用户省略的字段名称。通配符可能会被使用,并且字段可能为空。
管理应用程序访问权限
具有 USERID AD\U DOMAIN\C 的用户将根本无法打开应用程序,因为该用户 ID 未列在安全表中。
区域权限,在其最简单的形式下,可以用来限制特定用户访问应用程序。用户通过排除被拒绝访问应用程序。换句话说,如果一个特定的用户电子邮件地址没有列在安全表中,他们将无法访问该应用程序。此规则的唯一例外是,如果为安全表中某一行的 USER.EMAIL 字段分配了通配符 (*)。在本例中,通配符意味着所有经过身份验证的用户都可以访问该应用程序。下面是一个包含用户 ID 列表的安全表示例:
具有 USER.EMAIL USER4@example.com 的用户将根本无法打开应用程序,因为该用户电子邮件地址未列在安全表中。
管理用户对应用程序中特定数据的访问权限
在授权用户访问 Qlik Sense 应用程序本身之后,动态数据减少会限制对该应用程序中数据表中的行和列的访问。
管理对于行界别数据的访问
通过在加载脚本的区域权限的安全性表格中添加数据减少列来限制对行级数据的访问。可通过将 Section Access 数据与真实数据进行链接来隐藏特定记录(行)。通过在脚本的 Section Access 和区域应用程序部分中选择一个或多个具有公共名称的减少字段来控制要显示/排除的数据的选择。用户登录后,Qlik Sense 将访问区域中字段的选择与应用程序区域中的任意字段进行匹配,并使用完全相同的字段名(字段名必须大写)。做好选择后,Qlik Sense 永久隐藏用户选择之外的所有数据。如果通配符 (*) 用作数据减少列中的字段值,则会将其解释为允许用户访问与安全性表格中所有所选减少字段相关的记录。
将区域权限中的缩减字段与数据模型 Qlik Sense 中的字段进行比较时,预期会出现以下行为:
如果数据模型中的字段值与区域权限中的缩减字段匹配,则应用程序将打开,显示与指定用户的匹配相关的数据。其他数据将被隐藏。
如果缩减字段值与数据模型中的任何值都不匹配,则应用程序将不会为普通用户打开。但是,对于标记为 ADMIN 的用户,它将不缩减地打开。
不建议在区域权限中使用多个缩减字段,因为它将允许除预期访问组合之外的其他访问组合。
数据减少列中的通配符 * 仅引用安全表中的所有值。如果在区域应用程序中存在安全性表格的减少列内不可用的值,则会将它们去除。
示例: 基于用户 ID 的行级别数据减少
在本例中,字段 REDUCTION(大写)现在同时存在于 Section Access 和区域应用程序中(所有字段值也是大写的)。通常这两个字段会不同并分隔开,但是如果使用 Section Access,则这些字段已链接并减少向用户显示的记录数。
结果将为:
- 用户 USER1@EXAMPLE.COM 可以查看所有字段,且当 REDUCTION = 1 或 REDUCTION =2时,其他用户才能查看这些记录。
- 用户 USER2@EXAMPLE.COM 可以查看所有字段,但仅限和 REDUCTION=1 相关的那些记录。
- 用户 USER3@EXAMPLE.COM 可以查看所有字段,但仅限和 REDUCTION=2 相关的那些记录。
- 用户 USER4@EXAMPLE.COM 可以查看所有字段,且当 REDUCTION = 1 或 REDUCTION =2时,其他用户才能查看这些记录。
管理对于行界别数据的访问
通过将 OMIT 系统字段添加到 Section Access 脚本的安全表中,限制对列级别数据的访问。下面的示例建立在上一个示例的基础上,其中行数据减少已经到位。
示例: 基于用户 ID 的列数据减少
Section Access 中的字段 OMIT 定义应当为用户隐藏的字段。
结果将为:
- 用户 USER1@example.com 可以查看所有字段,且只有当 REDUCTION 为 1、2 或 3 时其他用户才可以在此示例中查看这些记录。
- 用户 USER2@example.com 可以查看所有字段,但仅限和 REDUCTION=1 相关的那些记录。
- 用户 USER3@example.com 可以查看 NUM 之外的所有字段,可查看的记录仅限和 REDUCTION=2 相关的那些记录。
- 用户 USER4@example.com 可以查看 ALPHA 之外的所有字段,可查看的记录仅限和 REDUCTION=3 相关的那些记录。
管理用户组访问权限
Section Access 为您提供了通过组成员身份限制用户可见数据范围的选项。要使用用户组限制数据,请将 GROUP 字段名称添加到访问部分的安全表中,并为 GROUP 字段定义值。
示例: 基于用户组的数据减少
结果将为:
- 属于 ADMIN 的用户可以查看所有字段,且只有当 REDUCTION 为 1、2 或 3 时其他用户才可以在此示例中查看这些记录。
- 属于 A 组的用户可以查看所有字段中与 REDUCTION=1 相关联的数据。
- 属于 B 组的用户可以查看与 REDUCTION=2 相关联但不在 NUM 字段中的数据。
- 属于 C 组的用户可以查看与 REDUCTION=3 相关联但不在 ALPHA 字段中的数据。
- 属于 GROUP1 组的用户可以查看所有字段中与 REDUCTION=3 相关联的数据。
- 用户 AD_DOMAIN\DEV可以查看所有字段中的所有数据。
Qlik Cloud 将用户与 UserID 进行比较,并根据表中的组解析用户。如果用户属于允许访问的组,或者用户匹配,则他们可以访问应用程序。
在 Qlik Cloud 中重新加载数据
若要在 Qlik Cloud 中重新加载应用程序而不进行数据缩减,建议使用安全性表格中的 USER.EMAIL 系统字段。USER.EMAIL 字段的值应该是能够编辑和加载应用程序的用户的电子邮件地址。这适用于共享空间和托管空间中的应用程序。例如:
在本例中,具有电子邮件地址的用户 test@example.com 是管理员,可以重新加载应用程序。
如果您在使用组,则以下示例将同等地对 Qlik Sense 和 Qlik Cloud 生效:
您还可将安全表中的 USERID 映射至身份提供者的 subject claim,如以下示例中所示。建议将该配置用于从 Qlik Sense 迁移到 Qlik Cloud 并用于多云环境。有关将 USERID 映射至 subject claim 的更多信息,请参阅在多云环境中管理用户访问
在多云环境中管理用户访问
Qlik Sense 多云环境涉及多种用户身份验证机制。通常对于 Qlik Sense Enterprise on Windows,Section Access 安全性表格中的 USERID 由代理服务验证。在 Qlik Cloud 中,身份提供者扮演该身份验证角色。因此,为内部部署环境(如 Qlik Sense Enterprise on Windows)设置的 Section Access 将无法在云环境中工作。
当把 OIDC 或 SAML 身份提供者(Qlik IdP 或自定义 IdP)结合 Qlik Cloud 使用时,subject claim 用于在用户登录时识别用户。借助 Section Access,将安全性表格中 USERID 字段的值与 subject claim 的值进行比较。在设置您的租户时,确保 SAM 帐户名映射到您的身份提供者的 subject claim。因此,例如,若 SAM 帐户名称为 AD_DOMAIN\Dev,则将 subject claim 设置为 AD_DOMAIN\Dev。如果您希望查看 IdP 的 subject claim 的值,将 /api/v1/diagnose-claims 附加至浏览器中的租户 URL,例如 your-tenant.us.qlikcloud.com/api/v1/diagnose-claims。在 JSON 响应中,subject claim 名为 sub。
如果您无法使用 SAM 帐户名,有另一种方法来验证用户。由于电子邮件地址在不同的环境中往往保持不变,因此可以使用用户电子邮件字段而不是安全表中的用户 ID。以下是安全性表格的形式的示例:
ACCESS | USERID | USER.EMAIL | 注释 | COUNTRY |
---|---|---|---|---|
USER | ABC\JOE | * | Access-on-prem | 美国 |
USER | * | JOE.SMITH@EXAMPLE.COM | Access-in-cloud | 美国 |
USER | ABC\URSULA | * | Access-on-prem | 德国 |
USER | * | URSULA.SCHULTZ@EXAMPLE.COM | Access-in-cloud | 德国 |
USER | ABC\STEFAN | * | Access-on-prem | 瑞典 |
USER | * | STEFAN.SVENSSON@EXAMPLE.COM | Access-in-cloud | 瑞典 |
授权脚本:
请注意,每个用户有两条记录:一个用于内部访问,一个用于云访问。通配符确保只使用相关的身份验证字段。在本例中,COUNTRY 用作数据减少字段。
QlikView 授权字段
在向后兼容性上,Qlik Cloud 识别来自 QlikView 的授权字段。尽管 USERID 在 QlikView 和 Qlik Cloud 中有不同的解释,在 Qlik Cloud 中解释它的方式将和 Qlik Sense 中一样:它将与经过身份验证的用户的名称相匹配。
PASSWORD, NTSID 和 NTDOMAINSID
如果使用了字段 PASSWORD、NTSID 和 NTDOMAINSID 中的一个,并且其包含相关值,则会拒绝访问文档。如果字段包含通配符 (*),可授予访问权限,具体取决于授权表格中的其他字段。
SERIAL
如果使用了字段 SERIAL 并且其包含许可证号码,则 Section Access 行将拒绝访问文档。如果字段包含通配符 (*),可授予访问权限,具体取决于授权表格中的其他字段。
此外,在 Qlik Cloud 中该字段也可用于定义环境。这意味着如果字段包含字符串 ‘QLIKCLOUD’,可授予访问权限,具体取决于授权表格中的其他字段。
混合环境
如果计划在 QlikView 和 Qlik Cloud 二者中使用相同安全性表格,请注意:
• USERID 在 QlikView 和 Qlik Cloud 中具有不同的含义,并且如果使用,可能导致安全问题。请改为使用 NTNAME 或如下所述将其与 SERIAL 组合。
•GROUP 和字段以 ‘USER.’ 开头,诸如 'USER.NAME' 和 'USER.EMAIL',是(或者将是)Qlik Cloud 中的授权字段。如果在您的 Section Access 中使用这些字段,则在 Qlik Cloud 中可能拒绝访问。
•PASSWORD, NTSID 和 NTDOMAINSID 无法用在 Qlik Cloud 中。访问将被拒绝,除非使用了通配符。
•SERIAL 无法用于在 Qlik Cloud 中检查许可证号。但是,如果该字段包含字符串 ‘QLIKCLOUD’,则可能授予访问权限。这意味着可以有一个如下所示的安全性表格,其中第 1 行将在 QlikView(但不在 Qlik Cloud)中授予访问权限,而第 2 行将在 Qlik Cloud(但不在 QlikView)中授予访问权限。
折线 | SERIAL | USERID | 注释 |
---|---|---|---|
1 | 4600 0123 4567 8901 | * | 授予访问权限以修正 QlikView 中的许可证号。 |
2 | QLIKCLOUD | JOHN DOE | 授予访问权限以修正 Qlik Cloud 中的用户。 |
授权脚本:
使用 Section Access 以及 Insight Advisor Chat
使用 Section Access 的应用程序使用索引用户来确定 Insight Advisor Chat 从应用程序检索的信息量。索引用户应该是 Section Access 脚本中对应用程序具有最高访问级别的用户。然而,提供给最终用户的数据仍受 Section Access 限制的控制。
有关如何使用区域权限和 Insight Advisor Chat 的可视化演示,请参阅:
如果您在应用程序名称、字段名称或主项目名称中有敏感信息,则可以通过使应用程序使用可用于 Insight Advisor Chat 的 Section Access 来公开这些信息。查询的应用程序建议包括用户可以访问的空间中的应用程序。其中可能包括用户在应用程序的区域权限中无法访问的应用程序。但是,选择这些应用程序不会起任何作用。单击维度或度量以使用 Section Access 查看应用程序中的可用项目时,用户可能会看到他们无权访问的项目。但是,单击这些项目不会向用户提供任何数据。
默认情况下,应用程序所有者是索引用户。您可以在详细信息中更改索引用户。
执行以下操作:
在 Qlik Cloud 中,导航至应用程序。
单击应用程序上的 ,并选择详细信息。
在索引用户下,选择索引用户。
单击返回。
单击应用程序上的 并选择重新加载。
将 QVD 与区域权限一起使用
QVD 文件可以作为常规加载或优化加载读取。优化加载是指在加载过程中不进行数据转换,并且 WHERE 子句中没有筛选器。
将 QVD 与 Section Access 一起使用时,优化负载不起作用。如果要使用 QVD 文件将数据加载到区域权限,则必须展开 QVD 文件。扩展 QVD 文件的最简单方法是在加载数据时更改格式。
在以下示例中,由于不对数据进行格式化,因此不会扩展 QVD 文件。
示例: 没有数据格式的非工作示例(优化负载)
相反,例如,您可以使用 upper() 函数来格式化将扩展 QVD 文件的数据。
示例: 带数据格式设定的工作示例
您还可以将 Where 1=1 语句添加到 LOAD 语句中。
示例: 带数据格式设定的工作示例
使用 Section Access 的指导准则和技巧
下面是区域权限的一些重要的事实和有用的提示。
- 区域权限中列出的所有字段名称和字段值始终转换为大写。因此,作为数据精简一部分的所有字段都必须转换为大写,以匹配区域权限语句中所述的内容,即使它们位于区域权限语句之外。您可以使用 Upper 函数将数据库内任何包含小写字母的字段名全部转换为大写,这样才能被 LOAD 或 SELECT 语句读取。
有关更多信息,请参阅Upper - 脚本和图表函数。
- 您无法使用此处列出的 Section Access 系统字段名称作为您的数据模型中的字段名称。
- 必须先发布应用程序,然后才能应用 Section Access 控件。重新加载应用程序将不会应用任何新的或更改的 Section Access 脚本。
- 快照根据拍摄快照的用户的访问权限显示数据,然后可在故事中共享快照。但是,如果用户从故事回到可视化以查看应用程序中的实时数据,则会受到自身访问权限的限制。
- 如果您因为值可能会通过颜色配置暴露而使用区域权限或处理敏感数据,则不能将颜色分配至主维度值。
- 为避免暴露受限的数据,请在发布应用程序前先移除所有具有区域权限设置的附加文件。发布应用程序时,附加文件会包括在内。如果复制发布的应用程序,附加文件则会包括在副本中。但是,如果对附加数据文件应用了区域权限限制,则在复制文件时不会保留区域权限设置,因此,复制应用程序的用户将看不到附加文件中的所有数据。
- 通配符 (*) 被解释为表格中字段的所有(列出的)值。如果用于脚本访问区域加载的表格中的系统字段之一(USERID 或 GROUP),则星号将被视为此字段的所有(也包括未列出的)可能值。
- 安全性字段可置于不同表中。
- 当从 QVD 文件加载数据时,使用上限函数将减慢加载速度。