Skip to main content
Dynamics 365
  • 7 min read

Rolling with the System Administrator Role


I recently had a customer that wanted to run the Email Router as a user other than the System Administrator, offhand this seemed like an easy task.  The customer setup a new “Service User” and created a special “Service Role” that only had access to email related privileges.  Here is what the Implementation Guide says:

“If you did not specify an incoming e-mail server during Microsoft Dynamics CRM Server Setup, you must manually add the service account running the E-mail Router service to the PrivUserGroup security group. The PrivUserGroup is created during Microsoft Dynamics CRM Server Setup. For steps on how to add members to this group, see the “Troubleshooting” section later in this section.”

The trick was that they did not want to add this user to the PrivUserGroup, but instead wanted to have this user be relatively low privilege. Unfortunately, this was not straightforward so I had to do some digging.  First thing I did was to enable CRM tracing to work through all the failed “Privilege Checks”, adding the needed privilege to the service role on after another.  Unfortunately, after we added all the privileges we ended up with this error:

MessageProcessor fail to process message 'GetDecryptionKey' for 'email'.

[2009-06-04 00:33:21.0] Process: w3wp |Organization:6f10d233-a921-4185-a303-7ae7d2fcffbc |Thread:    9 |Category: Platform.Sdk |User: 25d8907f-f84a-de11-80a2-00110aa06f20 |Level: Error | CompositeSoapExtensionExceptionHandler.Handle

CrmSoapExtension detected CrmException:

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Microsoft.Crm.CrmException: Access is denied.

at Microsoft.Crm.ObjectModel.EmailService.GetDecryptionKey(ExecutionContext context)

This obviously required a little more digging.  That digging determined that CRM actually requires this user to have System Administrator role.  We granted the user this role and all was well.  But why was this required and is there anything we can learn from this?  The answer is “of course”, so read on. J

The System Administrator role in Microsoft Dynamics CRM is “special”, which is to be expected as it is basically the root security role that is granted to the setup user and users that have total access to things within the system.  Grant a user this role, make them a Deployment Administrator, and give them the corresponding required AD permissions and the user has total control over the CRM system.  But for today, I want to focus on the System Administrator Role and provide a bit of details behind it, some obvious and some not so obvious.

First, what is the System Administrator role?  Well obviously it is the role with the name System Administrator, but let’s be more specific.  If you create a new role via the Role Editor and grant it all privileges and call it “System Administrator” it will just be a role with a lot of privileges, but it won’t be the System Administrator role.  Here is why.  To CRM, the System Administrator Role is any role whose Role Template ID is that of the known System Administrator Role Template.  The GUID (627090FF-40A3-4053-8790-584EDC5BE201) of this template is well known and the template is created when you install CRM.

Now let’s take a look at the difference between the privileges of the role you created with “everything”.  We will use the following query:

— Set these to the two roles you are trying to compare

— This script is provided “AS IS” with no warranties, and confers no rights

DECLARE @SystemAdminRoleId uniqueidentifier

DECLARE @EverythingAdminRoleId uniqueidentifier

SET @SystemAdminRoleId = '66b89fc2-64b2-dc11-b25e-0003ffb8057d'

SET @EverythingAdminRoleId = '7057625a-4f6a-de11-bfd3-0003ff6e9d4e'

SELECT pb.privilegeid, pb.name FROM

       RolePrivileges rp JOIN PrivilegeBase pb ON rp.privilegeId = pb.privilegeid

       WHERE RoleId = @SystemAdminRoleId

       AND rp.PrivilegeId NOT IN (SELECT privilegeid FROM RolePrivileges WHERE Roleid = @EverythingAdminRoleId)

       ORDER BY [name]

Here is a list of privileges that are missing from the “everything” role:

Privilege IDPrivilege Name
25523F7C-7B1D-4844-8D2D-50767D6FAA94prvAppendAsyncOperation
78969DB5-5F70-4782-8299-F9258E4449C8prvAppendAttributeMap
26B5FDB2-1C17-478B-B448-EB66AFA82AD0prvAppendBusinessTask
CF716BA0-04E5-4438-AE87-0B8729CC5219prvAppendBusinessUnit
7D827946-147E-4292-A385-CCB34DC96525prvAppendQueue
84B19140-92BB-4341-BED1-2AC5E0B1DD38prvAppendToAttributeMap
FCD88D2B-7C3F-4FDA-8CF7-AD9AD27A4A32prvAppendToBusinessTask
2055B892-9068-4B43-854E-814671E53E8CprvAppendToEntityMap
E7753B34-17F3-400E-8396-88E24B8DC519prvAppendToOrganization
28C3A786-82A5-4FF6-8D54-4876DB4BA2F8prvAssignManager
B75A726F-E7AA-44AE-9282-F8776D913BBBprvBulkDelete
B22E57F2-9D2E-4FAB-9667-F351133AB035prvCreateApplicationFile
EBA97FF0-C3E4-47E2-A064-84ACD680092FprvCreateAsyncOperation
EE9C4874-14A6-4F47-B72D-F6AACC65C554prvCreateAttributeMap
AC1C8A42-C63B-4908-9988-F3CEB23CC50FprvCreateBusinessTask
30713160-C5ED-43C2-9B66-5923CD7236B1prvCreateCustomization
03FA6BCF-30F3-4C07-88C3-5B02E5713701prvCreateEntityMap
9E931DB8-975F-4DBD-BEFD-9244895D49B8prvCreateOrganization
01750F14-3320-49CC-A7D1-52502CDCD16DprvCreateOrgEmailTemplates
C81A03BB-4BFC-45A6-9184-E899CE26811AprvCreatePluginAssembly
592CB518-880D-492F-BD3C-3558413B8CEDprvCreatePluginType
303DEF1C-947C-4AF3-A63B-406A7ABC72DEprvCreateSdkMessage
998329E9-5CE5-4538-99B1-983191899A8BprvCreateSdkMessageProcessingStep
65171D1B-1581-4FBB-96A3-95D14B5723CBprvCreateSdkMessageProcessingStepImage
1BD35330-06E3-4495-8C8D-BAABF5F0208AprvCreateSdkMessageProcessingStepSecureConfig
9BAEF8E0-76F8-42AA-8D48-DA0582A0D7E7prvCreateWebWizard
FC0435ED-332A-459C-B1DD-4D037A560E94prvCreateWizardAccessPrivilege
DC2393EA-4536-4DA0-8BD3-A02DF9CDB3E6prvCreateWizardPage
60540CB9-61E0-49F4-BEDA-65E65F26CC3CprvDebug
2CB0B47F-0BC8-44B6-9D62-838B31CA44B8prvDeleteApplicationFile
D0F7B7C2-8891-400D-B6EC-848603001D0CprvDeleteAttributeMap
B43C0E6E-0CF2-4D2F-BDEB-0E3FCB663690prvDeleteBusinessTask
648BE51F-6EB2-4660-A564-A5FB555406A0prvDeleteBusinessUnit
10B166F6-2F94-42DE-8049-1462D23A0E62prvDeleteCustomization
24B20DD9-F2D7-4ECF-865D-F4CBF82C1A92prvDeleteEntityMap
9A48030C-0AA6-434E-8DE5-C8EAB10D7E8AprvDeleteOrganization
3FA24EFF-E413-4224-8CF2-BD29193F8ADFprvDeletePluginAssembly
5E1C5422-9A12-4D3E-9960-51A812A005E2prvDeletePluginType
8F9B0745-2842-45B6-A306-EAB47F138C7AprvDeleteSdkMessage
25CA2AFD-E85D-4A14-BB81-C368CD59BF5BprvDeleteSdkMessageProcessingStep
5EBF516C-E769-47DF-AD46-458B4B23603FprvDeleteSdkMessageProcessingStepImage
E63E21E5-C2AF-4807-B5CA-78F257FC007FprvDeleteSdkMessageProcessingStepSecureConfig
A3AC3B6F-6D09-4230-9221-C8B9AB0ABF06prvDeleteTeam
820A33EB-A459-4B55-BA3E-4EC3F5B691BEprvDeleteUser
EEBF0DDC-D4F3-4F22-A19A-A158868D3FA6prvDeleteWebWizard
17A5FE9C-5981-48FB-81DB-F896BF113D15prvDeleteWizardAccessPrivilege
828BD698-5B7D-47E4-A53D-5551CE989A7AprvDeleteWizardPage
D48CF22F-F8C2-4E16-89EB-49F8281DE4EAprvOverrideCreatedOnCreatedBy
5A9F6284-E81F-4294-9C63-D68052189B87prvPublishDuplicateRule
AC3CC10E-F735-4F34-95E4-097EC2AB478BprvPublishOrgMailMergeTemplate
7497D08B-CB4C-49AE-A1F0-47F21CACA6B8prvPublishOrgReport
6C835796-0A87-4790-A6BA-E72651427EC1prvPublishRSReport
E499D375-C305-4A8B-8C5B-4539AC212F77prvReadBusinessTask
A629BCA1-FEFB-4B4C-A4E2-3401EFF833D4prvReadSdkMessageProcessingStepSecureConfig
E6672D30-ED9E-4A1D-847D-7B1D05CD12E2prvReparentTeam
B367742D-E25D-4223-8691-E055BCBE3D98prvShareAsyncOperation
B3A3672D-2B04-4D65-87D9-217EC86BC1D0prvWriteApplicationFile
F96E1B75-8A54-4EAC-823B-AE6F1CA465EFprvWriteAttributeMap
40066203-C76A-4A58-9A89-F9D7B0D1E08DprvWriteBusinessTask
F435A3D6-E4A2-4212-81D4-919DF326C95EprvWriteEntityMap
37009C66-2E53-49F0-B857-62252EAA6412prvWritePluginAssembly
C70843E8-D617-4873-9D05-8A8D4A68EE58prvWritePluginType
6EBC7C4C-FDE7-424C-842E-11651498A9B3prvWriteSdkMessage
072AEE35-581D-4488-85B1-AF09926FDA70prvWriteSdkMessageProcessingStep
11954A66-B7AD-4DD9-B845-225D1B4C9FFEprvWriteSdkMessageProcessingStepImage
51AA61B6-C2F7-4BD7-BE1E-5EA0F3AF463FprvWriteSdkMessageProcessingStepSecureConfig
AFA371AC-1D2C-4B43-8026-A2055683E2D0prvWriteWebWizard
32CAC4BD-93BA-4DB0-B3D8-7B2A96ADFF52prvWriteWizardAccessPrivilege
4E016DC5-719E-4F11-ABAA-3A131A3B18A2prvWriteWizardPage

As you can see, there are 69 missing privileges from your “everything” role.

Why is there a difference?  Well, this is because the CRM Role Editor UI does not allow you to set every privilege.

clip_image001

To get around this you should use the “Copy Role” feature to make an exact copy of the role.

a screenshot of a social media post

So what if you manually (via the platform) add all the missing privileges to your role?  Unfortunately for some scenarios, this still isn’t good enough.  In CRM, there are some very specialized messages like GetDecryptionKey that actually have a check to see if the user has the System Administrator role:

if (service.IsSystemAdministratorRole(guid, context))
{
     flag = true;
     break;
}

Here is a breakdown of what worked and what did not:

TestResult
Add ascentiumtest\routerService to PrivUserGroupPASS
Remove ascentiumtest\routerService from PrivUserGroupFAIL
Add CRM role of “System Administrator” to ascentiumtest\routerServicePASS
Remove “System Administrator” Role and add “Copy of System Administrator” Role to ascentiumtest\routerServiceFAIL
Add ascentiumtest\routerService back to PrivUserGroup with “Copy of System Administrator RolePASS

This message is used by the Email Router Service and as such, the account that the email router is running as must have the System Administrator role.  Unfortunately, there is no supported way around this, as even making a “copy” of the System Administrator role via the UI does not yield the desired results as the Template ID of the copied role is NULL.  You also can’t set the Role Template ID in a supported manner either as this attribute is marked as not valid for CREATE or UPDATE. The only other operation I could find that appears to require the System Administrator role is registering your CRM installation.

Get started with Dynamics 365

Drive more efficiency, reduce costs, and create a hyperconnected business that links people, data, and processes across your organization—enabling every team to quickly adapt and innovate.