当我们必须更改用户的姓氏时,假设杰史密斯到琼斯,在我们的 Win2000 活动目录中,我们遇到了 Sql Server 2008 的一些奇怪的行为。
什么时候琼斯通过此应用程序访问服务器,Sql Server 仍然认为他们的用户名是杰史密斯而他们在更改名称后登录的所有其他内容(即他们的工作站、相关应用程序)均接受琼斯。这几乎就像 Sql Server 缓存了凭据一样。
需要说明的是,我们只是更改了姓氏,并没有重新创建帐户,因此 SID 应该相同(我的假设)。他们也没有直接登录服务器。
我有两个问题:如果凭证被缓存了,那它在哪里?其次,我们如何清除缓存?
如果我的理解完全是歪曲的,那我错过了什么?
短暂性脑缺血发作
吉姆·利特尔
答案1
SQL Server 确实缓存了用户令牌。你可以强制它们清除
DBCC FREESYSTEMCACHE('USERSTORE_TOKENPERM');
答案2
没错。在 SQL Server 中设置登录时,您会为其提供帐户的用户名和域。然后它会转到 Windows 并获取帐户的 SID,并将两者存储在 SQL Server 中。当您在 Windows 中更改用户名时,SID 保持不变。当用户登录 SQL Server 时,SID 会从客户端计算机传递到服务器,并根据数据库进行验证(以及一些身份验证令牌)。
SQL Server 使用它在 master 数据库中存储的名称作为显示名称。
要更改此设置,您需要从 SQL Server 中删除登录名,然后使用用户的新名称重新创建它。