No debe deshabilitar el usuario invitado en la base de datos msdb de SQL Server

En este artículo se describen varios problemas que pueden producirse al deshabilitar el usuario invitado en la base de datos msdb de SQL Server.

Versión del producto original: SQL Server
Número de KB original: 2539091

Síntomas cuando el usuario invitado está deshabilitado en la base de datos msdb

Para que algunas características de Microsoft SQL Server funcionen, el usuario invitado debe estar habilitado en la base de datos msdb. En este artículo se describen algunos problemas que puede experimentar si deshabilita el usuario invitado en la base de datos msdb. En el artículo también se proporciona información sobre cómo resolver esos problemas.

Cuando el usuario invitado está deshabilitado en la base de datos msdb, puede recibir MSSQLSERVER_916 de error cuando el usuario expande el nodo Bases de datos en Management Studio o cuando una aplicación de servidor intenta conectarse a SQL Server. Puede experimentar uno o varios de los siguientes síntomas en su entorno cuando se produce este problema.

Nota:

El texto del error puede variar ligeramente, en función del escenario. Sin embargo, la causa subyacente es esencialmente la misma. Esa causa no tiene privilegios suficientes en la base de datos msdb. Estos síntomas se producen cuando Explorador de objetos intenta mostrar el estado de administración basada en directivas de cada base de datos. Explorador de objetos usa los permisos del inicio de sesión actual para consultar esta información en la base de datos msdb, lo que provoca el error.

Síntoma 1

En SQL Server entornos de 2012 y versiones posteriores, cuando un usuario que no es miembro del rol fijo de servidor Sysadmin en SQL Server y que no ha concedido los permisos adecuados en msdb intenta expandir el nodo Bases de datos o cualquiera de las carpetas de ese nodo, recibe un mensaje de error similar al siguiente:

No se puede mostrar el cuadro de diálogo solicitado. INFORMACIÓN ADICIONAL: No se puede mostrar el cuadro de diálogo solicitado. (SqlMgmt) Se produjo una excepción al ejecutar una instrucción o lote de Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)

El nombre de usuario> de la entidad <de seguridad del servidor no puede acceder a la base de datos msdb en el contexto de seguridad actual. (Microsoft SQL Server, Error: 916)

Síntoma 2

En SQL Server 2008 y SQL Server entornos de 2008 R2, cuando un usuario que no es miembro del rol fijo de servidor Sysadmin en SQL Server y que no ha concedido los permisos adecuados en msdb intenta expandir el nodo Bases de datos o cualquiera de las carpetas de ese nodo, recibe un mensaje de error similar al siguiente:

No se pudieron recuperar los datos de esta solicitud. (Microsoft.SqlServer.Manager.Sdk.Sfc)
Información adicional:
Se produjo una excepción al ejecutar una instrucción o lote de Transact-SQL.
(Microsoft.SqlServer.ConnectionInfo)
La entidad de <seguridad del servidor Servername> no puede acceder a la base de datos "msdb" en el contexto de seguridad actual. (Microsoft SQL Server, Error: 916)

Nota:

Expandir el nodo Base de datos es solo una de las actividades que requiere el permiso de conexión de la cuenta de invitado a la base de datos msdb. Puede producirse un error similar con cualquier actividad que requiera al menos un acceso mínimo a la base de datos msdb.

Cómo determinar el problema

Para determinar si el usuario invitado está configurado correctamente en la base de datos msdb, ejecute la siguiente consulta como miembro del rol fijo de servidor sysadmin:

USE msdb;

SELECT prins.name AS grantee_name, perms.*

FROM sys.database_permissions AS perms

JOIN sys.database_principals AS prins

ON perms.grantee_principal_id = prins.principal_id

WHERE prins.name = 'guest' AND perms.permission_name = 'CONNECT';

GO

Si recibe un conjunto de resultados similar al siguiente, el usuario invitado tiene los permisos necesarios.

grantee_name class class_desc major_id minor_id grantee_principal_id grantor_principal_id type permission_name state state_desc
Huésped 0 BASE 0 0 2 1 CO CONNECT G CONCEDER

Si recibe un conjunto de resultados vacío o si state_desc muestra DENY en el conjunto de resultados que se menciona aquí, el usuario invitado se deshabilita en la base de datos msdb. Puede recibir el error 916 al conectarse a una base de datos.

Cómo resolver el problema

Para resolver el problema, ejecute la siguiente consulta en SQL Server Management Studio como miembro del rol fijo de servidor sysadmin:

USE msdb;

GRANT connect TO guest;

GO

Referencias