Vous ne devez pas désactiver l’utilisateur invité dans la base de données msdb dans SQL Server

Cet article décrit différents problèmes qui peuvent se produire lorsque vous désactivez l’utilisateur invité dans la base de données msdb dans SQL Server.

Version du produit d’origine : SQL Server
Numéro de la base de connaissances d’origine : 2539091

Symptômes lorsque l’utilisateur invité est désactivé dans la base de données msdb

Pour que certaines fonctionnalités de Microsoft SQL Server fonctionnent, l’utilisateur invité doit être activé dans la base de données msdb. Cet article décrit certains problèmes que vous pouvez rencontrer si vous désactivez l’utilisateur invité dans la base de données msdb. L’article fournit également des informations sur la façon de résoudre ces problèmes.

Lorsque l’utilisateur invité est désactivé dans la base de données msdb, vous pouvez recevoir une erreur MSSQLSERVER_916 lorsque l’utilisateur développe le nœud Bases de données dans Management Studio se développe ou lorsqu’une application serveur tente de se connecter à SQL Server. Vous pouvez rencontrer un ou plusieurs des symptômes suivants dans votre environnement lorsque ce problème se produit.

Remarque

Le texte de l’erreur peut varier légèrement selon le scénario. Toutefois, la cause sous-jacente est essentiellement la même. Cela est dû à des privilèges insuffisants dans la base de données msdb. Ces symptômes se produisent lorsque Explorateur d'objets tente d’afficher la status de gestion basée sur des stratégies de chaque base de données. Explorateur d'objets utilise les autorisations de l’ouverture de session actuelle pour interroger la base de données msdb pour obtenir ces informations, ce qui provoque l’erreur.

Symptôme 1

Dans les environnements SQL Server 2012 et versions ultérieures, lorsqu’un utilisateur qui n’est pas membre du rôle serveur fixe Sysadmin dans SQL Server et qui n’a pas accordé les autorisations appropriées dans msdb tente de développer le nœud Bases de données ou l’un des dossiers sous ce nœud, il reçoit un message d’erreur qui ressemble au suivant :

Impossible d’afficher la boîte de dialogue demandée. INFORMATIONS SUPPLÉMENTAIRES : Impossible d’afficher la boîte de dialogue demandée. (SqlMgmt) Une exception s’est produite lors de l’exécution d’une instruction Transact-SQL ou d’un lot. (Microsoft.SqlServer.ConnectionInfo)

Le nom d’utilisateur du> principal <du serveur n’est pas en mesure d’accéder à la base de données msdb dans le contexte de sécurité actuel. (Microsoft SQL Server, Erreur : 916)

Symptôme 2

Dans les environnements SQL Server 2008 et SQL Server 2008 R2, lorsqu’un utilisateur qui n’est pas membre du rôle serveur fixe Sysadmin dans SQL Server et qui n’a pas d’autorisations appropriées dans msdb tente de développer le nœud Bases de données ou l’un des dossiers sous ce nœud, il reçoit un message d’erreur semblable au suivant :

Échec de la récupération des données pour cette demande. (Microsoft.SqlServer.Manager.Sdk.Sfc)
Informations supplémentaires :
Une exception s’est produite lors de l’exécution d’une instruction Transact-SQL ou d’un lot.
(Microsoft.SqlServer.ConnectionInfo)
Le serveur principal <servername> n’est pas en mesure d’accéder à la base de données « msdb » dans le contexte de sécurité actuel. (Microsoft SQL Server, Erreur : 916)

Remarque

Le développement du nœud Base de données n’est qu’une des activités qui nécessitent l’autorisation de connexion pour le compte invité à la base de données msdb. Une erreur similaire peut se produire avec toute activité qui nécessite au moins un accès minimal à la base de données msdb.

Comment déterminer le problème

Pour déterminer si l’utilisateur invité est correctement configuré dans la base de données msdb, exécutez la requête suivante en tant que membre du rôle serveur fixe 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 vous recevez un jeu de résultats qui ressemble à ce qui suit, l’utilisateur invité dispose des autorisations nécessaires.

grantee_name class class_desc major_id minor_id grantee_principal_id grantor_principal_id type permission_name state state_desc
Invités 0 BASE 0 0 2 1 CO CONNECT G SUBVENTION

Si vous recevez un jeu de résultats vide ou si le state_desc affiche DENY dans le jeu de résultats mentionné ici, l’utilisateur invité est désactivé dans la base de données msdb. Vous pouvez recevoir l’erreur 916 lorsque vous vous connectez à une base de données.

Comment résoudre le problème

Pour résoudre le problème, exécutez la requête suivante dans SQL Server Management Studio en tant que membre du rôle serveur fixe sysadmin :

USE msdb;

GRANT connect TO guest;

GO

References