安全性
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 脚本中安全使用区域权限的方法。
脚本中的区域
通过一个或数个安全表来管理行级别访问,其加载方式与数据常规加载方式相同。这样就可以将这些表存储在标准数据库或电子表格中。管理安全性表格的脚本语句在授权区域内提供,它在脚本中由区域权限发起。
如果授权区域被定义在脚本内,则加载应用程序数据的脚本部分应被放置于其他区域,这是由区域应用程序发起的。
示例:
区域权限中的存取级别
存取 QlikView 文档可以为指定用户或用户组授权。在安全性表格内,用户可以指派到存取级别管理员或用户。如果未指派访问级别,则用户无法打开 QlikView 文档。
拥有管理员存取的人可以更改文档的任何内容。使用文档属性和工作表属性对话框中的 安全性页面,拥有管理员存取的人可以限制用户修改文档的可能性。拥有用户权限的人无法访问安全性页面。
区域权限系统字段
访问级别被指派给一个或数个表格中的用户,并加载在区域权限内。这些表格可以包含数个不同的用户指定系统字段,通常包括用户 ID 和密码,该字段定义存取级别,ACCESS。所有区域权限系统字段将被用于深度验证或授权。以下描述的是全套区域权限系统字段:
无,全部或任何安全性字段组合可以载入区域权限。因此没有必要使用 USERID - 授权可以使用其他字段,例如:仅序列号。
字段 | 描述 |
---|---|
ACCESS | 定义相应用户拥有哪些访问权限的字段。 |
USERID | 包含可接受用户 ID 的字段。QlikView 将提示需要用户 ID 并在该字段中与值相比较。这个用户 ID 与 Windows 用户 ID 不相同。 |
USER.EMAIL | 当前不支持,在 QlikView 中将只在通配符上匹配。 |
PASSWORD | 包含可接受密码的字段。QlikView 将提示需要密码并在该字段中与值相比较。这个密码与 Windows 密码不相同。 |
SERIAL | 包含对应 QlikView 序列号或字符串 'QLIKVIEW' 之数字的字段。 示例:4900 2394 7113 7304 QlikView 将检查用户序列号或字符串 'QLIKVIEW' 并将之与此字段中的值相比较。 |
NTNAME | 包含对应 Windows NT 域用户名或组名之字符串的字段。如果使用不同的身份验证系统,则该系统应包含经过身份验证的用户的名称。 QlikView 将从 OS 获取登录信息并将之与字段中的值相比较。 |
NTDOMAINSID | 包含对应 Windows NT 域 SID 之字符串的字段。 示例:S-1-5-21-125976590-4672381061092489882 QlikView 将从 OS 获取登录信息并将之与字段中的值相比较。 |
NTSID | 包含 Windows NT SID 的字段。 示例:S-15-21-125976590-467238106-1092489882-1378 QlikView 将从 OS 获取登录信息并将之与字段中的值相比较。 |
OMIT |
包含应针对特定用户省略的字段。通配符可能会被使用,并且字段可能为空。一个温和的做法就是使用子字段。 信息注释不得对关键字段应用 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 语句读取。
但是,最终用户打开 QlikView 文档时输入的用户 ID 和密码不区分大小写。
通配符 (*) 被解释为字段中所有(列出的)值,即表格中的值列表。如果在加载的脚本存取区域使用其中一个系统字段 (USERID,PASSWORD,NTNAME 或 SERIAL),则星号将被解释为该字段的所有(也包括未列出的)可能值。
示例 1:
只有序列号被检查。特定的电脑拥有管理员访问权限。其他人只有用户访问权限。注意星号可以用于标记“任何序列数字”。
ACCESS | SERIAL |
---|---|
ADMIN | 4900 2394 7113 7304 |
USER | * |
示例 2:
在管理员和服务器上的 QlikView 作为批量作业运行,拥有管理员访问权限。域中的其他人在输入作为用户 ID 和密码的“USER”后拥有用户访问权限。
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 Sense SaaS 中使用相同的授权表,则需要注意以下几点:
• USERID 在 QlikView 和 Qlik Sense SaaS 中有不同的含义,如果使用,可能会导致安全问题。请改用 NTNAME,或将其与 SERIAL 结合使用,如下所述。
• 以“USER.”开头的组和字段(如 “USER.NAME” 和 “USER.EMAIL”)是(或将是)Qlik Sense Enterprise SaaS中的身份验证字段。如果在分区访问中使用这些字段,则 Qlik Sense SaaS 中的访问可能被拒绝。
• PASSWORD、NTSID 和 NTDOMAINSID 无法在 Qlik Sense SaaS 中使用。除非使用通配符,否则访问将被拒绝。
• SERIAL 无法用于在 Qlik Sense SaaS 中检查许可证号。但是,如果此字段包含字符串 ‘QLIKCLOUD’ 或 'QLIKVIEW',则可能会授予访问权限。这意味着可以有一个如下所示的授权表,其中第 1 行将在 QlikView 中授予访问权限(但不在 Qlik Sense SaaS 中),第 2 行将在 Qlik Sense SaaS 中授予访问权限(但不在 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 可以查看除去空值外的所有字段,但仅在记录连接至 REDUCTION=2 的条件下。
用户 C 可以查看除去 ALPHA 外的所有字段,但仅在记录连接至 REDUCTION=3 的条件下。
继承访问限制
二进制加载会导致新 QlikView 文件受到继承访问限制。对此新文档拥有管理员权限的人可以通过添加新的权限区域来更改新文档的访问权限。拥有用户权限的人可以执行脚本并更改脚本,如此可以添加自己是数据至二进制加载文件。拥有用户权限的人无法更改访问权限。这样数据库管理员可以控制用户访问和二进制加载 QlikView 文档。
加密
QlikView 服务器与 QlikView Windows 客户端之间的通信是加密的。如果使用 AJAX 客户端,则通信不被加密。
此外,所有 QlikView 文档是随机的,这样信息对于查看器和调试器等是不可读的。
您还可以用客户提供的密钥对,将 QVD 文件中的敏感数据进行加密,这样您就可以控制谁可以访问您的数据。请参阅 QVD 加密 (仅提供英文版本)。