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_PolicyEventProcessingLog
GO
Posteriormente debemos asociarlo, y lo hacemos con la siguiente consulta:
use msdb
go
EXEC sp_change_users_login ‘Auto_Fix’ , ‘##MS_PolicyEventProcessingLog
go
Después de esto funcionaría sin problema.
Esperamos que os haya servido,
Un saludo,
Equipo de base de datos