Sql server SSAS中的维度安全性&;SSR
我遇到了在SSAS中实现维度级别安全性的问题。这就是我所做的- 1.在SSAS中定义了一个角色,并在维度级别应用了安全性(取消选中我不希望此角色访问的多维数据集维度,并设置允许集和拒绝集)。 2.使用立方体浏览器进行测试,效果良好。 3.使用SSRS测试,没有变化,我仍然能够查询维度并得到我不想要的结果 问题-是否可以将我在多维数据集级别定义的安全性传播到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上的集成身份验证已打开-完成) 捕获此标
任何从事过这种方法的人或了解这种方法的人,请让我知道 我认为您需要查看报表服务器上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用户,这可能是所有安全问题的原因。我会正确设置它,然后可能再试一次。干杯