Nie należy wyłączać użytkownika-gościa w bazie danych msdb w SQL Server

W tym artykule opisano różne problemy, które mogą wystąpić po wyłączeniu użytkownika-gościa w bazie danych msdb w SQL Server.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 2539091

Objawy, gdy użytkownik-gość jest wyłączony w bazie danych msdb

Aby niektóre funkcje SQL Server firmy Microsoft działały, użytkownik-gość musi być włączony w bazie danych msdb. W tym artykule opisano niektóre problemy, które mogą wystąpić w przypadku wyłączenia użytkownika-gościa w bazie danych msdb. Artykuł zawiera również informacje o sposobie rozwiązywania tych problemów.

Po wyłączeniu użytkownika-gościa w bazie danych msdb może wystąpić błąd MSSQLSERVER_916, gdy użytkownik rozwinie węzeł Bazy danych w programie Management Studio lub gdy aplikacja serwera spróbuje nawiązać połączenie z SQL Server. W przypadku wystąpienia tego problemu w środowisku może wystąpić co najmniej jeden z następujących objawów.

Uwaga

Tekst błędu może się nieco różnić w zależności od scenariusza. Jednak podstawowa przyczyna jest zasadniczo taka sama. Ta przyczyna nie ma wystarczających uprawnień w bazie danych msdb. Te objawy występują, gdy Eksplorator obiektów próbuje wyświetlić stan zarządzania opartego na zasadach każdej bazy danych. Eksplorator obiektów używa uprawnień bieżącego logowania do wykonywania zapytań względem bazy danych msdb w celu uzyskania tych informacji, co powoduje błąd.

Symptom 1

W środowiskach SQL Server 2012 i nowszych, gdy użytkownik, który nie jest członkiem stałej roli serwera Sysadmin w SQL Server i nie przyznał odpowiednich uprawnień w usłudze msdb, próbuje rozwinąć węzeł Bazy danych lub dowolny z folderów w tym węźle, otrzymuje komunikat o błędzie podobny do następującego:

Nie można wyświetlić żądanego okna dialogowego. DODATKOWE INFORMACJE: Nie można wyświetlić żądanego okna dialogowego. (SqlMgmt) Wystąpił wyjątek podczas wykonywania instrukcji języka Transact-SQL lub partii. (Microsoft.SqlServer.ConnectionInfo)

Główna <nazwa użytkownika> serwera nie może uzyskać dostępu do bazy danych msdb w bieżącym kontekście zabezpieczeń. (Microsoft SQL Server, błąd: 916)

Symptom 2

W środowiskach SQL Server 2008 i SQL Server 2008 R2, gdy użytkownik, który nie jest członkiem stałej roli serwera Sysadmin w SQL Server i nie przyznał odpowiednich uprawnień w usłudze msdb, próbuje rozwinąć węzeł Bazy danych lub dowolny folder w tym węźle, otrzymuje komunikat o błędzie podobny do następującego:

Nie można pobrać danych dla tego żądania. (Microsoft.SqlServer.Manager.Sdk.Sfc)
Informacje dodatkowe:
Wystąpił wyjątek podczas wykonywania instrukcji języka Transact-SQL lub partii.
(Microsoft.SqlServer.ConnectionInfo)
Główna <nazwa serwera Servername> nie może uzyskać dostępu do bazy danych "msdb" w bieżącym kontekście zabezpieczeń. (Microsoft SQL Server, błąd: 916)

Uwaga

Rozszerzenie węzła Baza danych to tylko jedno z działań, które wymagają uprawnień do łączenia konta gościa z bazą danych msdb. Podobny błąd może wystąpić w przypadku dowolnego działania, które wymaga co najmniej minimalnego dostępu do bazy danych msdb.

Jak ustalić problem

Aby ustalić, czy użytkownik-gość jest poprawnie skonfigurowany w bazie danych msdb, uruchom następujące zapytanie jako członek stałej roli serwera 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

Jeśli otrzymasz zestaw wyników podobny do poniższego, użytkownik-gość ma niezbędne uprawnienia.

grantee_name Klasa class_desc major_id minor_id grantee_principal_id grantor_principal_id Typu permission_name Państwa State_desc
Opinie gości 0 BAZY DANYCH 0 0 2 1 CO POŁĄCZYĆ G UDZIELIĆ

Jeśli otrzymasz pusty zestaw wyników lub jeśli state_desc w zestawie wyników, który został wymieniony tutaj, zostanie wyświetlony komunikat DENY, użytkownik-gość zostanie wyłączony w bazie danych msdb. Podczas nawiązywania połączenia z bazą danych może wystąpić błąd 916.

Jak rozwiązać problem

Aby rozwiązać ten problem, uruchom następujące zapytanie w SQL Server Management Studio jako członek stałej roli serwera sysadmin:

USE msdb;

GRANT connect TO guest;

GO

Informacje