首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSAS中的慢速动态安全

SSAS中的慢速动态安全
EN

Stack Overflow用户
提问于 2017-03-20 21:53:11
回答 1查看 425关注 0票数 0

我们已经在我们的SSAS多维数据集中实现了动态安全性。我们使用的是SQL Server 2012。

存在以下层次结构的employee维度(不是父子维度)

代码语言:javascript
复制
Region
  Corporation
    Department
      Team
        Employee

我们有一个桥接表,在User表和Employee表之间定义了度量用户员工访问计数。

在Cube Dimension Employee上,在团队层次结构中,我们有以下允许集的MDX。

代码语言:javascript
复制
NONEMPTY 
    (
        [Employees].[Team].[All].Children,
        (
            StrToMember("[User].[Username].&["+coalesceempty(customdata(),username)+"]"), 
            [Measures].[User Employee Access Count] 
       )
    )

这是我发现的实现动态安全的默认方法,并且它是有效的。

问题是,当用户第一次访问多维数据集时,会有很长的延迟。Employee维度大约有40.000个成员,当我在查询中使用MDX时,MDX大约需要2-3秒才能运行,但是当用户第一次登录int时,如果她有权访问大多数或所有员工,第一个查询在完成之前会挂起90秒。

查询是什么并不重要,后续查询不会对性能造成影响。

我的猜测是,SSAS使用时间来构建内部安全结构。正如我所说的,当我在MDX查询中将上述MDX定义为一个集合,并在SSMS中运行它时,返回所有行需要2-3秒,即使用户有权访问40.000个维度成员,这还包括SSMS打印所有行的开销。

我已经尝试做了一个安全设置的组合。大多数用户只能访问一小部分员工,并且他们的延迟不到30秒,这很慢,但还可以接受,所以我们尝试为访问许多员工的用户创建一个组,并只创建一个拒绝成员集,但管理很麻烦,我们在第一次登录时仍然会遇到很高的延迟。

目前,我已经设置了一个作业,该作业遍历延迟最高的用户和最频繁的用户,并且每隔30分钟对多维数据集执行一次简单的MDX查询。这提高了动态安全性,并最大限度地减少了对用户的影响,但有时他们仍然需要等待第一次登录,理想情况下,我希望消除第一次查询延迟。

有没有人有在大维度和大量报表用户的环境中使用动态安全的经验?

EN

回答 1

Stack Overflow用户

发布于 2017-03-21 15:50:03

NonEmpty()是一种计算,当它涉及到很大的维度时,它的成本很高,并且你必须每次都运行,这是不好的。如何在维度表中存储集合列?像这样:

代码语言:javascript
复制
|=======================================================|
|UserID | UserName | EmployeesSet                       | 
|=======================================================|
| 1     | Adam B   | {[Employees].[Employees].&[Adamb]} |
|=======================================================|

然后,您可以将其作为键值导入,并使用StrToSet()来解析它,而不是运行NonEmpty()函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42905426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档