War*_*Bob 10 sql-server-2008 ms-access sql-server active-directory
我们的一个用户的名称已合法更改,因此我们更改了他们的 Active Directory 用户名以匹配 - 从域\旧名称到域\新名称。但是,当此用户在存储过程中调用 suser_sname() 时,它返回旧名称,而不是新名称。
谷歌搜索让我找到了KB 946358,这表明他们的名字被缓存在服务器上并且没有更新,大概是因为 suser_name() 正在调用 LsaLookupSids。但是,该文章中的解决方法涉及重新启动服务器,即使是这样,我仍然想了解问题所在。
如果我将上下文更改为他们的上下文,则会返回正确的名称:
EXECUTE AS LOGIN = 'domain\newname'
GO
SELECT suser_name() --returns 'domain\newname'
Run Code Online (Sandbox Code Playgroud)
...我会假设这也会调用 LsaLookupSids,因此会返回不正确的名称。我似乎不太了解这里的工作机制。
一些可能重要的观察结果:
此用户在服务器上没有显式登录。但他们是这样做的 AD 组的成员。更改后的名称 (domain\newname) 出现在结果集中exec xp_logininfo 'domain\ADGroupName', 'members'
;域\旧名称没有。
用户从存储过程中调用 suser_name(),从 Access 2003 MDB 中的直通查询调用。
过去我们更改了大量用户的帐户名称,但仅在上周才发现此问题(上周进行了两次更改,似乎都出现了此问题)。
服务器在 Windows 2008 R2 数据中心版上运行 Sql Server 2008 SP3 x64。
这是怎么回事?作为 DBA,我可以做什么或者我可以在哪里解决这个问题?
小智 2
这可能与 Kerberos 缓存有关吗?(只是猜测,但可能无关) http://blogs.technet.com/b/tspring/archive/2014/06/23/viewing-and-purging-cached-kerberos-tickets.aspx
归档时间: |
|
查看次数: |
1248 次 |
最近记录: |