Не следует отключать гостевого пользователя в базе данных msdb в SQL Server

В этой статье описаны различные проблемы, которые могут возникнуть при отключении гостевого пользователя в базе данных msdb в SQL Server.

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 2539091

Симптомы, когда гостевой пользователь отключен в базе данных msdb

Чтобы некоторые функции Microsoft SQL Server работали, гостевой пользователь должен быть включен в базе данных msdb. В этой статье описаны некоторые проблемы, которые могут возникнуть при отключении гостевого пользователя в базе данных msdb. В этой статье также содержатся сведения о том, как устранить эти проблемы.

Если гостевой пользователь отключен в базе данных msdb, может появиться сообщение об ошибке MSSQLSERVER_916 при развертывании пользователем узла Базы данных в Среде Management Studio или при попытке серверного приложения подключиться к SQL Server. При возникновении этой проблемы в среде может возникнуть один или несколько из следующих симптомов.

Примечание.

Текст ошибки может немного отличаться в зависимости от сценария. Однако основная причина по существу та же. Это вызвано недостаточными привилегиями в базе данных msdb. Эти симптомы возникают, когда обозреватель объектов пытается показать состояние управления на основе политик для каждой базы данных. обозреватель объектов использует разрешения текущего входа для запроса этой информации в базе данных msdb, что приводит к ошибке.

Симптом 1

В SQL Server 2012 и более поздних средах, когда пользователь, не являющийся членом предопределенной роли сервера Sysadmin в SQL Server и не получивший соответствующих разрешений в базе данных msdb, пытается развернуть узел Базы данных или любую из папок в этом узле, он получает сообщение об ошибке, похожее на следующее:

Не удается отобразить запрошенный диалог. ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ. Не удается отобразить запрошенное диалоговое окно. (SqlMgmt) При выполнении инструкции или пакета Transact-SQL возникло исключение. (Microsoft.SqlServer.ConnectionInfo)

Имя пользователя> субъекта-сервера <не может получить доступ к базе данных msdb в текущем контексте безопасности. (Microsoft SQL Server, ошибка: 916)

Симптом 2

В средах SQL Server 2008 и SQL Server 2008 R2 пользователь, который не является членом предопределенной роли сервера Sysadmin в SQL Server и не получил соответствующих разрешений в базе данных msdb, пытается развернуть узел Баз данных или любую из папок в этом узле, он получает сообщение об ошибке, примерно следующее:

Не удалось получить данные для этого запроса. (Microsoft.SqlServer.Manager.Sdk.Sfc)
Дополнительная информация:
При выполнении инструкции или пакета Transact-SQL возникло исключение.
(Microsoft.SqlServer.ConnectionInfo)
Субъект сервера <Servername> не может получить доступ к базе данных msdb в текущем контексте безопасности. (Microsoft SQL Server, ошибка: 916)

Примечание.

Расширение узла Базы данных — это лишь одно из действий, для чего требуется разрешение на подключение гостевой учетной записи к базе данных msdb. Аналогичная ошибка может возникнуть при любом действии, которое требует по крайней мере минимального доступа к базе данных msdb.

Как определить проблему

Чтобы определить, правильно ли настроен гостевой пользователь в базе данных msdb, выполните следующий запрос в качестве члена предопределенных ролей сервера 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

Если вы получаете результирующий набор, аналогичный приведенному ниже, у гостевого пользователя есть необходимые разрешения.

grantee_name class class_desc major_id minor_id grantee_principal_id grantor_principal_id type permission_name state state_desc
Гостевой 0 БАЗЫ ДАННЫХ 0 0 2 1 CO CONNECT G ПРЕДОСТАВИТЬ

Если вы получаете пустой результирующий набор или если state_desc в результирующем наборе, упоминаемом здесь, отображается значение DENY, гостевой пользователь отключается в базе данных msdb. При подключении к базе данных может появиться сообщение об ошибке 916.

Устранение проблемы

Чтобы устранить эту проблему, выполните следующий запрос в SQL Server Management Studio в качестве члена предопределенных ролей сервера sysadmin:

USE msdb;

GRANT connect TO guest;

GO

Ссылки