SQL Serverの msdb データベースでゲスト ユーザーを無効にしないでください

この記事では、SQL Serverの msdb データベースでゲスト ユーザーを無効にしたときに発生する可能性があるさまざまな問題について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 2539091

msdb データベースでゲスト ユーザーが無効になっている場合の現象

一部の Microsoft SQL Server機能を機能させるには、msdb データベースでゲスト ユーザーを有効にする必要があります。 この記事では、msdb データベースでゲスト ユーザーを無効にした場合に発生する可能性があるいくつかの問題について説明します。 この記事では、これらの問題を解決する方法についても説明します。

msdb データベースでゲスト ユーザーが無効になっている場合、ユーザーが Management Studio で [データベース] ノードを展開したとき、またはサーバー アプリケーションがSQL Serverに接続しようとしたときに、エラー MSSQLSERVER_916を受け取る可能性があります。 この問題が発生すると、環境内で次の現象が 1 つ以上発生する可能性があります。

注:

エラーのテキストは、シナリオによって若干異なる場合があります。 ただし、根本的な原因は基本的に同じです。 その原因は、msdb データベースの特権が不十分です。 これらの現象は、オブジェクト エクスプローラーが各データベースのポリシー ベースの管理状態を表示しようとしたときに発生します。 オブジェクト エクスプローラーは、現在のログオンのアクセス許可を使用して msdb データベースに対してこの情報を照会するため、エラーが発生します。

現象 1

SQL Server 2012 以降の環境では、SQL Serverで Sysadmin 固定サーバー ロールのメンバーではなく、msdb で適切なアクセス許可を付与されていないユーザーがデータベース ノードまたはそのノードの下のフォルダーを展開しようとすると、次のようなエラー メッセージが表示されます。

要求されたダイアログを表示できません。 追加情報: 要求されたダイアログを表示できません。 (SqlMgmt)Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.ConnectionInfo)

サーバー プリンシパル <のユーザー名> は、現在のセキュリティ コンテキストでデータベース msdb にアクセスできません。 (Microsoft SQL Server、エラー: 916)

現象 2

SQL Server 2008 および SQL Server 2008 R2 環境では、SQL Serverで Sysadmin 固定サーバー ロールのメンバーではなく、msdb で適切なアクセス許可が付与されていないユーザーが、データベース ノードまたはそのノードの下のフォルダーを展開しようとすると、次のようなエラー メッセージが表示されます。

この要求のデータを取得できませんでした。 (Microsoft.SqlServer.Manager.Sdk.Sfc)
その他の情報:
Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。
(Microsoft.SqlServer.ConnectionInfo)
サーバー プリンシパル <Servername> は、現在のセキュリティ コンテキストでデータベース "msdb" にアクセスできません。 (Microsoft SQL Server、エラー: 916)

注:

データベース ノードの展開は、ゲスト アカウントの msdb データベースへの接続アクセス許可を必要とするアクティビティの 1 つだけです。 同様のエラーは、少なくとも 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 共同 CONNECT G 付与

空の結果セットを受け取った場合、またはここに記載されている結果セットに DENY が表示されている場合 state_desc 、ゲスト ユーザーは msdb データベースで無効になります。 データベースに接続すると、エラー 916 が表示される場合があります。

問題を解決する方法

この問題を解決するには、sysadmin 固定サーバー ロールのメンバーとしてSQL Server Management Studioで次のクエリを実行します。

USE msdb;

GRANT connect TO guest;

GO

関連情報