# 安全

QlikView 中的安全机制可以通过两种不同的方式进行设置：它可以建立在 QlikView 文档脚本内，或者可以通过使用 QlikView Publisher 设置。

## 身份验证和授权

身份验证是验证某人声称身份的过程。QlikView 可以让 Windows 操作系统执行验证身份，或者提示需要用户 ID 和密码（不同于 Windows 用户 ID 和密码），或者使用简单的身份验证方法即 QlikView 许可证密匙。

授权是一旦该用户经过鉴定便允许使用资源。QlikView 可以让 Windows 操作系统执行授权或自己执行授权。如果是后者，安全性表格必须建立在脚本内。

## 安全性使用 QlikView Publisher

如果设置 QlikView Publisher 处理安全性，则每个 QlikView 文件将拆分为数个文件，每个文件都包含与相关用户或用户组的相关数据。这些文件在正确的 OS 安全性设置下将被存储于文件夹内，即 QlikView 让操作系统处理身份验证和授权。

然而，文件自己不会在内部建立安全性，所以对下载文件没有保护。

文件的大小通常是小的，因为单个文件将被拆分为数个并且用户仅用他们自己的数据打开文件。然而，这也意味着 QlikView 服务器可能比所有数据保存在一个文件中要使用更多内存，因为包含相同数据的数个文件有时会被加载。

如需更多了解，请查看 QlikView Publisher 文档。

## 在 QlikView 脚本中安全使用区域权限

如果设置 QlikView 脚本中的区域权限处理安全性，那么单个文件可以设置为数个用户或用户组保留数据。QlikView 将为身份验证和授权以及动态减少数据使用区域权限中的信息，以便用户仅可查看自己的数据。

安全性由文件自己建立在其内部，所以下载的文件也在一定程度上受到保护。然而，如果安全性要求高，则文件下载和脱机使用应该受保护。文件应该仅由 QlikView Server 服务器发布。

既然所有数据都保存在一个文件中，那么这个文件的大小可能会非常大。

可让 QlikView 文档在脱机模式下不显示。要让脱机用户文档不显示，可使用 QMC 在用户文档的文档信息部分添加以下属性：

* 名称： 不显示
* 值：True

以下信息是关于在 QlikView 脚本中安全使用区域权限的方法。

## 脚本中的区域

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

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

```

			Section Access;
			AuthorizationTable:
			Load ACCESS,  USERID,   REGION From ...;
   
			Section Application;
			Load ... From ...;
		
```

## 区域权限中的存取级别

存取 QlikView 文档可以为指定用户或用户组授权。在安全性表格内，用户可以指派到存取级别管理员或用户。如果未指派访问级别，则用户无法打开 QlikView 文档。

拥有管理员存取的人可以更改文档的任何内容。使用文档属性和工作表属性对话框中的 安全性页面，拥有管理员存取的人可以限制用户修改文档的可能性。拥有用户权限的人无法访问安全性页面。

信息注释管理员权限仅与本地文档相关！使用用户权限访问打开在服务器上的文档。

## 区域权限系统字段

访问级别被指派给一个或数个表格中的用户，并加载在区域权限内。这些表格可以包含数个不同的用户指定系统字段，通常包括用户 ID 和密码，该字段定义存取级别，ACCESS。所有区域权限系统字段将被用于深度验证或授权。以下描述的是全套区域权限系统字段：

无，全部或任何安全性字段组合可以载入区域权限。没有必要使用 USERID — 授权可以使用其他字段进行，如仅序列号。

Section Access 系统字段

| 字段 | 说明 |
| --- | --- |
| ACCESS | 定义相应用户拥有哪些访问权限的字段。 |
| USERID | 包含可接受用户 ID 的字段。QlikView 将提示需要用户 ID 并在该字段中与值相比较。这个用户 ID 与 Windows 用户 ID 不相同。 |
| USER.EMAIL | 当前不支持，在 QlikView 中将仅按通配符匹配。 |
| PASSWORD | 包含可接受密码的字段。QlikView 将提示需要密码并在该字段中与值相比较。这个密码与 Windows 密码不相同。 |
| SERIAL | 应包含与 QlikView 序列号相对应的数字或字符串 'QLIKVIEW' 的字段。<br>示例：4900 2394 7113 7304<br>QlikView 将检查用户序列号或字符串 'QLIKVIEW' 并将其与此字段中的值进行比较。 |
| NTNAME | 包含对应 Windows NT 域用户名或组名之字符串的字段。如果使用不同的身份验证系统，则它应包含已通过身份验证的用户的名称。<br>QlikView 将从 OS 获取登录信息并将之与字段中的值相比较。 |
| NTDOMAINSID | 该字段应包含与 Windows NT 域 SID 相对应的字符串。<br>示例：S-1-5-21-125976590-4672381061092489882<br>QlikView 将从 OS 获取登录信息并将之与<br>字段中的值相比较。 |
| NTSID | 应包含 Windows NT SID 的字段。<br>示例：S-15-21-125976590-467238106-1092489882-1378<br>QlikView 将从 OS 获取登录信息并将之与字段中的值相比较。 |
| OMIT | 包含应针对特定用户省略的字段。通配符可能会被使用，并且字段可能为空。一个温和的做法就是使用子字段。<br><br>信息注释不得对关键字段应用 OMIT，因为这将更改底层数据结构。这可能会产生逻辑岛和计算不一致性。 |

QlikView 会将 QlikView 序列号和字段 SERIAL、带NTNAME 的 Windows NT 用户名与组、Windows NT 域 SID 和 NTDOMAINSID 以及 Windows NT SID 和 NTSID。它会进一步提示用户 ID 和密码，并比较用户 ID 和密码以及字段 USERID 和 PASSWORD。

如查找到的用户 ID 组合， 密码和环境属性也在区域权限表格中能查找到，则该文档是与存取级别相对应打开的。如果无法找到，则 QlikView 会拒绝用户访问文档。如果用户 ID 及/或密码输入三次均错误，则必须重复执行整个登录过程。

由于相同内部逻辑是 QlikView 的特点也用于存取区域中，安全性字段可能放置于不同表格中。（因此系统管理员也可以将 QlikView 文档设置于安全性表格之外。在这种情况下，一个正确的序列号，密码等可以通过单击相应字段值来模拟）

在整个登录程序中，QlikView 会首先检查SERIAL, NTNAME, NTDOMAINSID 和 NTSID ，察看此信息是否足以授权用户访问文档。如果区域权限足够，则 QlikView 会直接打开文档，而不会提示输入用户 ID 和密码。

如果只有部分存取字段被加载，则使用了上述适当要求。

区域权限内 LOAD 或 SELECT 语句列出的全部字段均必须大写。数据库内任何包含小写字母的字段名都应使用 upper 函数全部转换为大写，如此方才会被 Load 或 Select 语句读取。

[Upper - 脚本和图表函数](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/StringFunctions/Upper.htm)

但是，最终用户打开 QlikView 文档时输入的用户 ID 和密码不区分大小写。

通配符 (\*) 被解释为字段中所有（列出的）值，即表格中的值列表。如果用于脚本存取部分加载的表格中的系统字段之一（USERID, PASSWORD, NTNAME 或 SERIAL），则星号将被视为此字段的所有（也包括未列出的）可能值。

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

信息注释如要在 inline 语句中生成访问表格，请使访问限制表格向导。

信息注释如果已启用了区域权限，那么无法使用此处列出的区域权限系统字段名称作为您的数据模型中的字段名称。

只有序列号被检查。特定的电脑拥有管理员访问权限。其他人只有用户访问权限。注意星号可以用于标记“任何序列数字”。

示例 1

| ACCESS | SERIAL |
| --- | --- |
| ADMIN | 4900 2394 7113 7304。 |
| USER | \* |

在管理员和服务器上的 QlikView 作为批量作业运行，拥有管理员访问权限。域中的其他人在输入作为用户 ID 和密码的“USER”后拥有用户访问权限。

示例 2

| ACCESS | SERIAL | NTDOMAINSID | USERID | PASSWORD |
| --- | --- | --- | --- | --- |
| ADMIN | \* | S-1-5-21-125976590-467238106-1092489882 | ADMIN | ADMIN |
| ADMIN | 4900 2394 7113 7304。 | \* | \* | \* |
| USER | \* | S-1-5-21-125976590-467238106-1092489882 | USER | USER |

## 混合环境

如果您计划在 QlikView 和 Qlik Cloud 中使用相同的授权表，需要注意以下几点：

• USERID 在 QlikView 和 Qlik Cloud 中具有不同的含义，如果使用，可能会导致安全问题。请改为使用 NTNAME 或如下所述将其与 SERIAL 组合。

• GROUP 以及以 ‘USER.’ 开头的字段（例如 'USER.NAME' 和 'USER.EMAIL' 等）是（或将是）Qlik Sense Enterprise SaaS 中的身份验证字段。如果在您的 Section Access 中使用这些字段，则在 Qlik Cloud 中可能拒绝访问。

• PASSWORD、NTSID 和 NTDOMAINSID 不能在 Qlik Cloud 中使用。访问将被拒绝，除非使用了通配符。

• SERIAL 无法用于在 Qlik Cloud 中检查许可证号。但是，如果该字段包含字符串 ‘QLIKCLOUD’ 或 'QLIKVIEW'，则可能授予访问权限。这意味着可以拥有如下所示的授权表，其中第 1 行将在 QlikView 中授予访问权限（但不在 Qlik Cloud 中），而第 2 行将在 Qlik Cloud 中授予访问权限（但不在 QlikView 中）。

| 线 | SERIAL | USERID | 注释 |
| --- | --- | --- | --- |
| 1 | 4600 0123 4567 8901 | \* | 授予访问 QlikView 中正确许可证编号的权限。 |
| 2 | QLIKCLOUD | John Doe | 向 Qlik Sense Enterprise SaaS 中的正确用户授予访问权限。 |

| 线 | SERIAL | USERID | 注释 |
| --- | --- | --- | --- |
| 1 | QLIKVIEW | \* | 授予访问 QlikView 的权限。 |
| 2 | QLIKCLOUD | John Doe | 向 Qlik Sense Enterprise SaaS 中的正确用户授予访问权限。 |

## QlikView 上受限制功能

文档属性: 安全页面和 工作表属性: 安全页面上的控件可用于禁止访问某些菜单项并禁止更改布局。如果这些设置被作为保护措施使用，那么文档用户作为 USER 登录是至关重要的。任何以管理员登录的用户可以随时更改安全性设置。

以用户权限打开文档的用户在属性对话框中没有安全性页面。

## 动态数据缩减

部分文档中的数据可以对基于区域权限登录的用户隐藏，QlikView 和 QlikView 以此支持该功能。

首先，可以使用系统字段OMIT隐藏字段（列）。

其次，可以通过将 区域权限 数据与真实数据链接来隐藏记录（行）：通过在 区域权限 和 应用程序部分 中使一个或多个字段具有公用名称，来控制要显示/排除的值的选择。用户登录 QlikView 后将复制区域权限中字段的选择至区域应用程序的任意字段中，并使用相同的字段名（字段名必须大写）。做好选择后，QlikView 将永久隐藏用户选择之外的所有数据。

若要执行此过程，必须选中 文档属性: 打开 页面上的 基于区域权限的初始数据缩减 选项。如果此项功能用于通过 QlikView 服务器之外的其他方法分配的文档，则必须选择文档属性中的同一页面的禁止二进制加载选项，以维持数据保护。

信息注释用于转换上述描述和字段中所有字段值的全部字段名必须大写，因为所有字段名和字段值在区域权限内会默认转换为大写。

`section access;` `LOAD * inline [` `ACCESS, USERID, REDUCTION, OMIT` `ADMIN, ADMIN, *,` `USER, A, 1` `USER, B, 2, NUM` `USER, C, 3, ALPHA` `];` `section application;` `T1:` `LOAD *,` `NUM AS REDUCTION;` `LOAD` `Chr( RecNo()+ord('A')-1) AS ALPHA,` `RecNo() AS NUM` `AUTOGENERATE 3;`

现在字段 REDUCTION （大写）同时存在于区域权限和区域应用程序中（所有字段值同样是大写）。通常这两个字段会完全不同并分隔开，但是如果基于区域访问权限的初始数据减少选项被选中，它们将链接并减少显示给用户的记录数量。

区域权限中的 OMIT 字段定义应该对用户隐藏的字段。

结果如下所示：

用户 A 可以查看所有字段，但仅在记录连接至 REDUCTION=1 的条件下。

用户 B 可以查看除去 NUM 之外的所有字段，但仅在记录连接至 REDUCTION=2 的条件下。

用户 C 可以查看除去 ALPHA 之外的所有字段，但仅在记录连接至 REDUCTION=3 的条件下。

## 继承访问限制

二进制加载会导致新 QlikView 文件受到继承访问限制。对此新文档拥有管理员权限的人可以通过添加新的权限区域来更改新文档的访问权限。拥有用户权限的人可以执行脚本并更改脚本，如此可以添加自己是数据至二进制加载文件。拥有用户权限的人无法更改访问权限。这样数据库管理员可以控制用户访问和二进制加载 QlikView 文档。

## 加密

QlikView 服务器与 QlikView Windows 客户端之间的通信是加密的。如果使用 AJAX 客户端，则通信不被加密。

此外，所有 QlikView 文档是随机的，这样信息对于查看器和调试器等是不可读的。

您还可以使用客户提供的密钥对加密 QVD 文件中的敏感数据，这使您能够控制谁可以访问您的数据。请参阅 [QVD 加密](https://help.qlik.com/en-US/qlikview/September2026/Subsystems/Server/Content/QV_Server/QlikView-Server/QVSRM_EncryptionCertificates.htm) （仅提供英文版本）。

[文档属性：安全性](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Document_Properties_Security.htm)

[文档属性：安全性](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Document_Properties_Security.htm)

[工作表属性：安全性](https://help.qlik.com/zh-CN/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Sheet%20Properties_Security.htm)