Word of warning: This change is unsupported as it involves editing the CRM database directly. Use it at your own risk.
I encountered a weird error in CRM, that basically said that the user cannot be found. When I checked the event log, this appeared to be the underlying exception:
Exception type: CrmException Exception message: No Microsoft Dynamics CRM user exists with the specified domain name and user ID at Microsoft.Crm.Authentication.Claims.AuthenticationProvider.GetOrganizationId(ClaimsPrincipal principal) at Microsoft.Crm.Authentication.Claims.AuthenticationProvider.Authenticate(HttpApplication application) at Microsoft.Crm.Authentication.AuthenticationStep.Authenticate(HttpApplication application) at Microsoft.Crm.Authentication.AuthenticationPipeline.Authenticate(HttpApplication application) at Microsoft.Crm.Authentication.AuthenticationEngine.Execute(Object sender, EventArgs e) at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
But, the user was indeed there from before and all I did was reactivate a long dormant user. My initial suspicion was that this had something to do with AD. I ran the following query to check the SID of the user against the MSCRM_CONFIG database:
select c.FriendlyName,b.FullName,d.AuthInfo,b.DomainName from SystemUserOrganizations a inner join [ORG_MSCRM].dbo.SystemUser b on a.CrmUserId=b.SystemUserId inner join Organization c on c.Id=a.OrganizationId inner join SystemUserAuthentication d on d.UserId=a.UserId where b.DomainName='CONTOSO\powerm'
This gave me the SID of the user when the user was first created in CRM. I next ran this command in to get the current SID of the user:
wmic useraccount where name='powerm' get sid
The SID did not match to the one already in CRM, so I had to update it in the MSCRM_CONFIG database:
update d set d.AuthInfo='W:[SID OUTPUT FROM THE DOS COMMAND PROMPT]' from SystemUserOrganizations a inner join [ORG_MSCRM].dbo.SystemUser b on a.CrmUserId=b.SystemUserId inner join Organization c on c.Id=a.OrganizationId inner join SystemUserAuthentication d on d.UserId=a.UserId where b.DomainName='CONTOSO\powerm'
Once I updated this, the user was able to login with the same AD account.