Du bör inte inaktivera gästanvändaren i msdb-databasen i SQL Server

Den här artikeln beskriver olika problem som kan uppstå när du inaktiverar gästanvändaren i msdb-databasen i SQL Server.

Ursprunglig produktversion: SQL Server
Ursprungligt KB-nummer: 2539091

Symptom när gästanvändaren är inaktiverad i msdb-databasen

För att vissa Microsoft SQL Server funktioner ska fungera måste gästanvändaren vara aktiverad i msdb-databasen. Den här artikeln beskriver några problem som kan uppstå om du inaktiverar gästanvändaren i msdb-databasen. Artikeln innehåller också information om hur du löser dessa problem.

När gästanvändaren är inaktiverad i msdb-databasen kan du få ett felmeddelande MSSQLSERVER_916 när användaren expanderar noden Databaser i Management Studio expanderar eller när ett serverprogram försöker ansluta till SQL Server. Du kan uppleva ett eller flera av följande symptom i din miljö när det här problemet uppstår.

Obs!

Feltexten kan variera något beroende på scenariot. Den underliggande orsaken är dock i stort sett densamma. Den orsaken är otillräcklig behörighet i msdb-databasen. Dessa symtom uppstår när Object Explorer försöker visa statusen principbaserad hantering för varje databas. Object Explorer använder behörigheterna för den aktuella inloggningen för att fråga msdb-databasen om den här informationen, vilket orsakar felet.

Symptom 1

I SQL Server 2012 och senare miljöer, när en användare som inte är medlem i sysadmins fasta serverroll i SQL Server och inte på annat sätt beviljas lämpliga behörigheter i msdb försöker expandera noden Databaser eller någon av mapparna under den noden, får de ett felmeddelande som liknar följande:

Det går inte att visa den begärda dialogrutan. YTTERLIGARE INFORMATION: Det går inte att visa den begärda dialogrutan. (SqlMgmt) Ett undantag inträffade när en Transact-SQL-instruktion eller batch kördes. (Microsoft.SqlServer.ConnectionInfo)

Användarnamnet för serverns huvudnamn <> kan inte komma åt databasen msdb under den aktuella säkerhetskontexten. (Microsoft SQL Server, Fel: 916)

Symptom 2

I SQL Server 2008- och SQL Server 2008 R2-miljöer, när en användare som inte är medlem i den fasta Sysadmin-serverrollen i SQL Server och inte på annat sätt beviljas lämpliga behörigheter i msdb försöker expandera noden Databaser eller någon av mapparna under noden får de ett felmeddelande som liknar följande:

Det gick inte att hämta data för den här begäran. (Microsoft.SqlServer.Manager.Sdk.Sfc)
Ytterligare information:
Ett undantag inträffade när en Transact-SQL-instruktion eller batch kördes.
(Microsoft.SqlServer.ConnectionInfo)
Serverhuvudnamnet <servernamn> kan inte komma åt databasen "msdb" under den aktuella säkerhetskontexten. (Microsoft SQL Server, Fel: 916)

Obs!

Att expandera databasnoden är bara en av de aktiviteter som kräver anslutningsbehörighet för gästkontot till msdb-databasen. Ett liknande fel kan inträffa med alla aktiviteter som kräver minst minimal åtkomst till msdb-databasen.

Så här fastställer du problemet

För att avgöra om gästanvändaren är korrekt konfigurerad i msdb-databasen kör du följande fråga som medlem i den fasta serverrollen 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

Om du får en resultatuppsättning som liknar följande har gästanvändaren de behörigheter som krävs.

grantee_name Klass class_desc major_id minor_id grantee_principal_id grantor_principal_id Typ permission_name Statligt state_desc
Pensionat 0 DATABAS 0 0 2 1 CO ANSLUTA G BEVILJA

Om du får antingen en tom resultatuppsättning eller om state_desc visar NEKA i resultatuppsättningen som nämns här inaktiveras gästanvändaren i msdb-databasen. Du kan få fel 916 när du ansluter till en databas.

Så här löser du problemet

Lös problemet genom att köra följande fråga i SQL Server Management Studio som medlem i den fasta serverrollen sysadmin:

USE msdb;

GRANT connect TO guest;

GO

Referenser