1

我们的 SQL Server 2008 R2 数据库中有一个计算列,指定为(suser_sname([USERSID])). 当在我们的程序中创建一个新用户时,它会创建一个 Active Directory 用户,然后将一条记录插入到数据库中,新用户的 SID 到列[USERSID]中。

如果有人在创建新用户记录后立即尝试从数据库中打开它,则计算出的用户名始终为空。解析用户名可能需要几秒钟。这仅在 Active Directory 中创建用户时发生,在本地计算机上创建用户时不会发生。

我已经尝试通过使用在代码中执行逻辑,而不是在数据库中,但在进行此调用后LookupAccountSid会收到一个。ERROR_NONE_MAPPED

我也尝试过使用SecurityIdentifier.Translate与 类似的结果LookupAccountSid,它会抛出IdentityNotMappedException.

如果我在调试期间暂停执行几秒钟,然后再进行这些调用中的任何一个,则会返回正确的值。

为什么创建新的 Active Directory 用户后,用户名值在几秒钟内无法返回?有没有办法强制这个值更快地正确返回 - 或者等待它可用(除了睡眠和重新检查值)?

4

0 回答 0