我们的 SQL Server 2008 R2 数据库中有一个计算列,指定为(suser_sname([USERSID]))
. 当在我们的程序中创建一个新用户时,它会创建一个 Active Directory 用户,然后将一条记录插入到数据库中,新用户的 SID 到列[USERSID]
中。
如果有人在创建新用户记录后立即尝试从数据库中打开它,则计算出的用户名始终为空。解析用户名可能需要几秒钟。这仅在 Active Directory 中创建用户时发生,在本地计算机上创建用户时不会发生。
我已经尝试通过使用在代码中执行逻辑,而不是在数据库中,但在进行此调用后LookupAccountSid
会收到一个。ERROR_NONE_MAPPED
我也尝试过使用SecurityIdentifier.Translate
与 类似的结果LookupAccountSid
,它会抛出IdentityNotMappedException
.
如果我在调试期间暂停执行几秒钟,然后再进行这些调用中的任何一个,则会返回正确的值。
为什么创建新的 Active Directory 用户后,用户名值在几秒钟内无法返回?有没有办法强制这个值更快地正确返回 - 或者等待它可用(除了睡眠和重新检查值)?