0

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

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

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

  1. 用户将使用 Windows 身份登录到报告管理器(IIS 上的集成身份验证已打开 - 完成)
  2. 捕获此身份以找出他们所属的 SSAS 角色 - 我想这将通过查询,似乎不会自动工作(如何做到这一点?)
  3. 用户在 SSRS(应用于 SSAS 级别的基于角色的安全性)中此角色的限制范围内工作,即如果维度 X 对用户不可用,他/她应该无法查询它。(这个怎么做?)

我已经参考了很多博客,甚至找到了一个 - http://www.sqlmag.com/Article/ArticleID/96763/sql_server_96763.html

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

任何研究过这种方法或对此有所了解的人请告诉我。

4

3 回答 3

3

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

于 2009-02-21T07:14:33.827 回答
2

您需要做的就是:

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

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

谢谢萨米尔

于 2009-03-03T21:41:36.187 回答
0

我没有在 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()

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

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

于 2009-02-21T18:34:28.683 回答