として指定されている SQL Server 2008 R2 データベースに計算列があります(suser_sname([USERSID]))
。プログラムで新しいユーザーが作成されると、Active Directory ユーザーが作成され、新しいユーザーの SID を含むレコードがデータベースに挿入されます[USERSID]
。
新しいユーザーのレコードを作成した直後にデータベースから新しいユーザーのレコードを開こうとすると、計算されたユーザー名は常に空白になります。ユーザー名が解決されるまで数秒かかる場合があります。これは、ユーザーが Active Directory で作成された場合にのみ発生し、ローカル マシンでユーザーを作成する場合には発生しません。
を使用して、データベースではなくコードでロジックを実行しようとしましたが、この呼び出しを行っLookupAccountSid
た後に を受け取りました。ERROR_NONE_MAPPED
また、 をスローSecurityIdentifier.Translate
する と同様の結果で使用してみました。LookupAccountSid
IdentityNotMappedException
これらの呼び出しのいずれかが行われる前に、デバッグ中に実行を数秒間一時停止すると、正しい値が返されます。
新しい Active Directory ユーザーを作成した後、数秒間ユーザー名の値を返すことができないのはなぜですか? この値をより早く正しく返すよう強制する方法はありますか? または (スリープして値を再チェックする以外に) 利用可能になるのを待ちますか?