性能问题对系统的影响可以是致命性的,一旦不重视,在不久的将来随时可能爆发,导致系统卡顿甚至无法操作,即时重启也无济于事;甚至极其难以发现。这里为自己记录一下过往的经验。系统一开始的设计,很大程度上决定了系统的生命周期,未来能使用多久,而不用花钱改造,好的设计也会大大减少维护成本。

  简单说下Dynamics CRM的权限,如果某个用户对某条记录具有读取权限,Dynamics CRM 会把当前用户的用户ID、部门ID、实体ID,权限层级作为一条记录记录在表SystemUserBusinessUnitEntityMap里面,因此,在创建或分派记录的时候,都会对这个表进行操作(增加或删除记录),包括更改业务部门。反过来,系统会先查询SystemUserBusinessUnitEntityMap表,以确定当前用户是否对某条记录具有读取权限。例如在视图中展示记录的时候,系统会默认先查询SystemUserBusinessUnitEntityMap表的记录以确认当前用户具有哪些记录的读取权限,如果这个表过大,则会影响查询性能。除了owner属性之外,Dynamics CRM还支持共享,也就是说在,owner不变的情况下,其他用户也能共享权限,共享之后,系统会在PrincipleObjecctAccess表记录某个用户对某实体具有什么权限;在我们查看记录的时候,系统还要运算一下,看某条记录有没有共享过给当前用户,这也是非常耗时的。

  假设安全角色A对incidentt实体具有业务部门级别(2/4)的读取权限,给用户张三分配了安全角色A,并且某一条记录record1的owner是张三,那么张三所在部门的同样具有安全角色A的其他用户也具有读取record1的权限,因此,SystemUserBusinessUnitEntityMap表里面会保存除张三之外的其他用户的记录;当我们对张三的业务部门进行更换时,之前与张三同一个部门的其他用户则应该不能在查看该记录record1,那么系统会重新计算权限,计算哪些用户将会从SystemUserBusinessUnitEntityMap表中移除,而这个计算过程是非常缓慢的。

  可以看出,影响SystemUserBusinessUnitEntityMap数据量的因素有:系统实体数量、用户数量、以及业务部门的层级设定(层级越少越好),还有就是安全角色中对某权限配置的权限层级。

1.系统实体数量。不难理解,实体越多,SystemUserBusinessUnitEntityMap表的记录则越多(经过调查发现,当实体的权限层级是0在SystemUserBusinessUnitEntityMap表中的记录数量与1/4时是一样的)。

2.用户数量。用户数量与系统实体数量一样。

3.业务部门的层级设定。层级越多,则减缓计算过程,影响记录分派的性能。

4.安全角色中对某权限配置的权限层级。一般来说权限层级越高,则在SystemUserBusinessUnitEntityMap表的记录越多,特别是3/4的深度级别;但组织级的权限不一样,也就是4/4的权限,该权限不会在SystemUserBusinessUnitEntityMap表存记录。

  在我们知道了这些特点之后,我们就知道该如何更好的做设计,已达到性能最优,从下面几点考虑:

1. 用户数量、实体数量、业务部门这些会随着业务的增长可能会增多,但是业务部门的层级我们可以尽量扁平化;

2. 权限层级尽量不要设置为3/4,因为3/4的权限层级会在SystemUserBusinessUnitEntityMap表增加大量记录;

3. 记录的owner尽量不要设置为团队,可想而知,过多记录设置为团队的时候,将在SystemUserBusinessUnitEntityMap表存在大量记录,严重影响系统性能。

4. 尽量避免记录的共享操作,系统虽然有这样的功能,我们也可以尽量不用或少用,如有特殊情况不得不用的时候才用。当然为了减少共享带来的性能问题,我们也可以设定一定的规则来减少共享表PrincipleObjecctAccess,比如说,在关闭SR之后,和业务人员确认是否没有必要共享了,这时是可以撤销共享权限的,或者说三个月之后就没有必要在共享了,要查看也只能特殊账号查询,或数据归档后的历史数据查询。

5.对于停用的用户,考虑清理其安全角色。

6.对于停用的业务部门,考虑是否可以删除。

在实施过程中,确实遇到不少影响系统性能的设计:

  1. 使用团队作为owner。
  2. 业务部门层级过多。
  3. 存在大量共享却没有撤销共享的机制。
  4. 快速查找视图过多查找字段。
  5. 工作台聚合视图过多,计算量大。
  6. 滥用活动实体,所有的活动实体的记录会同时在ActivityPointerointer实体中存在一条记录。操作活动实体是非常糟糕的。
  7. 查找字段所使用的视图使用了默认视图,该视图的数据范围过大。
  8. 存在大量的工作流,且后台任务程序有触发工作流的代码而且非常频繁,工作流应尽量使用后台任务处理程序代替。
  9. 代码所用的查询语句没有索引。
  10. 数据不做归档处理。
  11. 没有做负载均衡
  12. 没有CDN,没有缓存机制
  13. etc.

以上所述Dynamics CRM的安全模型性能问题并不是说产品本身的缺陷,任何一个系统都会存在性能问题,就看我们怎么利用产品的特性来做出做好的效果,避免一些导致系统性能差的设计出现而缩短系统生命周期或增加运维成本。

如有不准确,欢迎指正分享,谢谢!

Dynamics CRM 安全模型的性能问题的更多相关文章

  1. Microsoft Dynamics CRM 2015 服务器系统的性能维护,追踪, 也可以用到任务管理器哟...

    Microsoft Dynamics CRM 2015 的追踪是一个很有用的function,它能为我们的CRM调试,评估 提供有价值的信息:我们可以用window的性能监控工具来了解CRM的性能状态 ...

  2. Microsoft Dynamics CRM 2015 and Microsoft Dynamics CRM 2016 Performance and Scalability Documentation

    摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复285或者20181126可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me ...

  3. Microsoft Dynamics CRM 4.0导入组织(Import Organization)时间过长的原因总结

    952934    How to move the Microsoft Dynamics CRM 4.0 deployment http://support.microsoft.com/default ...

  4. 定制Dynamics CRM标准导出功能:不能导出指定列的值

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复239或者20161203可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  5. Dynamics CRM Performance Issue when CRM Forms Opening

    事情发生在Dynamics CRM 8.2.2版本,客户新升级到这个版本几个月的时间. 突然有一天,客户反映为什么我们打开CRM Form页面的时候loading的时间这么长呢?大概会需要5-15分钟 ...

  6. Dynamics CRM 2015-超大Solution导入问题

    我们在将比较大的solution导入CRM的时候,经常会遇到超时的问题,这是因为CRM的本身的优化限制导致的,那么如何解决呢? 官方已经有了解决方案了. 在浏览完两种解决方法之后,我们要知道的是: 1 ...

  7. Dynamics CRM导出数据到Excel

    原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM ...

  8. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  9. Step by Step 创建一个新的Dynamics CRM Organization

    原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...

  10. Step by step Dynamics CRM 2013安装

    原创地址:http://www.cnblogs.com/jfzhu/p/4008391.html 转载请注明出处   SQL Server可以与CRM装在同一台计算机上,也可安装在不同的计算机上.演示 ...

随机推荐

  1. 基于TDSQL-C对OOM问题进行优化

    OOM是实例使用内存超过实例规格内存上限导致进程被kill,实例存在秒级的不可用.MySQL的内存管理比较复杂,内存监控需要开启performance schema查询(默认关闭),会带来额外的内存消 ...

  2. RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

    错误原因:数据有的在cpu上有的在gpu上debug:断点到出错位置查看类型,或者打印`x.is_cuda`查看修改:将cpu上的数据通过`.to(device)`加载到gpu上

  3. FICO开发

    一.增强 1.FBL5N / 客户供应商行项目 对于客户供应商行项目报表展示增强字段: 方法① badi: FI_ITEMS_CH_DATA   更改输出内表数据即可 方法② BTE: 详见 http ...

  4. 使用oledb读写excel出现“操作必须使用一个可更新的查询”的解决办法

    使用oledb读写excel出现"操作必须使用一个可更新的查询"的解决办法 转自:http://www.cnblogs.com/Richinger/archive/2008/09/ ...

  5. 记:空格normalize-space处理方法

    xpath中定位元素文本含空格 含义:通过去掉前导和尾随空白并使用单个空格替换一系列空白字符,使空白标准化 通俗一点:使要定位的文本元素,去空格并规范化 //li [normalize-space(t ...

  6. 批量创建xshell会话

    import re import os import openpyxl from openpyxl import Workbook,workbook from concurrent.futures i ...

  7. harbor 修改主机地址

    harbor 修改主机地址 1 # cd /var/lib/wise2c/harbor/harbor 2 # docker-comppose down 3 # vi harbor.cfg 4 host ...

  8. web.py 中的分页设计

    1.定义分页类 class Pagination(object): ''' 分页类 参数: per_page:每页数量 total_data:总数目 cur_page:当前页. 用法:(flask,h ...

  9. HelloWorld (用记事本写,在dos窗口里运行)

    编写HelloWorld (用记事本写,在dos窗口里运行) 首先在任何一个盘中创建一个文件夹 在文件夹里新建一个HelloWorld.java文件,注意后缀名是.java(将文件拓展名打开) 打开这 ...

  10. 12组-Beta冲刺-2/5

    一.基本情况 队名:字节不跳动 组长博客:https://www.cnblogs.com/147258369k/p/15594989.html Github链接:https://github.com/ ...