最近被 Dynamics CRM 的权限配置问题恶心了一个星期,老是报“Access Is Denied”,几经波折,最后终于找到一个比较合适的解决方案,写个博客 mark 下来,方便以后查看。

首先,介绍一下权限设置的要求:

1.在根 Business Unit 下建立好 Security Role,并根据文档要求赋予 Sense Role 相关 Entity 及 CRM 系统的操作权限;

2.建立多个 Team,每个 Team 都有各自的权限配置,给 Team Role 赋予不同的 Security Role;

3.创建 User,但是不给 User Role 赋 Security Role,而是直接将 User 加到 Team 中,这样 User 也可以得到与 Team 相同的权限(但这个并不是User本身拥有的权限)。

然后,我来描述一下 Bug 是怎么产生的:

当我按照需求设置好 Security Role 的各种权限并添加完 Team 和 User 后,开始使用这些 User 在 CRM 系统上进行测试,当我测试完某个 Entity 的 BPF(Business Process Flow),返回到列表视图后,再次双击 Record 想进来再查看的时候,开始报错,如下图所示:

图1 Access Is Denied

      Acess Is Denied? 此时的我???Ok,这条 Record 进不去,那我换一条,双击,Access Is Denied。嗯???Ok,那我直接 New 一条 Record,Access Is Denied……

接下来,讲一下我艰难的排 BUG 过程:

既然发现了 Bug ,那么先来找找 Bug 是怎么被触发的。

Download Log File,从文件里可以得到以下的一段信息:

<Message>
SecLib::AccessCheckEx failed.
Returned hr = -2147187962,
ObjectID: f7014009-b409-e911-943a-00155d16b40a,
OwnerId: c062acbd-fcfc-e811-943a-00155d16b40a,
OwnerIdType: 8 and CallingUser: c062acbd-fcfc-e811-943a-00155d16b40a.
ObjectTypeCode: 2500,
objectBusinessUnitId: 9cfbf85c-3e0f-e911-8b87-e0aa182461d5,
AccessRights: WriteAccess
</Message>

第一眼看到 WriteAccess,我以为是 Security Role 没有设置好,检查了一下,设置没有问题,而且 Read 的权限也在正常运作,因为可以看到 Active View 里所有的 Record。接着在屏蔽了 JS 以及 Plugin 代码后,重新添加新的 system user 后,执行一步 BPF:OK,不出所料报了 Acess Is Denied 的错误,通过测试验证了这个 bug 跟 JS 以及 Plugin 代码无关,剩下就是要找出权限设置哪里出了差错。

现在,就讲一下这类bug要如何修复:

1.首先从下载下来的 log 中可以看到,ObjectTypeCode:2500,对 CRM 数据库新建查询,执行以下查询语句:

SELECT * from EntityView ORDER BY ObjectTypeCode

可以得到一个列表,并且可以在列表中查询到 ObjectTypeCode:2500 对应的 Entity Name 为 UserEntityUISettings

图2 数据库查询结果

2.在设置权限的时候我们可以看到这个 UserEntityUISettings 就在 Security Role -> Core Records -> User Entity UI Settings

图3 Security Role 设置

根据 log 上报缺少 Write 权限,那么我们在 Security Role 里面将整行权限全部点上(这里的设置也只能点一下,赋予了 User 级别的权限),然后使用 User 重新打开刚刚 Access Is Denied 的 Record:发现还是打不开,还是报了 Acess Is Denied ,还是报了 ObjectTypeCode:2500 的错误。

猜想:难道是 Team Role 的权限不能被带到 User Role 那边?于是在 System User 的 User Role 里勾上了这个 Security Role,再次使用 User 打开 Record,惊喜,所有的操作都可以正常执行,不再报 Acess Is Denied 的错误了(此刻内心简直思绪万千)。然而,bug 虽然解决了,但这个方式显然是不行的,因为如果在 User Role 里勾选上与 Team Role 一样的 Security Role 的话,那么通过将 User 加到 Team 里来获得权限这一点就已经失去了意义(除去 ownerid 为 Team 的情况),因为此时 User 自身已经拥有与 Team 相同的权限。

为了符合通过将 User 加入 Team 来获取权限这一需求,可以使用以下方法:

1 新建一个叫做 UI 的 Security Role,在这个 Security Role 只赋予它 User Entity UI Setttings 的权限;
2 其他 Security Role 不赋予 User Entity UI Settings 权限,并且这些 Security Role 只供 Team Role 使用;
3 每个 System User 的 User Role 都使用 UI Security Role,不必勾选其他 Security Role。

Note:

这里再提一个奇怪的修复方法,也算是一个隐藏 bug,就是当你在 system user 的 User Role 那边勾选了一个具有 UserEntityUISettings 的 Security Role,并使用这个 user 去访问了之前无权限访问的 Record 后,这个时候我们再将 User Role 上勾选的 Security Role 取消,再去访问那些 Record,你可以发现都变成有权限访问了……没错,它就是如此的神奇,可能是存在“缓存”,或者勾选了之后会在数据库某张权限表上加了一条代表某种关系的记录,取消勾选又不会移除该条关系,关于具体原因我并没有深入探究,也不建议通过这种方式来修复这个 bug,因为当你新加了 Entity 实体后又会再次出现同样的错误,因为你之前并没有访问过。

总结:

最后总结一下,当出现“Acess Is Denied”相关的错误时,可以通过下载 log 文件,根据文件提示的 ObjectTypeCode 代码及其他相关的日志信息,在数据库中查询出相对应的 Entity Name,再具体修复该 bug。

参考:https://nishantrana.me/2018/05/15/seclibaccesscheckex-failed-objecttypecode-2500-accessrights-writeaccess-error-on-user-entity-ui-settings-in-dynamics-365/

转载于:https://www.cnblogs.com/Sunny20181123/p/10283351.html

Dynamics CRM - 如何修复 Access Is Denied,ObjectTypeCode: 2500 的错误相关推荐

  1. 获取crm服务器信息失败,无法连接到 Dynamics CRM 服务器,因为凭据身份验证 - Dynamics 365 Sales | Microsoft Docs...

    无法连接到Microsoft Dynamics CRM,因为我们无法验证您的凭据 3/31/2021 本文内容 本文提供了一个解决方案,用于解决尝试使用 Dynamics CRM Online 组织为 ...

  2. Dynamics CRM: 权限问题之SecLib::AccessCheckEx2 failed

    今天我们接着上一次的来说, 如果没有看过上一节说的, 感兴趣的朋友可以看看: Dynamics CRM: 关于用户权限的故障排除_Stone-hdj的博客-CSDN博客 上一节我们说的权限问题, 基本 ...

  3. Dynamics CRM中跨域调用Web API 2

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

  4. Dynamics CRM 2013 installation

    原创地址:http://www.cnblogs.com/jfzhu/p/3445820.html 转载请注明出处 一 硬件要求 1. CRM Server 下表对硬件的要求是假定Microsoft S ...

  5. Microsoft Dynamics CRM 常用JS语法(已转成vs2017语法提示)

    背景 最近接触到Microsoft Dynamics CRM的开发.前端js是必不可少的部分,奈何没有一个语法提示,点不出来后续的语句. 在vscode上面搜索插件的时候发现,有一个大神写的插件htt ...

  6. 微软CRM5.0最新鲜的介绍-Microsoft Dynamics CRM 2011

    What's New in CRM 2011Microsoft Dynamics CRM 2011 includes some 500 new features, functions, and tec ...

  7. 为Dynamics CRM的Office附件注释定制个无需下载即可在线查看的功能

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复164或者20151021可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 上一篇博客: 为Dynamics ...

  8. Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式

    Microsoft Dynamics CRM server 2013  中业务规则,我的理解就是有点像C#的正则表达式, 如方某个字段,必须输入什么范围的数值,其它字符不能乱输入. 打开方式有二种: ...

  9. 为什么获取crm服务器信息失败,为 Outlook 配置 Microsoft Dynamics CRM 客户端时出现 与 Microsoft Dynamics CRM 服务器通信时出现问题 错误...

    症状 当您尝试配置 microsoft Office Outlook 的 Microsoft Dynamics CRM 客户端时,收到以下错误消息: 与 Microsoft Dynamics CRM ...

最新文章

  1. 张立贤:积跬步至千里,我与地学大数据的探索之旅 | 提升之路系列(五)
  2. python lib head,使用Python 2中的urllib2发出HTTP HEAD请求
  3. bzoj2002 [Hnoi2010]Bounce 弹飞绵羊【LCT】
  4. 带进度的文件复制 - 回复 冷风无泪 的问题
  5. CSS3选择器(二)--表单
  6. Struts2源码阅读(三)_DispatcherConfigurationProvider
  7. c语言1颗*到5颗*,刚学c语言,老师让用if编一个五个数字从大到小的排序,有那个大神能帮我,谢谢啦...
  8. python boxplot用法_Boxplot的介绍和使用
  9. linux安装运行redis
  10. fatal error LNK1169: one or more multiply defined symbols found
  11. 具体解说Android的图片下载框架UniversialImageLoader之磁盘缓存(一)
  12. 由最近Win10升级事故,回忆一次经历
  13. js 容易忽略的小知识点
  14. 教你4种压缩PDF让文档快速变小的方法
  15. Ubuntu 20.04 环境下 PyCharm 输入框不跟随光标问题
  16. 调用getParameterValues(String name)获取表单的信息
  17. riot修改服务器,如何修改riot拳头账号所在地区 riot账号改地区教程
  18. 测试内存条是否兼容软件,内存条不兼容有什么表现
  19. 部分商誉确认法和全部商誉确认法
  20. 描写计算机硬件的英语作文,介绍关于电脑的英语作文

热门文章

  1. strtotime()加半个小时_炖羊肉,必须加这4种料,缺一味就不香!很多人做错,难怪不好吃...
  2. mysql从字符串中取子字符串_如何从开始于MySQL中特定位置的字符串中提取子字符串?...
  3. ios取两个数之间的随机小数_如果取到小数区间内的任一数字?
  4. python标准库之socket_python标准库SocketServer学习
  5. java中所有的类都继承于_Java中所有的类都是通过直接或间接地继承( )类得到的...
  6. JSP页面中调用Spring Bean
  7. js模块化:require、import和export
  8. spring boot : Invalid Keystore format Error 解决方法
  9. cglib动态代理和JDK动态代理
  10. 多少人举报才封手机号_一个人赚多少钱,才敢回家过年?