MDS Validate Version コマンドが SQL Server でサーバー エラーで失敗する

この記事は、マスター データ サービス (MDS) のバージョン検証コマンドが SQL Server のサーバー エラーで失敗する問題を解決するのに役立ちます。

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

現象

以下のシナリオについて考えてみます。

  • 管理者が Microsoft SQL Server をインストールし、新しいアプリケーション プール アカウントを使用して MDS Web サイトを展開します。

  • 後で MDS Web サイトを参照し、次の手順に従います。

    1. [ バージョンの管理 ] ページを選択します。

    2. 上部のツール バーの [ バージョンの検証 ] コマンドを選択します。

    3. [モデル] の [検証] チェック ボックスをオンにします。

    4. [ このバージョンを検証 しますか?] プロンプトを確認し、[ OK] を選択します。

このシナリオでは、ブラウザー ウィンドウに次のエラー メッセージが表示されます。

'/’ アプリケーションでサーバーエラーが発生しました。
メッセージ要求の種類 'ValidationGetRequest' の処理中にエラーが発生しました。 詳細については、例外の詳細を参照してください。
説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。 エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
例外の詳細: Microsoft.MasterDataServices.WebUI.ServiceAdapterException: メッセージ要求の種類 'ValidationGetRequest' の処理中にエラーが発生しました。 詳細については、例外の詳細を参照してください。
ソース エラー:
現在の Web 要求の実行中にハンドルされない例外が生成されました。 例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して識別できます。
スタック トレース:
[ServiceAdapterException: メッセージ要求の種類 'ValidationGetRequest' の処理中にエラーが発生しました。 詳細については、例外の詳細を参照してください。
Microsoft.MasterDataServices.WebUI.ServiceAdapter.InspectResponseForErrors(MessageRequest request, MessageResponse response) +687
Microsoft.MasterDataServices.WebUI.ServiceAdapter.ExecuteRequest(MdmServiceOperation 2 operation, TRequestType request) +75
Microsoft.MasterDataServices.WebUI.ServiceAdapter.GetValidationStatus(Int32 versionInternalId, Nullable 1 entityInternalId, Nullable 1 memberType, String notificationUserName, IList 1 memberIds, Boolean omitSummary, Boolean omitIssuesList, Int32 pageNumber, Int32 pageSize, String sortColumn, SortDirection sortDirection) +678
Microsoft.MasterDataServices.WebUI.ServiceAdapter.GetValidationStatus(Int32 versionInternalId, Int32 pageNumber, Int32 pageSize, String sortColumn, SortDirection sortDirection) +133
Microsoft.MasterDataServices.WebUI.Common.Validations.LoadGrid() +355
Microsoft.MasterDataServices.WebUI.Audit.Dimensions.LoadGrid() +26
Microsoft.MasterDataServices.WebUI.Audit.Dimensions.EvaluateSelectedVersion() +267
Microsoft.MasterDataServices.WebUI.Audit.Dimensions.OnLoad(EventArgs e) +776
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3064

同様の問題は、カスタムの Microsoft .NET Framework アプリケーションが MDS API クラス ValidationGetRequest を使用する場合に発生する可能性があります。 この問題については、 ValidationGetRequest クラスに関する記事を参照してください。

原因

この問題は、新しいアカウントに VIEW SERVER STATE アクセス許可が付与されていないために発生します。

マスター データ サービス Configuration Manager ユーティリティを使用して MDS Web サイトを作成すると、アプリケーション プール ID のアプリケーション プール ユーザー アカウント資格情報の入力が求められます。

次に、MDS サーバーとデータベースを選択した後、ツールによってアカウントへのアクセス許可が付与されます。 指定したアプリケーション プール資格情報アカウントには、指定した MDS データベース内のいくつかのアクセス許可が付与され、 MDS_ServiceAccounts ローカル ユーザー グループと、指定した MDS データベース カタログ内の mds_exec データベース ロールに追加されます。

ただし、 VIEW SERVER STATE 権限はマスター データベースには付与されません。 場合によっては、Windows アカウントに SQL Server でそのアクセス許可が付与されている場合があります。 ただし、既定では、新しいアカウントにはそのアクセス許可は付与されません。

VIEW SERVER STATEアクセス許可は、sys.dm_broker_activated_tasks動的管理ビュー (DMV) を使用してサービス ブローカーにクエリを実行し、キューに登録されたバックグラウンド アクティビティの進行状況を確認するのに役立ちます。

MDS Web アプリケーションは、exec mdm.udpValidationIsRunning ストアド プロシージャを内部的に実行して検証の進行状況を確認します。 ただし、クエリを実行しているアプリケーション プールの資格情報には DMV へのアクセス許可がないため、次のエラー メッセージが表示されます。

ユーザーにはこの操作を実行する権限がありません。

プロシージャ内の次のステートメントは失敗し、Web ページはレンダリングされません。

IF EXISTS (SELECT 1 FROM sys.dm_broker_activated_tasks
    WHERE procedure_name = N'[mdm].[udpValidationQueueActivate]')

回避策

この問題を回避するには、システム管理者固定サーバー ロールのメンバーであるアカウントを使用して、MDS アプリケーション プールを実行するように指定されたアカウントにアクセス許可を手動で付与します。

たとえば、アクセス許可を手動で付与するには、次のコマンドを実行します。

USE Master;

GO

GRANT VIEW SERVER STATE TO <domain\MdsWebAppAccount>;

プレースホルダー <domain\MdsWebAppAccount> は、構成の正しいアカウントを表します。

詳細

この問題が VIEW SERVER STATE のアクセス許可に関連しているかどうかを確認するには、SQL Profiler トレースを実行し、「 Cause 」セクションの説明に従ってステートメントを実行するときに、次のエラー メッセージを探します。

ユーザーにはこの操作を実行する権限がありません。

次に、アカウントで有効なアクセス許可を確認し、必要に応じてアクセス許可を追加します。 これを行うには、次の手順を実行します。

  1. Management Studio を開き、MDS カタログをホストしている SQL Server データベース エンジンに接続します。

  2. オブジェクト エクスプローラー ペインで、Security フォルダーを展開します。

  3. IIS MDS アプリケーション プールの実行に使用するアカウントを見つけます。

  4. アカウントを右クリックし、 Properties を選択します。

  5. [セキュリティ保護可能なリソース] ページを選択します。 下部のウィンドウで、[ 有効] タブを選択します。

    • 有効なアクセス許可 VIEW SERVER STATE が一覧表示されている場合、これは問題ではない可能性があります。

    • アクセス許可が一覧にない場合は、[ログインのプロパティ] ダイアログ ボックスの [明示的] タブに戻り、[サーバー状態のアクセス許可の表示] チェック ボックスをオンにして、アカウントにアクセス許可を付与します。

関連情報

マスター データ マネージャー Web アプリケーションを使用してデータを検証する方法の詳細については、次を参照してください。