Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSAS中的维度安全性&;SSR_Sql Server_Sql Server 2005_Reporting Services_Ssas_Reportingservices 2005 - Fatal编程技术网

Sql server SSAS中的维度安全性&;SSR

Sql server SSAS中的维度安全性&;SSR,sql-server,sql-server-2005,reporting-services,ssas,reportingservices-2005,Sql Server,Sql Server 2005,Reporting Services,Ssas,Reportingservices 2005,我遇到了在SSAS中实现维度级别安全性的问题。这就是我所做的- 1.在SSAS中定义了一个角色,并在维度级别应用了安全性(取消选中我不希望此角色访问的多维数据集维度,并设置允许集和拒绝集)。 2.使用立方体浏览器进行测试,效果良好。 3.使用SSRS测试,没有变化,我仍然能够查询维度并得到我不想要的结果 问题-是否可以将我在多维数据集级别定义的安全性传播到SSR?我愿意相信是的 如果是,那么我需要的是- 用户将使用Windows标识登录到报表管理器(IIS上的集成身份验证已打开-完成) 捕获此标

我遇到了在SSAS中实现维度级别安全性的问题。这就是我所做的- 1.在SSAS中定义了一个角色,并在维度级别应用了安全性(取消选中我不希望此角色访问的多维数据集维度,并设置允许集和拒绝集)。 2.使用立方体浏览器进行测试,效果良好。 3.使用SSRS测试,没有变化,我仍然能够查询维度并得到我不想要的结果

问题-是否可以将我在多维数据集级别定义的安全性传播到SSR?我愿意相信是的

如果是,那么我需要的是-

  • 用户将使用Windows标识登录到报表管理器(IIS上的集成身份验证已打开-完成)
  • 捕获此标识以找出它们所属的SSAS角色-我猜这将通过查询实现,似乎不会自动工作(如何做到这一点?)
  • 用户在SSRS(应用于SSAS级别的基于角色的安全性)中的该角色的限制范围内工作,即,如果维度X对用户不可用,他/她应该无法查询该维度。(怎么做?)
  • 我参考了不少关于这方面的博客,甚至发现了一个-

    但这一条似乎有更多关于如何在SSA中设置它的信息,而不是如何在SSR中使用它


    任何从事过这种方法的人或了解这种方法的人,请让我知道

    我认为您需要查看报表服务器上SSRS中的数据源,并确保它设置为使用登录用户windows cred的身份验证后,它可能就是您要查找的数据源。

    我认为您需要查看报表服务器上SSRS中的数据源,并确保设置为使用登录用户windows cred的身份验证后,它可能就是您要查找的内容。

    我在SSAS中没有这样做,但我在引擎中这样做了。Jeremiah Peschka有一个,如果您打算使用集成的Windows安全性来实现这一点,那么您可以使用user_name()函数来获取当前登录名。您将为每个维度使用一个查找表,每个维度行有一行加上用户名。查询时,按如下方式连接到维度安全表:

    FROM dbo.Customers cs
    INNER JOIN dbo.CustomersSecurity css ON cs.CustomerId = css.CustomerId AND css.UserName = User_Name()
    
    这样,您的加入将只返回用户可以看到的客户记录


    缺点是,如果使用分区,引擎将无法构建一个良好的执行计划,仅根据用户看到的内容从正确的分区中提取正确的记录。例如,如果您以只能在佛罗里达州查看记录的用户身份登录,并且您的数据是按州划分的,那么这无关紧要——引擎仍将扫描所有分区,因为它无法在构建计划时预测用户的信息。

    我在SSAS中没有这样做,但我在引擎中已经这样做了。Jeremiah Peschka有一个,如果您打算使用集成的Windows安全性来实现这一点,那么您可以使用user_name()函数来获取当前登录名。您将为每个维度使用一个查找表,每个维度行有一行加上用户名。查询时,按如下方式连接到维度安全表:

    FROM dbo.Customers cs
    INNER JOIN dbo.CustomersSecurity css ON cs.CustomerId = css.CustomerId AND css.UserName = User_Name()
    
    这样,您的加入将只返回用户可以看到的客户记录


    缺点是,如果使用分区,引擎将无法构建一个良好的执行计划,仅根据用户看到的内容从正确的分区中提取正确的记录。例如,如果您以只能在佛罗里达州查看记录的用户身份登录,并且您的数据按州进行分区,则无所谓-引擎仍将扫描所有分区,因为它无法在生成计划时预测用户的信息。

    您需要做的是:

    在SSRS报告中的数据源中,指定在SSAS数据库中创建的角色名称,如下所示:

    FROM dbo.Customers cs
    INNER JOIN dbo.CustomersSecurity css ON cs.CustomerId = css.CustomerId AND css.UserName = User_Name()
    
    数据源=本地主机;初始目录=XXXXX;角色=角色名称

    谢谢
    Sameer

    您需要做的就是:

    在SSRS报告中的数据源中,指定在SSAS数据库中创建的角色名称,如下所示:

    FROM dbo.Customers cs
    INNER JOIN dbo.CustomersSecurity css ON cs.CustomerId = css.CustomerId AND css.UserName = User_Name()
    
    数据源=本地主机;初始目录=XXXXX;角色=角色名称

    谢谢
    Sameer

    感谢您的回复Brent!!目前我有一个维度未向用户1公开。我有设置用户名功能来获取windows标识。当我部署多维数据集并运行报表时,用户1仍然能够访问受限维度。还尝试了允许/拒绝设置不起作用的建议?感谢您的回复Brent!!目前我有一个维度未向用户1公开。我有设置用户名功能来获取windows标识。当我部署多维数据集并运行报表时,用户1仍然能够访问受限维度。还尝试了允许/拒绝设置不起作用的建议?谢谢各位,我意识到我的Reporting Services没有正确配置为使用windows用户,这可能是所有安全问题的原因。我会正确设置它,然后可能再试一次。干杯感谢各位,我意识到我的Reporting Services没有正确配置为使用windows用户,这可能是所有安全问题的原因。我会正确设置它,然后可能再试一次。干杯