Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este artículo le ayuda a resolver los problemas de permisos que se producen al mover la base de datos MSDB entre instancias diferentes.
Versión original del producto: Microsoft SQL Server
Número de KB original: 2000274
Síntomas
Considere el caso siguiente:
La base de datos msdb se mueve de una instancia a otra mediante el proceso de copia de seguridad y restauración o copiando los archivos de base de datos (mdf y ldf). A continuación, en el servidor de destino, un usuario que no forma parte del rol fijo Sysadmin en SQL Server intenta realizar una de las siguientes operaciones:
- Vea un trabajo en SQL Server Management Studio.
- Llame directamente a procedimientos almacenados relacionados con el Agente SQL (por ejemplo, xp_sqlagent_enum_jobs o sp_get_composite_job_info) mediante T-SQL.
En este escenario, el usuario recibirá un mensaje de error similar al siguiente:
Se ha producido una excepción al ejecutar una instrucción o lote Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)
Se denegó el permiso EXECUTE en el objeto "xp_sqlagent_enum_jobs", la base de datos "mssqlsystemresource", el esquema "sys". (Microsoft SQL Server, Error: 229)
Causa
Este problema se produce porque el certificado del Agente SQL es diferente en instancias diferentes.
Solución
Para resolver el problema, debe reemplazar el certificado en el patrón por el certificado de la base de datos msdb restaurada mediante el siguiente script en el servidor de destino:
use msdb
go
-- Backup the Agent certificate from the remote server to a file
BACKUP CERTIFICATE [##MS_AgentSigningCertificate##] TO FILE = 'MS_AgentSigningCertificate.remote_server.cer'
go
use master
go
-- re-create the agent certificate on master
-- Note: Because we are making these changes using a regular user and not as part of setup, the name
-- cannot include the ## token.
-- Creating a regular certificate in this case should be the equivalent as we only need it to derive a SID
CREATE CERTIFICATE [MS_AgentSigningCertificate.remote_server] FROM FILE = 'MS_AgentSigningCertificate.remote_server.cer'
go
-- Recreate the user mapped to the cert and grant the same permissions that the regular certificate needs.
CREATE USER [MS_AgentSigningCertificate.remote_server] FROM CERTIFICATE [MS_AgentSigningCertificate.remote_server]
go
GRANT EXECUTE TO [MS_AgentSigningCertificate.remote_server]
go
Nota:
En un escenario en el que los certificados de maestro y modelo son los mismos antes de ejecutar el script descrito en el artículo, la ejecución del script da como resultado el siguiente mensaje de error:
Mensaje 15232, nivel 16, estado 1, línea 7
Ya existe un certificado con el nombre "MS_AgentSigningCertificate.remote_server20009" o este certificado ya se ha agregado a la base de datos.
Si experimenta los síntomas descritos en el artículo incluso cuando los certificados son los mismos, póngase en contacto con los Servicios de soporte al cliente de Microsoft (CSS) para obtener más ayuda.