# 用 Section Access 管理数据安全

区域权限用于控制应用程序的安全。它基本上是数据加载脚本的一部分，您可以在其中添加一个安全表来定义谁可以查看什么。Qlik Sense 当用户打开应用程序时， 使用此信息将数据缩小到适当的范围，也就是说，应用程序中的一些数据根据用户的身份对用户隐藏。 区域权限与应用程序中的数据紧密集成并且依赖它来控制访问。这种形式的动态数据减少可以表格行、列或二者的组合为目标。有关详细信息，请参阅[在 Qlik 的信任和安全](https://www.qlik.com/us/trust)。

## 加载脚本中的部分

通过一个或数个安全性表格来管理数据访问控制，其加载方式与常规加载数据相同。也可将这些表格存储在标准数据库或电子表格中。在授权区域内给定了管理安全性表格的脚本语句，它在脚本内由语句 Section Access 发起。

如果授权区域被定义在脚本内，则加载应用程序数据的脚本部分应被放置于其他区域，由语句 Section Application 发起。

示例：

```
Section Access;
Load * INLINE [
    ACCESS,  USERID,                 REDUCTION
    USER,    AD_DOMAIN\ADMIN,        *
    USER,    AD_DOMAIN\A,            1
    USER,    AD_DOMAIN\B,            2
    USER,    AD_DOMAIN\C,            3
    ADMIN,   INTERNAL\SA_SCHEDULER,        
];
Section Application;
T1:
Load *,
NUM AS REDUCTION;
LOAD
Chr(RecNo()+ord('A')-1) AS ALPHA,
RecNo() AS NUM
AUTOGENERATE 3;
		
```

请注意，在对加载脚本进行更改之后，必须始终重新加载数据才能使更改生效。

### Section Access 系统字段

访问级别被指派给一个或数个安全表格中的用户，并加载在脚本的 Section Access 部分内。这些表格必须至少包含两个系统字段：ACCESS，其为定义访问级别以及 USERID 或 USER 的字段。EMAIL。其他可选的系统字段可以根据用例添加。以下描述的是全套 Section Access 系统字段。

#### ACCESS

定义相应用户拥有哪些访问权限。

存取 Qlik Sense 应用程序可以为指定用户授权。在安全性表格内，用户可以指派到访问级别 ADMIN 或 USER。具有 ADMIN 权限的用户拥有对于应用程序中所有数据的访问权限，除非受到安全性表格的限制。具有 USER 权限的用户仅能访问安全表中定义的数据。如果未指派有效访问级别，则用户无法打开应用程序。

如果 Section Access 用在重新加载场景中，INTERNAL\SA\_SCHEDULER，其为计划程序服务用户，需要 ADMIN 访问权限来执行重新加载。例如：

```
Section Access;
LOAD * inline [
    ACCESS,  USERID
    ADMIN,   INTERNAL\SA_SCHEDULER
];
```

如果您不希望使用 INTERNAL\SA\_SCHEDULER 帐户，在参阅[使用模拟重新加载数据](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/Security/manage-security-with-section-access.htm#Impersonation)了解备选方法。

如果在模板应用程序中的 On-demand 应用程序生成 (ODAG) 场景中使用了区域权限，则必须将 INTERNAL\SA\_API 用户作为区域权限表格中的 ADMIN 纳入。例如：

```
Section Access;
LOAD * inline [
    ACCESS,  USERID
    ADMIN,   INTERNAL\SA_API
];
```

#### USERID

包含与 Qlik Sense 域名和用户名对应的字符串。Qlik Sense 将从代理服务获取登录信息并将之与此字段中的值相比较。

通配符 (\*) 被解释为所有用户，受安全表中指定的其他条件的限制。例如，在下面的安全表中，Qlik Sense 租户管理员用户可以看到列出的所有缩减值。

Section Access; LOAD \* INLINE [ ACCESS, USERID, GROUP, REDUCTION ADMIN, \*, Qlik Sense Tenant Admins, \* USER, QLIK-POC\SOMEOTHERUSER1, \*, 1 USER, QLIK-POC\SOMEOTHERUSER2, \*, 2 ... ];

信息注释USERID 以及 NTNAME 二者都使用相同的身份验证信息，因此不必在安全表的同一行上同时检查这两者。这两个字段之间的区别是 NTNAME 还检查组。

#### NTNAME

信息注释NTNAME 是传统 QlikView 字段，如果 QlikView 未使用相同安全表，则建议使用 USERID。

应包含与 Windows NT 域用户名或组名相对应的字符串的字段。如果使用不同的身份验证系统，它应该包含经过身份验证的用户的名称。Qlik Sense 将从操作系统获取登录信息并将之与此字段中的值相比较。

#### GROUP

包含与 Qlik Sense 中的组对应的字符串。Qlik Sense 将针对此组解析由代理服务提供的用户。

#### SERIAL

信息注释SERIAL 是传统 QlikView 字段，并且如果您仅使用 Qlik Sense 则不会使用。

包含与平台对应的字符串。如果字段包含字符串 ‘QLIKSENSE’ 或通配符 ‘\*’，可授予访问权限，具体取决于安全表格中的其他字段。

信息注释如果字段 SERIAL 包含许可证号码，则 Section Access 行将拒绝访问文档。该设置仅在 QlikView 中有效。

#### OMIT

包含将为此指定用户省略的字段名称。通配符可能会被使用，并且字段可能为空。

信息注释建议您不要在关键字段上应用 OMIT。省略的关键字段在数据模型查看器中可见，但是内容不可用，可能会给用户造成混淆。此外，在可视化中使用的字段上应用 OMIT 可导致可视化对没有被省略字段的用户权限的用户不完整。

## 管理应用程序访问权限

区域权限，在其最简单的形式下，可以用来限制特定用户访问应用程序。用户通过排除被拒绝访问应用程序。换句话说，如果一个特定的用户 ID 没有列在安全表中，他们将无法访问该应用程序。此规则的唯一例外是，如果为安全表中某一行的 USERID 字段分配了通配符 (\*)。在本例中，通配符意味着所有经过身份验证的用户都可以访问该应用程序。下面是一个包含用户 ID 列表的安全表示例：

Section Access; LOAD \* inline [ ACCESS, USERID ADMIN, AD\_DOMAIN\ADMIN USER, AD\_DOMAIN\A USER, AD\_DOMAIN\B ]; Section Application;

## 管理用户对应用程序中特定数据的访问权限

在授权用户访问 Qlik Sense 应用程序本身之后，动态数据减少会限制对该应用程序中数据表中的行和列的访问。

### 管理对于行界别数据的访问

通过在加载脚本的区域权限的安全性表格中添加数据减少列来限制对行级数据的访问。可通过将 Section Access 数据与真实数据进行链接来隐藏特定记录（行）。通过在脚本的 Section Access 和区域应用程序部分中选择一个或多个具有公共名称的减少字段来控制要显示/排除的数据的选择。用户登录后，Qlik Sense 将访问区域中字段的选择与应用程序区域中的任意字段进行匹配，并使用完全相同的字段名（字段名必须大写）。做好选择后，Qlik Sense 永久隐藏用户选择之外的所有数据。如果通配符 (\*) 用作数据减少列中的字段值，则会将其解释为允许用户访问与安全性表格中所有所选减少字段相关的记录。

将区域权限中的缩减字段与数据模型 Qlik Sense 中的字段进行比较时，预期会出现以下行为：

* 如果数据模型中的字段值与区域权限中的缩减字段匹配，则应用程序将打开，显示与指定用户的匹配相关的数据。其他数据将被隐藏。

* 如果缩减字段值与数据模型中的任何值都不匹配，则应用程序将不会为普通用户打开。但是，对于标记为 ADMIN 的用户，它将不缩减地打开。

不建议在区域权限中使用多个缩减字段，因为它将允许除预期访问组合之外的其他访问组合。

信息注释

数据减少列中的通配符 \* 仅引用安全表中的所有值。如果在区域应用程序中存在安全性表格的减少列内不可用的值，则会将它们去除。

信息注释用于上述转换中的所有字段名和这些字段中所有字段值都必须大写，因为所有字段名和字段值在 Section Access 内会默认转换为大写。

信息注释默认情况下，如果您希望在 Qlik Management Console 任务中实现脚本的加载，则需要成为具有 ADMIN 访问权限的 INTERNAL\SA\_SCHEDULER 帐户用户。如果您不希望使用 INTERNAL\SA\_SCHEDULER 帐户，在参阅[使用模拟重新加载数据](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/Security/manage-security-with-section-access.htm#Impersonation)了解备选方法。

示例： 基于用户 ID 的行级别数据减少

Section Access; Authorization: LOAD \* inline [ ACCESS, USERID, REDUCTION ADMIN, AD\_DOMAIN\ADMIN, \* USER, AD\_DOMAIN\A, 1 USER, AD\_DOMAIN\B, 2 USER, AD\_DOMAIN\C, \* ADMIN, INTERNAL\SA\_SCHEDULER, \* ]; Section Application; T1: LOAD \*, NUM AS REDUCTION; LOAD RecNo() AS NUM AUTOGENERATE 3;

在本例中，字段 REDUCTION（大写）现在同时存在于 Section Access 和区域应用程序中（所有字段值也是大写的）。通常这两个字段会不同并分隔开，但是如果使用 Section Access，则这些字段已链接并减少向用户显示的记录数。

结果将为：

* 用户 ADMIN 可以查看所有字段，且当 REDUCTION = 1 或 REDUCTION =2时，其他用户才能查看这些记录。
* 用户 A 可以查看所有字段，但仅限和 REDUCTION=1 相关的那些记录。
* 用户 B 可以查看所有字段，但仅限和 REDUCTION=2 相关的那些记录。
* 用户 C 可以查看所有字段，且当 REDUCTION = 1 或 REDUCTION =2时，其他用户才能查看这些记录。

### 管理对于行界别数据的访问

通过将 OMIT 系统字段添加到 Section Access 脚本的安全表中，限制对列级别数据的访问。下面的示例建立在上一个示例的基础上，其中行数据减少已经到位。

示例： 基于用户 ID 的列数据减少

Section Access; LOAD \* inline [ ACCESS, USERID, REDUCTION, OMIT ADMIN, AD\_DOMAIN\ADMIN, \*, USER, AD\_DOMAIN\A, 1, USER, AD\_DOMAIN\B, 2, NUM USER, AD\_DOMAIN\C, 3, ALPHA ADMIN, INTERNAL\SA\_SCHEDULER, \*, ]; Section Application; T1: LOAD \*, NUM AS REDUCTION; LOAD Chr( RecNo()+ord('A')-1) AS ALPHA, RecNo() AS NUM AUTOGENERATE 3;

Section Access 中的字段 OMIT 定义应当为用户隐藏的字段。

结果将为：

* 用户 ADMIN 可以查看所有字段，且只有当 REDUCTION 为 1、2 或 3 时其他用户才可以在此示例中查看这些记录。
* 用户 A 可以查看所有字段，但仅限和 REDUCTION=1 相关的那些记录。
* 用户 B 可以查看 NUM 之外的所有字段，可查看的记录仅限和 REDUCTION=2 相关的那些记录。
* 用户 C 可以查看 ALPHA 之外的所有字段，可查看的记录仅限和 REDUCTION=3 相关的那些记录。

信息注释一些可视化具有必须满足的最低数据要求，以便进行渲染。因此，当从用户的数据视图中省略列级字段时，可能会显示“未完成的可视化”。

### 管理用户组访问权限

Section Access 为您提供了通过组成员身份限制用户可见数据范围的选项。要使用用户组限制数据，请将 GROUP 字段名称添加到访问部分的安全表中，并为 GROUP 字段定义值。

示例： 基于用户组的数据缩减

Section Access; LOAD \* inline [ ACCESS, USERID, GROUP, REDUCTION, OMIT USER, \*, ADMIN, \*, USER, \*, A, 1, USER, \*, B, 2, NUM USER, \*, C, 3, ALPHA USER, \*, GROUP1, 3, ADMIN, INTERNAL\SA\_SCHEDULER, \*, \*, ]; section application; T1: LOAD \*, NUM AS REDUCTION; LOAD Chr( RecNo()+ord('A')-1) AS ALPHA, RecNo() AS NUM AUTOGENERATE 3;

结果将为：

* 属于 ADMIN 的用户可以查看所有字段，且只有当 REDUCTION 为 1、2 或 3 时其他用户才可以在此示例中查看这些记录。
* 属于 A 组的用户可以查看所有字段中与 REDUCTION=1 相关联的数据。
* 属于 B 组的用户可以查看与 REDUCTION=2 相关联但不在 NUM 字段中的数据。
* 属于 C 组的用户可以查看与 REDUCTION=3 相关联但不在 ALPHA 字段中的数据。
* 属于 GROUP1 组的用户可以查看所有字段中与 REDUCTION=3 相关联的数据。

Qlik Sense 将用户与 UserID 进行比较，并根据表中的组解析用户。 如果用户属于允许访问的组，或者用户匹配，则他们可以访问应用程序。

## 使用模拟重新加载数据

默认情况下，内部系统帐户 SA\_SCHEDULER 用于运行重新加载任务。该帐户拥有升级的权限，并且在技术上可使用任何数据源。但是，QMC 中有一个设置，它使用模拟以应用程序所有者（而不是内部系统帐户）的权限运行重新加载任务。通过配置此设置，应用程序所有者而不是 SA\_SCHEDULER 将用于重新加载，这意味着您不会在 Section Access 表格中添加 SA\_SCHEDULER，而是添加应用程序所有者。在任务链中，应用程序可以有不同的所有者，他们对源的权限取决于每个所有者的访问权限。有关更多信息，请参阅[服务集群](https://help.qlik.com/en-US/sense-admin/November2025/Subsystems/DeployAdministerQSE/Content/Sense_DeployAdminister/QSEoW/Administer_QSEoW/Managing_QSEoW/service-cluster.htm) （仅提供英文版本）。

## 在多云环境中管理用户访问

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 | 用户电子邮件 | 注释 | 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 | 瑞典 |

授权脚本：

Section Access; LOAD \* INLINE [ ACCESS, USERID, USER.EMAIL, COUNTRY USER, ABC\Joe, \*, United States USER, \*, joe.smith@example.com, United States USER, ABC\Ursula, \*, Germany USER, \*, ursula.schultz@example.com, Germany USER, ABC\Stefan, \*, Sweden USER, \*, stefan.svensson@example.com, Sweden ];

请注意，每个用户有两条记录：一个用于内部访问，一个用于云访问。通配符确保只使用相关的身份验证字段。在本例中，COUNTRY 用作数据减少字段。

## 使用 Section Access 以及 Insight Advisor Chat

要使使用 Section Access 的应用在 Insight Advisor Chat 中可用，必须确保以下服务用户在 Section Access 脚本中具有管理员访问权限：

* INTERNAL/sa\_repository：这使 Section Access 脚本可与存储库服务一起用于控制用户访问。

* INTERNAL/sa\_scheduler：这可让应用程序使用 QMC 任务重新加载。

警告注释

如果您在应用程序名称、字段名称或主项目名称中有敏感信息，则可以通过使应用程序使用可用于 Insight Advisor Chat 的 Section Access 来公开这些信息。用于查询的应用程序建议包括用户有权访问的流中应用程序。 这些可能包括用户在应用的 Section Access 中无权访问的应用。但是，选择这些应用程序不会起任何作用。单击维度或度量以使用 Section Access 查看应用程序中的可用项目时，用户可能会看到他们无权访问的项目。但是，单击这些项目不会向用户提供任何数据。

例如：

Section Access; LOAD \* inline [ USERID ,ACCESS INTERNAL\sa\_repository ,ADMIN INTERNAL\sa\_scheduler ,ADMIN DOMAINNAME\user1 ,ADMIN DOMAINNAME\user2 ,USER DOMAINNAME\user3 ,USER ];

一旦这些用户进入 Section Access 脚本，您就可以使应用程序可用于 Insight Advisor Chat。重新加载应用程序后，该应用程序将在 Insight Advisor Chat 中可用。

## 将 QVD 与区域权限一起使用

QVD 文件可以作为常规加载或优化加载读取。优化加载是指在加载过程中不进行数据转换，并且 WHERE 子句中没有筛选器。

将 QVD 与 Section Access 一起使用时，优化负载不起作用。如果要使用 QVD 文件将数据加载到区域权限，则必须展开 QVD 文件。扩展 QVD 文件的最简单方法是在加载数据时更改格式。

在以下示例中，由于不对数据进行格式化，因此不会扩展 QVD 文件。

示例： 没有数据格式的非工作示例（优化负载）

section access; LOAD ACCESS, USERID, PASSWORD, [GROUP] FROM SAccess.qvd (qvd);

相反，例如，您可以使用 upper() 函数来格式化将扩展 QVD 文件的数据。

示例： 带数据格式设定的工作示例

section access; LOAD ACCESS, USERID, PASSWORD, upper([GROUP]) as [GROUP] FROM SAccess.qvd (qvd);

您还可以将 Where 1=1 语句添加到 LOAD 语句中。

示例： 带数据格式设定的工作示例

section access; LOAD ACCESS, USERID, PASSWORD, [GROUP] FROM SAccess.qvd (qvd) where 1=1;

## 使用 Section Access 的指导准则和技巧

下面是区域权限的一些重要的事实和有用的提示。

* 区域权限内 LOAD 或 SELECT 语句列出的全部字段名称和值均必须大写。使用 Upper 函数将数据库内任何包含小写字母的字段名全部转换为大写，这样才能被 LOAD 或 SELECT 语句读取。

  有关更多信息，请参阅[Upper - 脚本和图表功能](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/Upper.htm)。

* 您无法使用此处列出的 Section Access 系统字段名称作为您的数据模型中的字段名称。

* 必须先发布应用程序，然后才能应用 Section Access 控件。重新加载应用程序将不会应用任何新的或更改的 Section Access 脚本。

* 快照根据拍摄快照的用户的访问权限显示数据，然后可在故事中共享快照。但是，如果用户从故事回到可视化以查看应用程序中的实时数据，则会受到自身访问权限的限制。

* 如果您因为值可能会通过颜色配置暴露而使用区域权限或处理敏感数据，则不能将颜色分配至主维度值。

* 为避免暴露受限的数据，请在发布应用程序前先移除所有具有区域权限设置的附加文件。发布应用程序时，附加文件会包括在内。如果复制发布的应用程序，附加文件则会包括在副本中。但是，如果对附加数据文件应用了区域权限限制，则在复制文件时不会保留区域权限设置，因此，复制应用程序的用户将看不到附加文件中的所有数据。

* 通配符 (\*) 被解释为表格中字段的所有（列出的）值。如果用于脚本访问区域加载的表格中的系统字段之一（USERID 或 GROUP），则星号将被视为此字段的所有（也包括未列出的）可能值。

* 安全性字段可置于不同表中。

* 当从 QVD 文件加载数据时，使用上限函数将减慢加载速度。

* 如果自己设置 Section Access 锁定了应用程序，则可打开没有数据的应用程序，并在数据加载脚本中编辑访问区域。此操作要求您有编辑和重新加载数据加载脚本的访问权。

  有关更多信息，请参阅[打开应用程序但不加载数据](https://help.qlik.com/zh-CN/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Apps/open-app.htm#open-app-without-data)。

* 二进制加载会导致新 Qlik Sense 应用程序受到继承访问限制。