3

是否可以直接从 SQL Server 数据库加载“用户”和“访问”数据以与记录的实际 NT 用户进行比较并授予对我的 QlikView 文件的访问权限?

先感谢您。

4

1 回答 1

3

您的问题没有详细说明您的部署。我假设您正在使用 Qlikview Server、Qlikview Publisher,并且正在通过访问点访问文档。

为了使用户能够访问 Qlikview 应用程序,实际上需要两层安全性,并且您在默认 NTFS 模式(不是 DMS 模式)下运行。

  1. 文件权限
  2. 部分访问(行级安全性)

文件权限控制谁可以访问文档,部分访问控制每个用户可以在应用程序中看到的数据行。如果在 Qlikview 应用程序中实施了部分访问,并且用户没有被授予访问任何数据行的权限,他们将无法打开该应用程序。

部分访问不是强制性的,只有在您的安全模型需要对数据进行行级过滤时才需要。可以通过多种方式识别用户(AD 组或帐户 SID、Windows 登录、Windows AD 组名称等)。

所以简而言之,是的,您可以从 SQL Server 数据库(或其他数据源)加载安全数据,并使用它在您的 Qlikview 应用程序中应用安全性。QlikView Desktop 在线帮助中详细描述了部分访问功能。除了在部分访问数据中指定之外,唯一的其他考虑因素是确保所有适当的用户都具有访问文件的文件级权限。

---在澄清问题后添加了以下示例---

我通常首先将部分访问数据存储到 QVD 作为提取脚本的一部分:

OLEDB CONNECT TO [Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=YOURDB;Data Source=YOURDBSERVER;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False];

SectionAccessData:
LOAD
    Upper(Trim(NetworkUserID)) AS [NTNAME]
    //NTSID can be used in place of NTNAME if that's what you have stored in your data - but you should only use one or the other on a given row of data.  
    //,Upper(Trim(NTSID)) AS NTSID
    ,'USER' AS [ACCESS]
INLINE
    [
    NetworkUserID,SomethingToSecure
    DOMAIN\graeme.smith,SOMEDATATOFILTER
    ];


STORE SectionAccessData INTO SectionAccessData.qvd (qvd); 

然后,您可以将此数据加载到 QVW 中包含 UI 元素的 Section Access 表中:

SECTION ACCESS;
LOAD 
    [ACCESS]
    ,[NTNAME] 
    //,NTSID    
    //This field will be joined to the data model to restrict the data that the user can see. 
    ,[SomethingToSecure] AS [SomethingToSecure]
FROM
    $(QvdDirectory)\SectionAccess.qvd (qvd)
WHERE 
    (1=1);

SECTION APPLICATION;

您还需要在 UI 文档中修改以下文档属性:

文档属性 -> 打开选项卡

  1. 基于检查的部分访问的初始数据减少
  2. 严格排除检查
  3. 禁止二进制负载检查

如果您需要从 SQL 而不是内联表加载数据:

替换这个:

INLINE
[
NetworkUserID,SomethingToSecure
DOMAIN\graeme.smith,SOMEDATATOFILTER
];

有了这个:

SQL
SELECT  
MyNetworkUserIDField as NetworkUserID,
MySomethingToSecure as SomethingToSecure
FROM MyDB.dbo.MyTable;
于 2013-02-07T16:52:48.140 回答