次の方法で共有


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

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

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

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

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

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

Note

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

症状 1

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

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

サーバー プリンシパル <username> は、現在のセキュリティ コンテキストでデータベース 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)

Note

データベース ノードの拡張は、ゲスト アカウントの 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_desc
ゲスト 0 DATABASE 0 0 2 1 CO CONNECT G GRANT

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

この問題を解決する方法

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

USE msdb;

GRANT connect TO guest;

GO

関連情報