次の方法で共有


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

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

元の KB 番号: 946358

現象

以下のシナリオについて考えてみます。

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

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

原因

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

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

回避策

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

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

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

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

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

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

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

  5. LsaLookupCacheMaxSize を右クリックし、 Modify をクリックします。

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

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

Note

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

状態

この動作は仕様によるものです。

詳細

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

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

関連情報

TechNet には、このキャッシュの詳細な説明など、Sid-Name resolution のアプローチに関する記事があります。

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

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

LsaLookupSids 関数