如何从SQL Server数据库加载NT用户以授予对Qlikview文件的访问权限?

时间:2013-02-06 23:07:59

标签: qlikview

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

提前谢谢。

1 个答案:

答案 0 :(得分:3)

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

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

  1. 文件权限
  2. 部分访问(行级安全性)
  3. 文件权限控制谁可以访问文档,而部分访问控制每个用户可以在应用程序中看到的数据行。如果已在Qlikview应用程序中实现了部分访问,并且未授予用户访问任何数据行的权限,则他们将无法打开该应用程序。

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

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

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

    我通常首先将部分访问数据存储到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); 
    

    然后,您可以将此数据加载到包含UI元素的QVW中的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. 禁止检查二进制负载
    4. 如果需要从SQL而不是内联表加载数据:

      替换它:

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

      有了这个:

      SQL
      SELECT  
      MyNetworkUserIDField as NetworkUserID,
      MySomethingToSecure as SomethingToSecure
      FROM MyDB.dbo.MyTable;