我们更改了其中一位 ActiveDirectory 用户的用户名,但现在,几天后,他们登录时,旧用户名仍显示在 SQL Profiler 中。这些 SID 是否缓存在本地,并带有用户名的副本?我可以清除此缓存吗?
该用户没有“直接”访问 SQL 服务器的权限,但是属于可以访问该服务器的本地安全组。
答案1
SQL 中存在缓存。以下是在 SQL Server 2008 R2 中查看缓存的方法以及如何重置缓存。这是针对位于 AD 组中的 Windows 用户,并且该组已在 SQL 中作为登录名添加。用户尚未直接作为 SQL 登录名添加。
使用原始用户名连接
以用户身份连接到 SQL。假设用户是 DOMAIN\test,正在连接 SQL Server Management Studio。检查登录用户信息。
select SYSTEM_USER
输出:DOMAIN\test
sp_who2
输出包括登录列,其中包含以下行:DOMAIN\test
对象资源管理器 > 右键单击树顶部的服务器 > 属性连接显示:DOMAIN\test
您还可以在此处查看引用的用户名:对象资源管理器 > 右键单击树顶部的服务器 > 活动监视器 > 进程
这里:对象资源管理器 > SQL Server 代理 > 作业活动监视器
使用新用户名连接
现在将 AD 用户名更改为 test2。在 SQL Server Management Studio 中重新连接。只有连接属性框显示新的 DOMAIN\test2 用户名。如果服务器/服务尚未重新启动或未发生超时/重置,则其他输出仍将显示旧用户名。
重置连接
即使您注销并让所有连接结束或终止它们,当您以 test2 身份重新登录时,它仍将继续被引用为原始用户名。这是一种强制重置而无需重新启动服务器或 SQL 服务的方法。直接为 DOMAIN\test2 帐户创建一个新的 SQL 登录。立即删除它。会进行检查并刷新缓存的条目。现在,当您以 test2 身份连接时,上述所有检查都会引用新用户名。
答案2
它没有缓存在 SQL Server 上 - 您可以在系统视图中看到它:
SELECT name, sid FROM sys.server_principals;
您可以通过运行 ALTER LOGIN 语句来更新 LOGIN 的名称,类似于:
ALTER LOGIN OldName WITH NAME = NewName;
运行上面的 SELECT 语句来查看所需的更改。