Non è consigliabile disabilitare l'utente guest nel database msdb in SQL Server

Questo articolo descrive diversi problemi che possono verificarsi quando si disabilita l'utente guest nel database msdb in SQL Server.

Versione originale del prodotto: SQL Server
Numero KB originale: 2539091

Sintomi quando l'utente guest è disabilitato nel database msdb

Affinché alcune funzionalità di Microsoft SQL Server funzionino, l'utente guest deve essere abilitato nel database msdb. Questo articolo descrive alcuni problemi che potrebbero verificarsi se si disabilita l'utente guest nel database msdb. L'articolo fornisce anche informazioni su come risolvere tali problemi.

Quando l'utente guest è disabilitato nel database msdb, è possibile che venga visualizzato un errore MSSQLSERVER_916 quando l'utente espande il nodo Database in Management Studio o quando un'applicazione server tenta di connettersi a SQL Server. Quando si verifica questo problema, è possibile che si verifichi uno o più dei sintomi seguenti nell'ambiente.

Nota

Il testo dell'errore può variare leggermente, a seconda dello scenario. Tuttavia, la causa sottostante è essenzialmente la stessa. Tale causa non è sufficiente nel database msdb. Questi sintomi si verificano quando Esplora oggetti tenta di visualizzare lo stato di gestione basata su criteri di ogni database. Esplora oggetti usa le autorizzazioni dell'accesso corrente per eseguire una query sul database msdb per ottenere queste informazioni, che causa l'errore.

Sintomo 1

Negli ambienti SQL Server 2012 e versioni successive, quando un utente che non è membro del ruolo predefinito del server Sysadmin in SQL Server e non dispone delle autorizzazioni appropriate in msdb tenta di espandere il nodo Database o una delle cartelle in tale nodo, riceve un messaggio di errore simile al seguente:

Impossibile visualizzare la finestra di dialogo richiesta. INFORMAZIONI AGGIUNTIVE: impossibile visualizzare la finestra di dialogo richiesta. (SqlMgmt) Si è verificata un'eccezione durante l'esecuzione di un'istruzione o un batch Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)

Il nome utente> dell'entità <server non è in grado di accedere al database msdb nel contesto di sicurezza corrente. (Microsoft SQL Server, errore: 916)

Sintomo 2

Negli ambienti SQL Server 2008 e SQL Server 2008 R2, quando un utente che non è membro del ruolo predefinito del server Sysadmin in SQL Server e non ha concesso autorizzazioni appropriate in msdb tenta di espandere il nodo Database o una delle cartelle in tale nodo, riceve un messaggio di errore simile al seguente:

Impossibile recuperare i dati per questa richiesta. (Microsoft.SqlServer.Manager.Sdk.Sfc)
Altre informazioni:
Si è verificata un'eccezione durante l'esecuzione di un'istruzione o un batch Transact-SQL.
(Microsoft.SqlServer.ConnectionInfo)
Il server principal <Servername> non è in grado di accedere al database "msdb" nel contesto di sicurezza corrente. (Microsoft SQL Server, errore: 916)

Nota

L'espansione del nodo Database è solo una delle attività che richiede l'autorizzazione di connessione per l'account guest al database msdb. Un errore simile può verificarsi con qualsiasi attività che richiede almeno l'accesso minimo al database msdb.

Come determinare il problema

Per determinare se l'utente guest è configurato correttamente nel database msdb, eseguire la query seguente come membro del ruolo predefinito del server 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

Se si riceve un set di risultati simile al seguente, l'utente guest dispone delle autorizzazioni necessarie.

grantee_name Classe class_desc major_id minor_id grantee_principal_id grantor_principal_id tipo permission_name Stato state_desc
Ospite 0 DATABASE 0 0 2 1 CO CONNETTERSI G CONCEDERE

Se si riceve un set di risultati vuoto o se viene state_desc visualizzato DENY nel set di risultati indicato qui, l'utente guest viene disabilitato nel database msdb. È possibile che venga visualizzato l'errore 916 quando ci si connette a un database.

Come risolvere il problema

Per risolvere il problema, eseguire la query seguente in SQL Server Management Studio come membro del ruolo predefinito del server sysadmin:

USE msdb;

GRANT connect TO guest;

GO

Riferimenti