LsaLookupSids 関数は、ユーザー名が変更された場合、新しいユーザー名ではなく古いユーザー名を返す場合があります

この記事では、Windows でのキャッシュ更新の遅延について説明します。

適用対象: Windows 10 - すべてのエディション、Windows Server 2012 R2
元の KB 番号: 946358

現象

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

  • ドメイン メンバー コンピューターで、アプリケーションは LsaLookupSids 関数を呼び出して、セキュリティ識別子 (SID) をユーザー名に変換します。
  • ドメイン コントローラーでユーザー名が変更されました。

このシナリオでは、 LsaLookupSids 関数は、新しいユーザー名ではなく古いユーザー名を返す場合があります。 この動作により、アプリケーションが正しく動作しなくなる可能性があります。

原因

ローカル セキュリティ機関 (LSA) は、SID とユーザー名の間のマッピングをドメイン メンバー コンピューターのローカル キャッシュにキャッシュします。 キャッシュされたユーザー名はドメイン コントローラーと同期されません。 ドメイン メンバー コンピューター上の LSA は、まずローカル SID キャッシュに対してクエリを実行します。 既存のマッピングが既にローカル SID キャッシュに存在する場合、LSA はドメイン コントローラーに対してクエリを実行するのではなく、キャッシュされたユーザー名情報を返します。 この動作は、パフォーマンスの向上を目的としています。

キャッシュ エントリはタイムアウトしますが、アプリケーションによる定期的なクエリによって、キャッシュ エントリの有効期間が最大で維持される可能性があります。

回避策

この問題を回避するには、ドメイン メンバー コンピューターでローカル SID キャッシュを無効にします。 これを行うには、次の手順を実行します。

  1. レジストリ エディターを開きます。

    Windows XP または Windows Server 2003 でこれを行うには、[ スタート] をクリックし、[ 実行] をクリックし、「 regedit」と入力して、[OK] をクリック します

    Windows Vista 以降でこれを行うには、[スタート] をクリックし、[検索の開始] ボックスに「regedit」と入力し、Enter キーを押します。

  2. 次のレジストリ サブキーを見つけて右クリックします。
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

  3. [ 新規] をポイントし、[ DWORD 値] をクリックします。

  4. 「LsaLookupCacheMaxSize」と入力し、Enter キーを押します。

  5. LsaLookupCacheMaxSize を右クリックし、[変更] をクリックします。

  6. [ 値データ ] ボックスに「0」と入力し、[ OK] をクリックします。

  7. レジストリ エディターを終了します。

注:

LsaLookupCacheMaxSize レジストリ エントリは、ローカル SID キャッシュに保存できるキャッシュされたマッピングの最大数を設定します。 既定の最大数は 128 です。 LsaLookupCacheMaxSize レジストリ エントリが 0 に設定されている場合、ローカル SID キャッシュは無効になります。

状態

動作は仕様です。

詳細

LSA は、ドメイン メンバー コンピューター上に SID キャッシュを保持します。 このキャッシュには、SID とユーザー名の間のマッピングが格納されます。 SID 情報がローカル キャッシュに存在する場合、LSA は、ユーザー名が変更されたかどうかを確認するのではなく、キャッシュされたユーザー名情報を返します。

ローカル SID キャッシュは、ドメイン コントローラーのワークロードとネットワーク トラフィックを削減するのに役立ちます。 ただし、ローカル キャッシュとドメイン コントローラーの間で不整合が発生する可能性があります。

関連情報

TechNet には、このキャッシュの詳細な説明など、Sid-Name 解決方法に関する記事があります。

Windows で SID とアカウント名をマップする方法

LsaLookupSids 関数の詳細については、次の Microsoft Web サイトを参照してください。

LsaLookupSids 関数