Vincular logins huérfanos en SQL Server

Hola,

Hoy os vamos a exponer como solucionar un problema que aparece con cierta frecuencia, el de los logins huérfanos. Nos ocurre que revisando el log SQL Server o bien al ejecutar un procedimiento después de una migración, nos encontramos con errores del tipo:

The activated proc ‘[dbo].[sp_syspolicy_events_reader]’ running on queue ‘msdb.dbo.syspolicy_event_queue’ output the following:  ‘Cannot execute as the database principal because the principal “##MS_PolicyEventProcessingLogin##” does not exist, this type of principal cannot be impersonated, or you do not have permission.’

Este error ocurre porque tenemos un login creado a nivel de servidor pero no está asociado en la base de datos con un usuario. En este caso se trata del login “##MS_PolicyEventProcessingLogin##”, que ejecuta el procedimiento “[dbo].[sp_syspolicy_events_reader]” en la base datos de sistema msdb.

¿Está asociado el login?

Lo primero que debemos hacer es comprobar si existe, y lo hacemos con:

USE msdb
GO
SELECT * FROM sys.database_principals WHERE [name] = ‘##MS_PolicyEventProcessingLogin##’
GO

Posteriormente debemos asociarlo, y lo hacemos con la siguiente consulta:

use msdb
go
EXEC sp_change_users_login ‘Auto_Fix’ , ‘##MS_PolicyEventProcessingLogin##’;
go

Después de esto funcionaría sin problema.

Esperamos que os haya servido,

Un saludo,

Equipo de base de datos