SSAS中的维度安全性SSRS

时间:2009-02-19 17:21:59

标签: sql-server sql-server-2005 reporting-services ssas reportingservices-2005

我遇到了在SSAS中维度级别实现安全性的问题。这是我做的 - 1.在维度级别定义SSAS和应用安全性中的角色(取消选中我不希望此角色访问的多维数据集维度并设置允许和拒绝的集合)。 2.使用Cube Browser测试,它工作正常。 3.使用SSRS测试,没有变化,我仍然能够查询尺寸和尺寸。得到我不想要的结果。

问题 - 是否可以将我在Cube级别定义的安全性传播到SSRS?我想相信是的。

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

  1. 用户将使用Windows身份登录到报表管理器(IIS上的集成身份验证已启用-done)
  2. 捕获此标识以找出它们所属的SSAS角色 - 我想这将是通过查询,似乎不会自动运行(如何执行此操作?)
  3. 用户在SSRS(SSAS级别应用的基于角色的安全性)的此角色限制范围内工作,即如果用户无法使用维度X,则他/她应该无法查询它。 (怎么做?)
  4. 我已经提到了不少博客,甚至找到了一个 - http://www.sqlmag.com/Article/ArticleID/96763/sql_server_96763.html

    但是这个似乎有更多关于如何在SSAS中设置它的信息,而不是如何在SSRS中使用它。

    任何参与此方法或对此有所了解的人请告诉我。

3 个答案:

答案 0 :(得分:3)

我认为您需要在报表服务器上查看SSRS中的数据源,并确保将其设置为使用已登录的用户窗口信誉进行身份验证后,它可能就是您要查找的内容。

答案 1 :(得分:2)

您需要做的就是:

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

数据源= LOCALHOST;初始目录= XXXXX;角色=角色名称

由于 萨米尔

答案 2 :(得分:0)

我在SSAS中没有这样做,但我已经在引擎中完成了。 Jeremiah Peschka有blog about row-based security setup,如果您要使用集成的Windows安全性执行此操作,则可以使用user_name()函数获取当前登录名。您将为每个维度使用查找表,每个维度行都有一行加上用户名。查询时,请加入维度安全性表,如下所示:

FROM dbo.Customers cs
INNER JOIN dbo.CustomersSecurity css ON cs.CustomerId = css.CustomerId AND css.UserName = User_Name()

这样,您的加入只会返回用户可以看到的客户的记录。

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