sql-server - 更改 AD 登录凭据后返回无效的 susername_sname()/SYSTEM_USER

标签 sql-server

我们正在使用 suser_sname()SYSTEM_USER 返回用户名(通过信任连接)。在过去一个月内,有人在 Active Directory 中更改了登录名。然而,这两个函数仍然返回旧的登录名。

此人自更改后已多次重新启动他们的 PC。我不确定服务器是否从那时起重新启动。其中一台将于明天重新启动,我们假设这将解决一台服务器的情况。

SQL Server 是否有另一种方法可以在不重新启动的情况下识别此更改(假设重新启动可以修复它)。

编辑: 个人的登录名不存在于 SQL Server 中,但他们所属的 AD 组位于服务器上。

例如, Domain\AtticusFinch 未在 SQL 中设置,但 Domain\Lawyers 确实存在。在这种情况下,Atticus 的登录名更改为 Domain\AtticusF1

编辑 2: 简单地停止和启动 SQL 服务并不能解决问题。然而,重新启动确实修复了它。

最佳答案

http://support.microsoft.com/kb/946358/en-us


要解决此问题,请禁用域成员计算机上的本地 SID 缓存。为此,请按照下列步骤操作: 1. 打开注册表编辑器。

要在 Windows XP 或 Windows Server 2003 中执行此操作,请单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。

要在 Windows Vista 和更新版本中执行此操作,请单击“开始”,在“开始搜索”框中键入 regedit,然后按 ENTER。

  1. 找到并右键单击以下注册表子项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
  2. 指向新建,然后单击 DWORD 值。
  3. 键入 LsaLookupCacheMaxSize,然后按 ENTER。
  4. 右键单击“LsaLookupCacheMaxSize”,然后单击“修改”。
  5. 在“数值数据”框中,键入 0,然后单击“确定”。
  6. 退出注册表编辑器。

我补充一点,执行此操作后您必须重新启动机器。


然后,在 AD 中重命名后,用户必须重新登录,并且

dbcc freesystemcache('ALL')

必须在sql server上执行。

关于sql-server - 更改 AD 登录凭据后返回无效的 susername_sname()/SYSTEM_USER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3970310/

相关文章:

sql-server - 从组中选择最大限制 1

SQL随机数不起作用

sql-server - 首先使用实体​​框架代码播种数据时如何控制主键值

sql - 查询优化方法

SQL删除重复项,保存特定列的最低值

sql - 排名超过切碎的 xml

sql - 如何获得日期 + 时间的确定性计算值

c# - identity_insert 对元数据表的使用是否良好

java - 立即创建 SQL Server 死锁的最小 Java JDBC 程序?

sql-server - 从 Excel 电子邮件附件更新 SQL Server (2014) 表