信頼されたフォレスト内の任意のドメイン内のユーザーが完全一致を受信しないユーザー選択エラーが見つかりました

元の KB 番号:   2874332

現象

2 つの Active Directory フォレスト間のフォレスト信頼を構成し、Windows インターネット ネーム サービス (WINS) で NetBIOS 解決が有効になっていないとします。 この場合、Microsoft SharePoint Server 2010 サイトのユーザー選択は、ローカル フォレスト内のユーザーに対して正常に機能します。 ただし、信頼されたフォレスト内の任意のドメイン内のユーザーの場合、ユーザー選択は機能しません。

さらに、ユーザー選択機能はユーザー アカウントを見つけて解決するようです。 ただし、ユーザーが [OK] をクリックしてサイトにポストバックすると、次のエラー メッセージが表示されます。

完全一致が見つかりませんでした。 解決しなかった項目をクリックすると、その他のオプションが表示されます。

実行すると、 NLtest /dsgetdc 同様のエラー メッセージが表示されます。 たとえば、実行すると、 NLtest /dsgetdc:ExternalContoso 次のエラー メッセージが表示されます。

DC 名の取得に失敗しました:Status = 1355 0x54b ERROR_NO_SUCH_DOMAIN

統合ログ システム (ULS) ログには、次のようなエラーがあります。

w3wp.exe (0x0E98) 0x1DC4 SharePoint Foundation General 72e1 High Unable to get domain DNS or forest DNS for domain ExternalContoso. ErrorCode=1355

w3wp.exe (0x0E98) 0x1DC4 SharePoint Foundation General 72e9 Medium Error in resolving user 'ExternalContoso\UserName' : System.ArgumentException: Specified value is not supported for the {0} parameter. Microsoft.SharePoint.Utilities.SPUserUtility.GetDomainControllerToSearch(SPWebApplication webApp, String domainName) at Microsoft.SharePoint.Utilities.SPActiveDirectoryPrincipalBySIDResolver.ResolvePrincipal(String input, Boolean inputIsEmailOnly, SPPrincipalType scopes, SpPrincipalSource ソース、SPUserCollection usersContainer) at Microsoft.SharePoint.Utilities.SPUtility.ResolvePrincipalInternal(SPWeb web, SPWebApplication webApp, Nullable ` 1 urlZone, String input, SPPrincipalType scopes, SPPrincipalSource sources, SPUserCollection usersContainer, Boolean inputIsEmailOnly, Boolean alwaysAddWindowsResolver)。

原因

この問題は 、[OK] をクリックすると、ユーザー選択ウィンドウが NetBIOS 呼び出しを行ってドメイン名の解決を試みる場合に発生します。 お客様が WINS を設定しないので、NetBIOS ブロードキャストが発生します。 ただし、サブネットの外部でブロードキャストが有効になっていないため、ブロードキャストは信頼されたドメインを見つけできません。

解決方法

手順 1: 修正プログラムをダウンロードしてインストールする

SharePoint 修正プログラム パッケージ 2687339: 2012年 8 月をダウンロードしてインストールできます。

注意

2012 年 8 月 28 日より後にリリースされた新しい修正プログラム パッケージがインストールされている場合、または SharePoint Server 2010 Service Pack 2 を使用している場合は、修正プログラム 2687339 をインストールする必要はありません。

手順 2: 修正プログラムを有効にする

NETBIOS または WINS が有効になっていないユーザー選択ツールを使用するには、すべての Web アプリケーションで Windows PowerShell を明示的に使用してユーザーを解決するドメインを指定する必要があります。

修正プログラムをインストールした後、新しい機能を有効にするには、2 つのプロパティを設定する必要があります。

  • $farm.Properties["disable-netbios-dc-resolve"] がファーム レベルで設定されている
  • $wa.PeoplePickerSettings.SearchActiveDirectoryDomains は Web アプリケーション レベルで設定されます。

ユーザー選択ダイアログで検索する各ドメインの NetBIOS 名と DNS 名のマッピングを SearchActiveDirectoryDomains 作成します。

つまり、信頼された各ドメインとローカル ドメインをユーザー選択ウィンドウの設定で一覧表示する必要があります。 フォレスト名を指定し、ユーザー選択でフォレストからすべてのドメインを解決することはできません。

この例Windows PowerShell、次のサンプルに基づいてドメインのプロパティを設定できます。 YourWebApplicationURL などのプレースホルダー<、> ドメイン名を独自の値に置き換える。

# --------------------------------------------------------------------------------------
Add-PSSnapin Microsoft.SharePoint.PowerShell -ea silentlycontinue
# Enable the global setting for the farm. You must do this part only once.
$farm = get-spfarm
$farm.Properties
$farm.Properties["disable-netbios-dc-resolve"] = 'true'
$farm.Properties
$farm.Update()

# --------------------------------------------------------------------------------------
# Set the SearchActiveDirectoryDomains property for a single web application. You should only do this part once per-web application.
# Note: SearchActiveDirectoryDomains is the PowerShell equivelent of peoplepicker-searchadforests
$wa = Get-SPWebApplication [http://](http://m1garand/)
# Save current PP settings to text file in case you need to refer to those
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains | out-file pp_settings_before.txt
# Clear the PP settings.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Clear()

# You must repeat the following example for all the domains for which you want People Picker to work on this particular web application.
# The following is an example of adding three domains from the same forest and one domain from a trusted forest:
# --------------------------------------------------------------------------------------
$newdomain = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain.DomainName ='oneDomain.corp.contoso.com'; # specify the DNS name
$newdomain.ShortDomainName ='oneDomain'; # Specify the netbios name.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain)

$newdomain2 = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain2.DomainName ='corp.contoso.com'; # specify the DNS name
$newdomain2.ShortDomainName ='CORP'; # Specify the netbios name.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain2)

$newdomain3 = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain3.DomainName ='contoso.com'; # specify the DNS name
$newdomain3.ShortDomainName ='CTSO'; # Specify the netbios name.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain3)

$newdomain4 = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain4.DomainName ='fabrikam.com'; # specify the DNS name
$newdomain4.ShortDomainName ='FAB'; # Specify the netbios name.
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain4)
# --------------------------------------------------------------------------------------

# Once you have added all the required domains, save settings for the web app.
$wa.update()
# --------------------------------------------------------------------------------------

注意

修正プログラムを有効にするには、Web アプリケーションごとにこのサンプル スクリプトのバージョンを個別に実行する必要があります。

一方的な信頼の例

この例は、ターゲット ドメインとの一方通行の信頼が存在し、アプリケーション プール アカウントにアクセス権を持たなかった場合にのみ使用します。

上記の例と似ていますが、アカウント名とパスワードを指定して一方通行の信頼されたドメインに接続します。

# --------------------------------------------------------------------------------------
# First, you have to run setapppassword on every server in the farm.
# This sets the encryption key that is used with the password that you enter for the account that you specify for $newdomain.loginname
stsadm -o setapppassword -password <password>.
# Where <password> is any string that you want to use as an encryption key.
# This has to be run on every server by using the same value for <password>.

# Now add the one-way trusted domain:
Add-PSSnapin Microsoft.SharePoint.PowerShell -ea silentlycontinue
$wa = Get-SPWebApplication http://<YourWebApplicationURL>
$newdomain = new-object Microsoft.SharePoint.Administration.SPPeoplePickerSearchActiveDirectoryDomain
$newdomain.DomainName =<'oneDomain.corp.contoso.com'>; # specify the DNS name
$newdomain.ShortDomainName =<'oneDomain'>; # Specify the netbios name.
$newdomain.loginname = <'oneDomain\userName'> # Specify an account that has access to the remote domain.
# Do not change anything in the next two lines. It prompts you to enter the password.
[System.Security.SecureString]$secureStringValue = Read-Host "Enter the account password: " -AsSecureString
$newdomain.setpassword($secureStringValue)
$wa.PeoplePickerSettings.SearchActiveDirectoryDomains.Add($newdomain) #Add the on-way trusted domain
$wa.update() #update the web app
# --------------------------------------------------------------------------------------

回避策

修正プログラムまたは Service Pack 2 をインストールできない場合は、NetBIOS ドメイン名のドメイン解決情報を Netlogon サービスにキャッシュすることで、この問題を回避できます。 これを行うには、次の手順を実行します。

  1. 外部ドメインごとに次のコマンドを含むバッチ ファイルを作成します。

    Nltest /dsgetdc:ExternalDomainName.FQDN
    Nltest /dsgetdc:ExternalDomainName
    

    たとえば、次のバッチ ファイルを作成します。

    Nltest /dsgetdc:external.contoso.com
    Nltest /dsgetdc:external
    Nltest /dsgetdc:domain2.contoso.com
    Nltest /dsgetdc:domain2
    
  2. このバッチ ファイルは、各 Web フロントエンド サーバーで 15 分ごとにスケジュールされたタスクとして実行します。 これにより、Netlogon キャッシュが設定された状態を維持し、エラーを回避する必要があります。