MDS Validate Version コマンドが失敗し、SQL Server 2012 および SQL Server 2014 でサーバー エラーが発生する

この記事は、マスター データ サービス (MDS) Validate Version コマンドが失敗し、SQL Server 2012 および SQL Server 2014 でサーバー エラーが発生する問題を解決するのに役立ちます。

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

現象

次のような状況で問題が発生します。

  • 管理者は、Microsoft SQL Server 2012 または SQL Server 2014 MDS をインストールし、新しいアプリケーション プール アカウントを使用して 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 応答) +687
Microsoft.MasterDataServices.WebUI.ServiceAdapter.ExecuteRequest(MdmServiceOperation 2 操作, TRequestType 要求) +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

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

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

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

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

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 トレースを実行し、「 原因 」セクションの説明に従ってステートメントを実行するときに次のエラー メッセージを探します。

ユーザーには、このアクションを実行するアクセス許可がありません。

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

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

  2. [オブジェクト エクスプローラー] ウィンドウで、[セキュリティ] フォルダーを展開します。

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

  4. アカウントを右クリックし、[ プロパティ] をクリックします。

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

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

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

関連情報

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