Поделиться через


Не следует отключить гостевого пользователя в базе данных 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)
Имя> сервера субъекта-сервера <не может получить доступ к базе данных 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
guest 0 DATABASE 0 0 2 1 CO ПОДКЛЮЧЕНИЕ G GRANT

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

Способы устранения проблемы

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

USE msdb;

GRANT connect TO guest;

GO

Ссылки