サイト コレクションのユーザー情報へのユーザー プロファイル同期の仕組みについて (まとめ)

皆さんこんにちは。
SharePoint サポート チームの荒川です。

User Profile Service アプリケーションとサイト コレクションの同期についてはこれまでに何度か記事で取り上げてきましたが、今回は様々な技術情報サイト (マイクロソフト公式サポート技術情報や TechNet、MSDN ブログの過去の記事など) に分散されている情報を集約した形でまとめ記事を作成してみました。
情報量が大変多いため、一度に全部読むことは難しいかもしれませんが、目次のリンクを活用いただくことでページ内を簡単にジャンプできるようにしていますので、包括的な情報源としてご活用ください。

 

目的
この資料では、User Profile Service アプリケーションとサイト コレクションの間でユーザー プロファイルが同期される仕組みと、それに関連するトラブルシューティングの方法について解説します。

 

免責事項
本投稿内容については SharePoint 製品サポート チームにおいてレビュー済みの内容となりますが、マイクロソフトの公式文書ではありませんのでご了承ください。
本投稿内容は今後定期的に最新の情報を反映するようにメンテナンスしていく予定です。そのため、新たな情報が得られた際には適宜更新される可能性があります。

 

対象製品
本資料は、SharePoint Server 2013 を対象にしていますが、SharePoint Server 2010 および Office SharePoint Server 2007 についても一部同様にご参照いただけます。

 

目次

 

動作の解説
このセクションでは User Profile Service アプリケーションとサイト コレクションの間でユーザー プロファイルが同期される仕組みについて解説します。

 

サイト コレクションのユーザー情報について
サイト コレクションのユーザー情報とは、主に SharePoint サイト上におけるユーザーの表示名などのユーザー情報に利用される情報を指します。
サイト コレクションのユーザー情報が利用される個所は主に以下となります。

  • ページ右上に表示されるユーザーの表示名
  • アイテムや投稿の「作成者」として表示されるユーザーの表示名
  • 通知の設定時に参照される電子メールアドレス

 <目次に戻る>

 

サイト コレクションのユーザー情報とユーザー プロファイルの関係
サイト コレクションのユーザー情報は、ユーザー プロファイルのユーザー情報とは独立した形でサイト コレクション内に保存されます。したがって、ユーザー プロファイルのユーザー情報とサイト コレクションのユーザー情報はそれぞれ異なるものとして扱われます。

〔ユーザー プロファイルのユーザー情報〕≠〔サイト コレクションのユーザー情報〕

詳細については後述の「ユーザープロファイルの情報がサイト コレクションのユーザー情報に自動的に反映される仕組み」セクションで詳しく解説しますが、AD 上でユーザー情報を更新した後、User Profile Service アプリケーションで同期を行いユーザー プロファイルのユーザー情報を更新したとしても、直ぐにサイト コレクションのユーザー情報に反映されるわけではありません。  <目次に戻る>

 

サイト コレクションのユーザー情報の確認方法と編集方法
サイト コレクションのユーザー情報の確認方法と編集方法は、サイト コレクションが User Profile Service アプリケーションと関連付けられているかどうかによって変わります。
サイト コレクションが含まれる Web アプリケーションが User Profile Service アプリケーションと関連付けられていない環境または、SharePoint Foundation では、サイト コレクションのユーザー情報はユーザーが自分で編集して管理します。
ユーザーは自身の個人用設定から、サイト コレクションのユーザー情報ページ (<サイト コレクション>/_layouts/15/userdisp.aspx) にアクセスしてユーザー情報の確認と編集ができます。

SharePoint Server で User Profile Service アプリケーションが構成されていた場合は、サイト コレクションのユーザー情報がユーザー プロファイルの情報から管理タイマージョブにより自動同期されるため、ユーザーが自分でサイト コレクションのユーザー情報を管理することはできません。ユーザーは自身のユーザー プロファイルページ (<個人用サイトのホスト>/Person.aspx) にアクセスしてユーザー プロファイル情報の確認と、管理者によって許可されているプロパティの編集ができます。ユーザー プロファイルの情報は定期的に実行される管理タイマー ジョブによってサイト コレクションのユーザー情報に反映されます。

 

なお、過去に一度でも User Profile Service アプリケーションに関連付けてプロファイルの同期対象となったサイト コレクションでは、後から User Profile Service アプリケーションの関連付けを解除した場合であってもサイトのユーザー情報をユーザー インターフェイス上から変更することができなくなります。この場合、サイト コレクションのユーザー情報ページ (<サイト コレクション>/_layouts/15/userdisp.aspx) にアクセスできるようにはなりますが、アイテムの編集をクリックしてもプロパティを編集できません。

サイト コレクションの管理者は「<サイト コレクションの URL>/_catalogs/users」または「<サイト コレクションの URL>/_layouts/15/people.aspx?MembershipGroupId=0」に直接アクセスすることで、サイト コレクションに含まれるユーザーの一覧 (ユーザー情報リスト) を確認し、必要に応じてサイト コレクションのユーザー情報を管理できます。

SharePoint Foundation ではユーザー情報リストの一覧から任意のユーザー名をクリックすることで、各ユーザーのサイト コレクションのユーザー情報の編集ページ (<サイト コレクション>/_layouts/15/userdisp.aspx) にジャンプして、ユーザー情報を編集できます。

SharePoint Server では、ユーザー情報リストの一覧からユーザー名をクリックした際の動作がユーザー プロファイルの有無により異なります。対象のユーザーのユーザー プロファイルが存在する場合には、ユーザー名をクリックした際にユーザーのプロファイル ページ (<個人用サイトのホスト>/Person.aspx) にジャンプします。対象のユーザーのユーザー プロファイルが存在しない場合 (サイトに権限を登録した直後や User Profile Service アプリケーションが存在しない場合など) には、ユーザー名をクリックした際に SharePoint Foundation と同様にサイト コレクションのユーザー情報の編集ページ (<サイト コレクション>/_layouts/15/userdisp.aspx) にジャンプしますが、Web アプリケーションが User Profile Service アプリケーションに関連付けられており、過去にサイト コレクションでプロファイルの同期が実行されたことがある場合にはアイテムの編集はできません。

サイト コレクションの管理者は以下のPowerShell スクリプトを使用することで、User Profile Service アプリケーションの関連付けの有無にかかわらず、サイト コレクションのユーザー情報を直接参照および編集できます。

(サンプル コード)

#サイト コレクションのユーザー オブジェクトを取得します。$username = "i:0#.w|Domain\UserName" #クラシック認証の場合は Domain\UserName$siteurl = "https://URLofYourSite"$user = Get-SPUser -Identity $username -Web $siteurl#ユーザーの表示名と電子メールアドレスを確認するには以下のコマンドを実行します。$user.Displayname, $user.Email#ユーザーの電子メールアドレスと表示名を AD から取得して同期するには以下のコマンドを実行します。Set-SPUser –Identity $user -SyncFromAD#ユーザーの電子メールアドレスを明示的に指定して変更するには以下のコマンドを実行します。$user.Email = "NewAddress@contoso.local"$user.Update()#ユーザーの表示名を明示的に指定して変更するには以下のコマンドを実行します。$user.DisplayName = "NewDisplayName"$user.Update()#以下のコマンドではすべてのサイト コレクションのユーザー情報を更新します。$title = "NewTitle"$emailAddress = "NewEmail@contoso.local"Get-SPSite -Limit all | % {$user = $_.OpenWeb().SiteUsers[$username]; if ($user -ne $null) {$user.DisplayName=$title; $user.Email=$emailAddress; $user.Update()}}

<目次に戻る>

 

User Profile Service アプリケーションにインポートされたユーザー プロファイルの情報の確認方法と編集方法
User Profile Service アプリケーションにインポートされたユーザー プロファイルの情報は以下の方法で確認および編集できます。

(手順) ユーザーが User Profile Service アプリケーションにインポートされたユーザー プロファイルの情報を確認および編集する方法

  1. サイトにアクセスして右上のユーザー名をクリックし、[プロファイル] をクリックしてユーザー プロファイル ページに移動します。
  2. [プロファイルの編集] をクリックします。
  3. 詳細の編集ページでプロファイルの情報を確認します。必要に応じて管理者により編集が許可されたユーザー プロファイルの情報を編集して保存します。

(手順) 管理者が User Profile Service アプリケーションにインポートされたユーザー プロファイルの情報を確認および編集する方法

  1. サーバーの全体管理サイトにアクセスします。
  2. [アプリケーション構成の管理] セクションの [サービス アプリケーションの管理] をクリックします。
  3. サービス アプリケーションの一覧から User Profile Service アプリケーションの名前をクリックして User Profile Service アプリケーションの管理サイトを開きます。
  4. [ユーザー プロファイルの管理] をクリックします。
  5. [プロファイルの検索] ボックスに対象のアカウント名を入力して [検索] ボタンをクリックします。
  6. 検索結果に表示されたアカウント名を右クリックして [個人用プロファイルの編集] をクリックします。
  7. ユーザー プロファイルの編集ページでプロファイルの情報を確認します。必要に応じて任意のユーザー プロファイルの情報を編集して保存します。

また、以下の PowerShell スクリプトではユーザー プロファイルにインポートされたユーザー情報をテキスト ファイルに出力して確認できます。

(サンプル コード) GetUserProfileData.ps1

#この PowerShell スクリプトではユーザー プロファイルにインポートされたユーザー情報をテキスト ファイルに出力して確認できます。#使用例:GetUserProfileData.ps1 -siteurl "https://URLofYourSite" -username "Domain\UserName"param($siteurl,$username)$site = Get-SPSite($siteurl);$ss = Get-SPServiceContext($site);$upm = new-object Microsoft.Office.Server.UserProfiles.UserProfileManager($ss);Write-Output "AccountName,DisplayName,Department,Email,JobTitle";Write-Output " -------------------------------------------------";$output = "";try{$u = $upm.GetUserProfile($username);if ($u["AccountName"].Value -ne $null){$output = $output + $u["AccountName"].ToString() + ",";}else{$output = $output + "`"`",";}if ($u["PreferredName"].Value -ne $null){$output = $output + $u["PreferredName"].ToString() + ",";}else{$output = $output + "`"`",";}if ($u["Department"].Value -ne $null){$output = $output + $u["Department"].ToString() + ",";}else{$output = $output + "`"`",";}if ($u["WorkEmail"].Value -ne $null){$output = $output + $u["WorkEmail"].ToString()+ ",";}else{$output = $output + "`"`",";}if ($u["SPS-JobTitle"].Value -ne $null){$output = $output + $u["SPS-JobTitle"].ToString();}else{$output = $output + "`"`"";}Write-Output $output;}catch { }

<目次に戻る>

 

サイト コレクションのユーザー情報が登録されるタイミング
サイト コレクションのユーザー情報が登録されるタイミングは次のとおりです。

  • サイト管理者によりサイト コレクション内のいずれかのコンテンツ (サイト、リスト、ライブラリ、アイテム) または SharePoint グループに対して、Active Directory グループを介さずに直接権限を付与したタイミング
  • サイト コレクション内のいずれかのコンテンツ (サイト、リスト、ライブラリ、アイテム) または SharePoint グループに対して、Active Directory グループを介して権限登録されたユーザーが初めてコンテンツにアクセスしたタイミング

この時、その時点でのユーザーの表示名や電子メールアドレス、役職や部署などの情報が LDAP クエリを介して取得され、自動的にサイト コレクションのユーザー情報に登録されます。

<目次に戻る>

 

ユーザー プロファイルの情報が登録されるタイミング
ユーザー プロファイルのユーザー情報が登録されるタイミングは次のとおりです。

  • User Profile Service アプリケーションで外部ソースからプロファイルのインポート (同期) を行った
  • 管理者が User Profile Service アプリケーションの管理ページまたは SharePoint オブジェクト モデルを使用して明示的にユーザー プロファイルを作成した
  • ユーザーがサイトに初めてアクセスした
  • ユーザーが自身の個人用プロファイル ページを開いた
  • ユーザーが自身の個人用サイトにアクセスした

<目次に戻る>

 

ユーザー プロファイルの情報がサイト コレクションのユーザー情報に自動的に反映される仕組み
SharePoint Server では、サイト コレクションのユーザー情報が定期的にユーザー プロファイルの情報と同期されます。
Active Directory (AD) で更新されたユーザーの属性情報は、User Profile Service アプリケーションによって SharePoint のユーザー プロファイル情報と同期され、SharePoint のユーザー プロファイル情報はタイマー サービスによって各サイト コレクションのユーザー情報と同期されます。

〔Active Directory〕<=>〔User Profile Service Application〕<=>〔Site Collection〕

したがって、AD の情報をサイト コレクションのユーザー情報に反映させるには、予め User Profile Service アプリケーションに AD の情報を同期しておく必要があります。 <目次に戻る>

 

プロファイル同期に関連するタイマー ジョブ
プロファイル同期に関する主なタイマー ジョブは以下の3つです。

  • User Profile Service Application – ユーザー プロファイルの増分同期
    User Profile Service アプリケーションの同期スケジュールに直結しており、既定では毎日 1:00 に実行されるよう構成されます。
  • User Profile Service Application – ユーザー プロファイルから SharePoint へのクイック同期
    SharePoint サイト コレクションに追加した直後のユーザーに対して、User Profile Service アプリケーションにインポートされたプロファイル情報を適用するために定期的に実行されるジョブで、既定では 5 分おきに実行されるよう構成されます。
  • User Profile Service Application – ユーザー プロファイルから SharePoint への完全同期
    SharePoint サイト コレクションに登録されているすべてのアクティブ ユーザーに対して、User Profile Service アプリケーションにインポートされたプロファイル情報を適用するために定期的に実行されるジョブで、既定では 1 時間おきに実行されるよう構成されます。

パフォーマンスの観点から、クイック同期は SharePoint サイト コレクションに追加した直後のユーザーに対して最初の 1 回のみ実行されます。
各タイマー ジョブの設定内容はサーバーの全体管理サイトで [監視] セクションの [ジョブ定義の確認] から変更できます。

 <目次に戻る>

 

ユーザー プロファイルから SharePoint への同期対象になるユーザーと同期対象にならないユーザー
既定では、サイト コレクションにおいて「アクティブ ユーザー」と認識されているユーザーのみがユーザー プロファイルから SharePoint への同期対象となります。
個人用サイトにおいては、ユーザー自身がサイト コレクションの所有者となるため、ユーザーは必ずアクティブ ユーザーになります。それ以外のサイトにおいて、ユーザーがサイト コレクションの「アクティブ ユーザー」と認識されるためには、以下のいずれかの条件を満たす必要があります。

  • サイト コレクション内のいずれかのコンテンツ (サイト、リスト、ライブラリ、アイテム) または SharePoint グループに対して、Active Directory グループを介さずに直接権限を付与されている。
    または
  • サイト コレクション内のいずれかのコンテンツ (サイト、リスト、ライブラリ、アイテム) または SharePoint グループに対して、Active Directory グループを介して「投稿」権限以上の権限を登録されており、以下のいずれかの操作を行ったことがある。
    • ライブラリのドキュメントをアップロードまたは更新する
    • リストのアイテムを作成または更新する
    • ページを作成または編集する
    • ニュースフィードやディスカッション掲示板に投稿する
    • Web パーツ ページにアクセスして個人用ビューを保存する
    • サイトをフォローする

パフォーマンスの観点より、既定では Active Directory グループを介してサイトに権限を登録されるユーザーのうち、サイトに投稿を行わないユーザー (非アクティブ ユーザー) に対してはユーザー プロファイルの情報が同期されません。
つまり、Active Directory グループを介してサイトに権限を登録するユーザーをプロファイルの同期対象にするには、最低限投稿権限以上の権限が必要となります。

また、毎回すべてのユーザー プロファイルが同期の対象となるわけではなく、過去に同期が実行された後、変更が発生したユーザー プロファイルのみが同期の対象となります。User Profile Service アプリケーションのプロファイル データベースでは、ユーザー プロファイルの変更履歴を管理しており、過去に変更された内容が変更ログ (UserProfileEventLog テーブル) として記録されています。ユーザー プロファイルから SharePoint への同期タイマー ジョブが実行される際には、ユーザー プロファイルの変更ログの最終変更日時と、コンテンツ データベース単位で管理している同期情報テーブル (SiteSynch テーブル) の最終更新日時を比較して、前回同期実行日時以降に変更が加えられたユーザー プロファイル情報のみをサイトに同期します。たとえば、User Profile Service アプリケーションにおいて AD から完全同期を実行した後に一度ユーザー プロファイルから SharePoint への同期タイマー ジョブが実行された後、続けて AD から完全同期を実行したとしても、AD 上で特に変更が無ければプロファイルの変更ログにはエントリが記録されませんので、次回の同期タイマー ジョブの実行時にはサイト コレクションに対する同期は発生しません。

<目次に戻る>

 

非アクティブ ユーザーを同期対象にする方法
Active Directory グループを介してサイトに権限を登録されるユーザーのうち、サイトに投稿を行わないユーザー (非アクティブ ユーザー) をプロファイルの同期対象とすることも可能です。
非アクティブ ユーザーをプロファイルの同期対象とするには、以下の操作を実施する必要があります。

(手順) 非アクティブ ユーザーをプロファイルの同期対象とする方法

  1. ファームのいずれか1台の SharePoint サーバーにおいて、SharePoint 2013 管理シェルを管理者権限で起動します。
  2. 以下のコマンドを実行します。
    stsadm -o sync -IgnoreIsActive 1
    Stsadm -o sync -DeleteOldDatabases 0
  3. ユーザー プロファイルから SharePoint への完全同期タイマー ジョブが実行されるまで待ちます。(急ぎの場合はタイマー ジョブを手動で実行しても構いません。)

本操作を行うと、ユーザー プロファイルが存在し、サイト コレクションのユーザー情報に登録されたすべてのユーザーがプロファイルの同期対象になります。ユーザー数が多い (数千から数万単位の) 環境ではパフォーマンスの問題を引き起こす可能性がありますので、初回の同期はオフピークの時間帯に行うことをお勧めします。

(補足)

  • 「stsadm -o sync -IgnoreIsActive 1」コマンドでは、非アクティブ ユーザーに対してもアクティブ ユーザーと同様にプロファイル同期の対象とするためのフラグを設定します。
  • 「Stsadm -o sync -DeleteOldDatabases 0」コマンドは、データベースの古い同期情報を削除して、次回の完全同期の際にすべてのユーザーを対象としてプロファイル同期を行うために実行します。本コマンドを実行しない場合、前回完全同期が行われた後に変更されたユーザー プロファイルのみが同期の対象となり、それ以前の変更がサイトのユーザー情報に反映されません。本コマンドは「stsadm -o sync -IgnoreIsActive 1」コマンドの実行後、最初の同期の際に 1 回のみ実行すれば、以後同じ操作は不要です。
  • IgnoreIsActive コマンドは MOSS2007 および SPS2010 でもご利用いただけますが、以下の注意点があります。
    • MOSS2007 の 2010 年 4 月の CU 適用前の環境ではサイトに新しいユーザーを登録する度に「Stsadm -o sync -DeleteOldDatabases 0」コマンドを実行する必要があります。
    • SPS2010 RTM (初期リリース版) では、製品の問題により IgnoreIsActive コマンドが動作しません。この問題は 2010 年 10 月の CU で修正されています。

<目次に戻る>

 

サイト コレクションのユーザー情報にユーザー プロファイルの情報が同期されない場合のトラブルシューティング
以下に、サイト コレクションのユーザー情報にユーザー プロファイルの情報が同期されない場合のトラブルシューティングについて記載します。

最初に確認すること
SharePoint Server においてサイト コレクションのユーザー情報にユーザー プロファイルの情報が同期されない場合は、最初に以下の内容を確認します。

  • User Profile Service アプリケーションに正しくプロファイル情報がインポートされているか
  • 対象のユーザーはアクティブ ユーザーか

User Profile Service アプリケーションに正しくプロファイル情報がインポートされているかについては、先述の「User Profile Service アプリケーションにインポートされたユーザー プロファイルの情報の確認方法と編集方法」をご参照ください。

対象のユーザーがアクティブ ユーザーかどうか調べるには、コンテンツ データベースの UserInfo テーブルを参照する必要があります。
コンテンツ データベースの UserInfo テーブルに対するクエリ結果をテキスト ファイルに出力する PowerShell のサンプル コードを以下に記載します。SQL Server の管理権限がある場合は、SQL Server Management Studio から直接データベースに対してクエリを実行しても構いません。

(サンプル コード) コンテンツ データベースの UserInfo テーブルに対するクエリ結果をテキスト ファイルに出力する PowerShell のサンプル コード

$query = "SELECT tp_SiteID, tp_ID, tp_IsActive, tp_Login, tp_Title FROM UserInfo WITH(NOLOCK)"#以下の接続文字列の Server および Database パラメータの値をご利用の環境に合わせて適宜変更します。$connectionstring = "Server=ServerName;Database=WSS_Content;Trusted_Connection=True;"$connection = New-Object -TypeName System.Data.SqlClient.SqlConnection$connection.ConnectionString = $connectionstring$command = $connection.CreateCommand()$command.CommandText = $query$adapter = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter $command$dataset = New-Object -TypeName System.Data.DataSet$adapter.Fill($dataset)#ファイルの出力先を適宜変更します。$dataset.Tables[0] | ft | Out-File C:\out.txt -Width 250

tp_IsActive の値が 1 になっているユーザーはアクティブ ユーザーです。tp_IsActive の値が 0 になっているユーザーは非アクティブ ユーザーです。
tp_SiteID の値がサイト コレクションの ID を示します。tp_SiteID の値からサイト コレクションの URL を調べるには以下の PowerShell コマンドを実行します。

Get-SPSite -Identity <ID>

<目次に戻る>

 

Web アプリケーションが User Profile Service アプリケーションに関連付けられているかチェックする
Web アプリケーションが User Profile Service アプリケーションに関連付けられていない場合、プロファイルの同期対象となりません。
以下の手順で Web アプリケーションが User Profile Service アプリケーションに関連付けられているか確認します。

(手順) Web アプリケーションの関連付けを確認する

  1. サーバーの全体管理サイトにアクセスします。
  2. [アプリケーション構成の管理] をクリックします。
  3. [サービス アプリケーション] セクションの [サービス アプリケーションの関連付けの構成] をクリックします。
  4. 対象の Web アプリケーションのアプリケーション プロキシ グループ名をクリックします。
  5. サービス アプリケーションの関連付けの構成画面で User Profile Service アプリケーションのチェック ボックスがオンになっていることを確認します。

<目次に戻る>

 

一度に同期されるユーザープロファイルの数が 100 件を超えていないか確認する(SharePoint 2010 の場合)
「User Profile Service Application – ユーザー プロファイルから SharePoint への完全同期」タイマージョブの動作では、効率的にユーザー プロファイルからサイト コレクションのユーザー情報に同期を行うために、2 回目以降は変更が生じたプロファイルの情報のみを同期する動作となっており、実質的には増分同期と同等の動作になっています。本タイマージョブの増分同期の動作では、一度に更新できるユーザー情報の件数が 1 つのサイトコレクションあたり 100 件に制限されており、100 件を超えるプロファイル情報はサイトのユーザー情報に同期されません。また、増分同期処理の際に無視された 100 件を超えるプロファイル変更情報は、次回以降の増分同期の際には対象になりません。そのため、「User Profile Service Application – ユーザー プロファイルから SharePoint への完全同期」タイマージョブにより、一度に更新されるユーザー数が 1 つのサイトコレクションあたり 100 件を超えた場合、100 件を超えた部分のユーザー情報が恒久的に同期されない結果になります。

なお、SharePoint サイト コレクションに追加した直後のユーザーに対してのみ実行される「User Profile Service Application – ユーザー プロファイルから SharePoint へのクイック同期」ジョブでは、このような制限はありません。

この問題に対処するためには、以下のいずれかの対応を行う必要があります。

  • 「User Profile Service Application – ユーザー プロファイルから SharePoint への完全同期」タイマージョブの実行頻度を上げる
    「User Profile Service Application – ユーザー プロファイルから SharePoint への完全同期」タイマージョブの実行頻度を上げることで、1 つのサイトコレクションあたりの一度に更新される対象となるユーザープロファイルの変更を 100 件以内に収めることができないか検討します。

  • データベースの同期情報をリセットする
    大規模な組織変更など、一度に 100 件を超えるプロファイル情報の変更が予め想定される場合には、後述の「データベースの同期情報をリセットする」の手順に従い、データベースの同期情報をリセットすることで、過去の同期情報を強制的にリセットし、次回の増分同期で強制的にすべてのユーザープロファイルを同期の対象とすることができます。管理者は Stsadm -o sync -DeleteOldDatabases コマンドをタスクスケジューラなどでスケジュールに組み込むことができます。 なお、ユーザープロファイルの数が多い環境では、同期処理により一時的な負荷が生じる可能性がありますので、オフピーク時に実施していただくとともに、事前に動作テストを実施していただくことをお勧めします。

※SharePoint 2013 ではプロファイル同期の仕組みが大幅に変わり、原則内部的には 200 件毎更新処理が行われ、最終的に更新が発生したユーザーすべてに対して同期が行われるためこの問題には該当しません。

(参考)
SharePoint Back-End Technical Specifications
https://msdn.microsoft.com/en-us/library/jj633109.aspx
[MS-UPSSYNC]: User Profile Synchronization Stored Procedures Protocol Specification
----
3.1.4.26 profilesynch_US_IncrementalSynch

However, a single call to this stored procedure MUST NOT return more than 100 user profiles.
----

<目次に戻る>

 

データベースの同期情報をリセットする
User Profile Service アプリケーションのプロファイル データベースでは、コンテンツ データベースとユーザー プロファイルの同期情報が管理されています。この情報には、同期対象となるコンテンツ データベースの ID や、最終同期日時に関する情報が記録されています。何らかの理由でこれらの同期情報の整合性が失われると、同期処理が正常に動作しない場合があります。このような場合には以下のコマンドを実行することで同期情報をリセットし状況を改善できる可能性があります。

注意事項:データベースの同期情報をリセットすると、次回のユーザー プロファイルから SharePoint への完全同期のタイミングで、ユーザー プロファイルが存在し、サイト コレクションのユーザー情報に登録されたすべてのユーザーがプロファイルの同期対象になります。ユーザー数が多い (数千から数万単位の) 環境ではパフォーマンスの問題を引き起こす可能性がありますので、初回の同期はオフピークの時間帯に行うことをお勧めします。

(手順) データベースの同期情報をリセットする

  1. ファームのいずれか1台の SharePoint サーバーにおいて、SharePoint 2013 管理シェルを管理者権限で起動します。
  2. 以下のコマンドを実行します。
    Stsadm -o sync -DeleteOldDatabases 0

<目次に戻る>

 

サイト コレクションのクォータ制限に達していないかチェックする
サイト コレクションのユーザー情報リストは内部的に特殊なリストとして扱われており、各ユーザー情報は特殊なアイテムとして扱われるため、サイト コレクションがクォータ制限に達しているとユーザー情報を更新できません。
以下の手順でサイト コレクションのクォータ制限に達していないか確認します。

(手順) サイト コレクションのクォータ設定を確認する

  1. サーバーの全体管理サイトにアクセスします。
  2. [アプリケーション構成の管理] をクリックします。
  3. [サイト コレクション] セクションの [クォータとロックの構成] をクリックします。
  4. 対象のサイト コレクションを選択してサイトのクォータ情報を確認します。

 <目次に戻る>

 

サイト コレクションがロックされていないか確認する
サイト コレクションのユーザー情報リストは内部的に特殊なリストとして扱われており、各ユーザー情報は特殊なアイテムとして扱われるため、サイト コレクションが読み取り専用にロックされているとユーザー情報を更新できません。
以下の手順でサイト コレクションがロックされていないか確認します。

(手順) サイト コレクションのロック状況を確認する

  1. サーバーの全体管理サイトにアクセスします。
  2. [アプリケーション構成の管理] をクリックします。
  3. [サイト コレクション] セクションの [クォータとロックの構成] をクリックします。
  4. 対象のサイト コレクションを選択してサイト ロックの情報が「ロックなし」になっていることを確認します。

 <目次に戻る>

 

コンテンツ データベースが読み取り専用となっていないか確認する
コンテンツ データベースが SQL Server において読み取り専用となっていた場合は、データの書き込みに失敗するためプロファイルの同期が行われません。
以下の手順でコンテンツ データベースのステータスを確認できます。

(手順) データベースの状態を確認する方法

  1. データベース サーバーに管理者権限でログインし、SQL Server Management Studio を起動してデータベースインスタンスに接続します。
  2. 左側ペインにて [データベース] を展開し、該当のコンテンツ データベースを右クリックし、[プロパティ] をクリックします。
  3. [プロパティ] ダイアログの左側ペインにて [オプション] をクリックします。
  4. 画面右側に表示された [その他のオプション] 項目の [状態] セクションにある [読み取り専用データベース] を確認し、"True" になっていないか確認します。("False" となっていれば問題ありません。)

 <目次に戻る>

 

Web アプリケーションが除外対象に設定されていないか確認する
ユーザー プロファイルから SharePoint への同期機能では、特定の Web アプリケーションを同期対象から除外するための機能が備わっています。
以下のコマンドを入力することで、ひとつまたは複数の Web アプリケーションをプロファイル同期の対象外とできます。

例) Stsadm -o sync -ExcludeWebApps "https://WebApp01, https://WebApp02"

過去に上記コマンドを実行された経緯がある場合、Web アプリケーション単位でサイト コレクションへのプロファイル同期が行われなくなります。設定を元に戻す際には以下のコマンドを入力して設定を初期化します。

Stsadm -o sync -ExcludeWebApps

過去に設定された経緯が不明な場合は、取り急ぎ上記コマンドを実施することで切り分けが可能です。

なお、設定内容は SharePoint 構成データ オブジェクトとして保存されるため、通常は外部から参照できませんが、構成データベースに対して直接クエリをかけることで値を参照できます。
以下のクエリの実行結果より得られた値から m_WebApplicationSyncExcludeList フィールドの値を確認し、Web Application ID の値が入っていれば設定は有効です。

(サンプル コード) PowerShell で構成データベースに対してクエリを実行した結果をテキスト ファイルに出力するサンプル コード

$query = "SELECT Properties FROM Objects WITH(NOLOCK) WHERE Properties LIKE N'%Microsoft.Office.Server.Administration.UserProfileServiceProxy%'"#以下の接続文字列の Server および Database パラメータの値をご利用の環境に合わせて適宜変更します。$connectionstring = "Server=SQLServerName;Database=SharePoint_Config;Trusted_Connection=True;"$connection = New-Object -TypeName System.Data.SqlClient.SqlConnection$connection.ConnectionString = $connectionstring$command = $connection.CreateCommand()$command.CommandText = $query$adapter = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter $command$dataset = New-Object -TypeName System.Data.DataSet$adapter.Fill($dataset)#ファイルの出力先を適宜変更します。$dataset.Tables[0] | ft | Out-File C:\out.txt -Width 2000

<目次に戻る>

 

User Profile Service アプリケーションでユーザー プロファイルの同期処理が進行中でないか確認する
更新の競合を避けるため、User Profile Service アプリケーションで Active Directory などの外部データソースからプロファイルをインポート (同期) している処理の最中は、サイト コレクションへのプロファイル同期ジョブがスキップされます。
前回の同期ジョブの実行時に User Profile Service アプリケーションでユーザー プロファイルの同期処理が進行中であった可能性が考えられる場合には、User Profile Service アプリケーションで同期処理が完了したことを確認してから、サイト コレクションへのプロファイル同期ジョブを実行します。

User Profile Service アプリケーションでユーザー プロファイルの同期処理が進行中かどうかは、以下の方法で確認できます。

(手順) User Profile Service アプリケーションでユーザー プロファイルの同期処理が進行中でないか確認する

  1. サーバーの全体管理サイトにアクセスします。
  2. [アプリケーション構成の管理] セクションの [サービス アプリケーションの管理] をクリックします。
  3. サービス アプリケーションの一覧から User Profile Service アプリケーションの名前をクリックして User Profile Service アプリケーションの管理サイトを開きます。
  4. ページ右側の [プロファイルの同期状態] が「アイドル」になっていることを確認します。

 <目次に戻る>

 

データベースがオフラインでないか確認する (MOSS2007 のみ)
MOSS2007 の 2009 年 10 月の累積的な更新プログラム (CU ビルド 12.0.6518.5000) 適用前の環境では、コンテンツ データベースがオフライン状態の時にユーザー プロファイルが同期できない問題がありました。
現在この問題は改善していますが、MOSS2007 において 2009 年 10 月の CU を適用されていない環境ではご注意ください。

(手順) コンテンツ データベースがオフラインになっていないか確認する方法

  1. サーバーの全体管理サイトにアクセスします。
  2. [アプリケーション構成の管理] をクリックします。
  3. [SharePoint Web アプリケーション構成の管理] セクションの [コンテンツ データベース] をクリックします。
  4. 対象のコンテンツ データベース名をクリックします。
  5. データベースの状態が「準備完了」になっていることを確認します。

 <目次に戻る>

 

コンテンツ データベースまたはサイト コレクションが Moving の状態になっていないか確認する (MOSS2007 のみ)
MOSS2007 では、コンテンツ データベースまたはサイト コレクションを移動する前に共有サービス プロバイダとの接続を切るために、「Stsadm -o preparetomove」コマンドを実施する必要がありました。
このコマンドを実行すると、対象のコンテンツ データベース ID またはサイト コレクション ID が共有サービス プロバイダ データベースの同期情報管理テーブル (SiteSynch テーブル) に「Moving」状態として登録され、以降のプロファイル同期の対象になりません。データベースやサイト コレクションを別の環境に移動するケースにおいて、移動元の環境でデータが再利用されなければ問題ありませんが、再利用される場合は「Stsadm -o preparetomove」コマンドで「Undo」操作を行わなければならないことに注意してください。

MOSS2007 SP1 の移行シナリオでは、コンテンツ データベースをファームから切り離してアップグレードするシナリオにおいて「Stsadm -o preparetomove」コマンドの実施を行う必要がありました。これは、コンテンツ データベースをファームから切り離して再接続した場合、同じ環境であってもデータベース ID が変わるため、古い情報を共有サービス プロバイダから切り離す必要があったためです。しかしながら、MOSS2007 インフラストラクチャ更新プログラム以降の環境では、同じ環境でコンテンツ データベースを切り離して再接続しても、データベース ID が変わらないように動作が変更されました。このため、MOSS2007 インフラストラクチャ更新プログラム以降の環境において、同じ環境で使用するコンテンツ データベースに対して「Stsadm -o preparetomove」コマンドを実行してしまうと、データベースの再接続後に引き続き「Moving」フラグが付いたままとなり、プロファイル同期が行われなくなります。

(手順) Preparetomove 操作を行ったコンテンツ データベースまたはサイト コレクションを再び同期対象に戻す方法

  1. ファームの任意の SharePoint Server に管理者権限でログインしてコマンド プロンプトを起動します。
  2. 以下のパスに移動します。
    %COMMONPROGRAMFILES%\Microsoft shared\Web server extensions\12\Bin
  3. 以下の例のようにコマンドを実行します。
    Stsadm -o preparetomove -ContentDB -undo
    または
    Stsadm -o preparetomove -Site -undo

(参考資料)
Preparetomove: Stsadm operation (Office SharePoint Server)
https://technet.microsoft.com/en-us/library/cc262122(v=office.12).aspx <目次に戻る>

 

Office Server Web Services で使用される自己発行証明書が破損していないか確認する (MOSS 2007 のみ)
MOSS 2007 サーバーに Microsoft .NET Framework 3.5 Service Pack 1 が適用された環境では、共有サービス プロバイダによって使用される Office Server Web Services で使用される SSL 自己発行証明書が破損する問題が報告されています。この問題が発生すると、プロファイル同期が正しく動作しなくなり、ユーザープロファイルの情報がサイト コレクションに同期されなくなることが報告されています。
現象の詳細および回避策については以下の資料を参照してください。

(参考資料)
SSL でセキュリティ保護された Office SharePoint Server 2007 サイトまたは共有サービス プロバイダの [検索の設定] ページを参照できない
https://support.microsoft.com/kb/962928 <目次に戻る>

 

その他のトラブルシューティング
このセクションではユーザー プロファイルの同期に関連するその他のトラブルシューティングについて記載します。

Active Directory セキュリティ グループの表示名が更新されない
サイト コレクションに登録した Active Directory セキュリティ グループの情報 (表示名、電子メールアドレス) は、プロファイルの同期対象になりません。
サイト コレクションに登録した Active Directory セキュリティ グループの表示名を変更するには、以下の手順を実施します。

(手順) サイト コレクションに登録した Active Directory セキュリティ グループの表示名を変更する

  1. 対象のセキュリティ グループのアカウント ID を調べるため、「/_catalogs/users」または「/_layouts/15/people.aspx?MembershipGroupId=0」に直接アクセスしてサイト コレクションに含まれるユーザーの一覧 (ユーザー情報リスト) を表示します。
  2. 対象のセキュリティ グループの名前をクリックしてユーザー情報ページを表示し、「アカウント」の情報を確認します。
  3. SharePoint 管理 PowerShell を管理者権限で起動して以下のコマンドを実行します。
    #手順 2 で確認したアカウント名を指定します。$account = "c:0+.w|s-1-5-21-2113820013-3230978303-1817385773-2103"#新しい表示名と電子メールアドレスを指定します。$title = "NewTitle"$emailAddress = "NewEmail@contoso.local"#以下のコマンドではすべてのサイト コレクションのユーザー情報を更新します。Get-SPSite -Limit all | % {$domainGroup = $_.OpenWeb().SiteUsers[$account]; if ($domainGroup -ne $null) {$domainGroup.DisplayName=$title; $domainGroup.Email=$emailAddress; $domainGroup.Update()}}

<目次に戻る>

 

通知が設定できずユーザーが有効な電子メールアドレスを持たない旨のメッセージが表示される
サイト コレクションのユーザー情報に電子メール アドレスが登録されていない場合にこの問題が発生します。
ユーザー プロファイルが正しく同期されているか確認するとともに、ユーザー プロファイルに電子メールアドレスが登録されているか確認します。
必要に応じてサイト コレクションのユーザー情報を手動で編集して電子メールアドレスを登録します。

(関連情報) サイト コレクションのユーザー情報の確認方法と編集方法 User Profile Service アプリケーションにインポートされたユーザー プロファイルの情報の確認方法と編集方法 サイト コレクションのユーザー情報にユーザー プロファイルの情報が同期されない場合のトラブルシューティング <目次に戻る>