在 SQL Server 2012 和 SQL Server 2014 中 MDS 驗證版本命令失敗並出現伺服器錯誤

本文可協助您解決 Master Data Services (MDS) 驗證版本] 命令失敗,且 SQL Server 2012 和 SQL Server 2014 中的伺服器錯誤的問題。

原始產品版本:  SQL Server 2012,SQL Server 2014
原始 KB 編號:   2711671

徵狀

請試想下列案例:

  • 管理員會安裝 Microsoft SQL Server 2012 或 SQL Server 2014 MDS,然後使用新的應用程式集區帳戶部署 MDS 網站。

  • 稍後,您會流覽至 MDS 網站,然後遵循下列步驟:

    1. 按一下 [ 管理版本 ] 頁面。

    2. 按一下上方工具列上的 [ 驗證版本 ] 命令。

    3. 選取 [模型] 的 [驗證] 核取方塊。

    4. 確認您 是否確定要驗證此版本? 提示,然後按一下 [確定]

在此案例中,您會在瀏覽器視窗中收到下列錯誤訊息:

"/" 應用程式中的伺服器錯誤。
處理郵件要求類型 ' ValidationGetRequest ' 時發生錯誤。 如需詳細資訊,請參閱例外狀況詳細資料。
描述:執行目前的 web 要求期間發生未處理的例外狀況。 請查看堆疊追蹤以取得錯誤的詳細資訊及其在程式碼中的來源。
例外狀況詳細資料: WebUI:處理郵件要求類型 ' ValidationGetRequest ' 時發生錯誤。 如需詳細資訊,請參閱例外狀況詳細資料。
來源錯誤:
在執行目前的 web 要求期間產生未處理的例外狀況。 您可以使用以下的例外狀況追蹤來識別例外狀況和來源位置的相關資訊。
堆疊追蹤:
[ServiceAdapterException:處理郵件要求類型 ' ValidationGetRequest ' 時發生錯誤。 如需詳細資訊,請參閱例外狀況詳細資料。」
MasterDataServices (MessageRequest 要求 InspectResponseForErrors MessageResponse 回應) + 687
MasterDataServices (MdmServiceOperation 2 operation,TRequestType 要求) + 75
MasterDataServices (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
MasterDataServices (Int32 versionInternalId,Int32 pageNumber,Int32 pageSize,String sortColumn,SortDirection sortDirection) + 133
LoadGrid () + 355 的 WebUI MasterDataServices
LoadGrid () ,WebUI + 26
EvaluateSelectedVersion () + 267 的 WebUI MasterDataServices
MasterDataServices EventArgs e) + 776 (OnLoad
LoadRecursive () + 71 (UI)
ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) + 3064

注意

當自訂的 Microsoft .NET Framework 應用程式使用 MDS API 類別 ValidationGetRequest 時,可能會發生類似的問題。 此問題記載于: ValidationGetRequest 類別

原因

發生此問題的原因是不會將許可權授與新帳戶 VIEW SERVER STATE

當您使用 Master Data Services 組態管理員公用程式建立 MDS 網站時,此工具會提示您輸入應用程式集區身分識別的應用程式集區使用者帳號憑證。

接下來,在選取 MDS 伺服器及資料庫之後,該工具會將許可權授與該帳戶。 指定的應用程式集區認證帳戶會授與指定的 MDS 資料庫中的數個許可權,而且會加入至 MDS_ServiceAccounts 本機使用者群組,以及 mds_exec 指定之 MDS 資料庫目錄內的資料庫角色。

不過, VIEW SERVER STATE 不會將許可權授與 master 資料庫。 在某些情況下,Windows 帳戶可能 SQL Server 中的許可權。 不過,根據預設,不會將該許可權授與新帳戶。

VIEW SERVER STATE 許可權可用於查詢 service broker,方法是使用 [ sys.dm_broker_activated_tasks 動態管理] VIEW (DMV) 檢查佇列背景活動的進度。

MDS web 應用程式會在內部執行 exec mdm.udpValidationIsRunning 儲存過程以檢查驗證進度。 不過,執行查詢的應用程式集區憑證沒有 DMV 的許可權,且收到下列錯誤訊息:

使用者沒有執行此動作的許可權。

程式內的下列語句會失敗,且不會呈現此網頁:

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 的探測器追蹤,然後在執行此語句時,尋找下列錯誤訊息,如原因區段所述:

使用者沒有執行此動作的許可權。

然後,檢查帳戶是否有有效的許可權,並視需要新增許可權。 如果要執行這項操作,請依照下列步驟執行:

  1. 開啟 Management Studio,然後連接到主控 MDS 目錄的 SQL Server 資料庫引擎。

  2. 在 [ 物件瀏覽器 ] 窗格中,展開 [ 安全性 ] 資料夾。

  3. 尋找用來執行 IIS MDS 應用程式集區的帳戶。

  4. 以滑鼠右鍵按一下帳戶,然後按一下 [ 屬性]。

  5. 按一下 [ Securables ] 頁面。 在底部窗格中,按一下 [ 有效 ] 索引標籤。

    • 如果列出有效許可權 VIEW SERVER STATE ,這可能不是問題。

    • 若未列出此許可權,請回到 [ 入內容] 對話方塊上的 [明確] 索引標籤,然後按一下以選取 [ View Server State 許可權] 核取方塊,以將許可權授與帳戶。

參考

如需如何使用 Master Data Manager web 應用程式來驗證資料的詳細資訊,請參閱: