SharePoint Designer 2010 で作成したワーク フローでユーザー プロファイルのフィールドが取得できない
こんにちは。SharePoint サポートチームの多田です。
今回は SharePoint Designer 2010 で作成したワーク フローでユーザー プロファイルのフィールドが取得できない現象の説明と回避策をご案内します。
- 環境
SharePoint Server 2010 SP2 + 2013 年 12 月 CU (KB 2849971)
SharePoint Designer 2010
現象
===
SharePoint Server 2010 SP2 + 2013 年 12 月 CU (KB 2849971) において、SharePoint Designer 2010 にてワークフローを作成する際に、ユーザー プロファイルを参照すると以下のエラーが発生します。
メッセージ:「サーバーからプロファイル スキーマを取得できませんでした。プロファイル ストアが正しく構成されていることを確認してください。」
現象の再現手順
^^^^^^^^
1. Search Service Application と User Profile Service Application をあらかじめ構成しておきます。
2. SharePoint Server 2010 SP2 に 2013 年 12 月 CU (KB 2849971) を適用します。
3. SharePoint Server に対して、何も権限を持っていない新規の管理アカウントで、新規 Web アプリケーションを作成します。
4. 作成した Web アプリケーション上で、新規サイト コレクションを作成します。
5. SharePoint Designer 2010 を起動し、作成したサイト コレクションを開きます。
6. リボンメニューから、[リスト ワークフロー] をクリックし、任意のリストをクリックします。
7. 任意のタイトルを入力し、[OK] をクリックします。
8. リボンメニューにて、[アクション] をクリックし、[リスト アイテムを更新する] をクリックします。
9. 追加されたアクションにて、[リスト] をクリックします。
10. [追加] をクリックします。
11. "フィールドを選択" にて [タイトル] を選択し、"割り当てる値を設定" にて [fx] をクリックします。
12. "データ ソース" にて [ユーザー プロファイル] を選択します。
13. 上記のエラーが発生することを確認します。
補足事項
^^^^^^
本現象は SharePoint Server 2010 SP2 では発生しません。本現象は 2013 年 12 月 CU (または SP2 以降の CU) で発生します。
原因
===
2013 年 12 月 CU (または SP2 以降の CU) の修正により、Web アプリケーションの実行アカウントが検索 DB (Search_Service_Application_DB) 上のストアドプロシージャーを呼びだすよう変更されました。
本現象は Web アプリケーションの実行アカウントが検索 DB (Search_Service_Application_DB) に対して、ストアドプロシージャーの実行権限を持っていない場合は本エラーが発生します。上記のエラーが発生した際に、診断ログに以下のエラーログが記録されます。
--- 診断ログ ---
xx/xx/2014 xx:xx:xx.xx w3wp.exe (0x0XXXX) 0xXXXX SharePoint Server Database 880i High System.Data.SqlClient.SqlException: このログインで要求されたデータベース "Search_Service_Application_DB_ xxxxxxx" を開けません。ログインに失敗しました。 ユーザー 'DOMAIN01\ManageApp01' はログインできませんでした。
------------------
解決策
====
検索 DB (Search_Service_Application_DB) において、Web アプリケーションの実行アカウントに対して、DB_Owner 権限を与えるか、もしくは最小権限を与える場合は以下の権限を与えます。
・db_datareader
・proc_MSS_GetSchemaHighLevelInfo の実行権限 (※ 1)
(※ 1)
以下に設定手順をご案内いたします。
1. SQL Management Studio を起動し、該当の SQL インスタンスにログインします。
2. 左ペインより、[データベース] - [Search_Service_Application_DB_xxxxxxx] - [プログラミング] - [ストアド プロシージャ] を展開し、[dbo.proc_MSS_GetSchemaHighLevelInfo] を右クリックし、[プロパティ] をクリックします。
3. 左ペインより、[権限] をクリックします。
4. [検索] をクリックし、該当の Web アプリケーションのアカウントを入力します。
5. 権限の欄にて、権限が "実行" であるものについて、[許可] にチェックを入れます。
6. [OK] をクリックします。