我有 SQL Server 2012,并且正在使用域用户(来自 Active Directory)。错误地从 AD 中删除了用户,使用相同的登录名和密码(但使用不同的 SID)创建了新用户,删除并恢复了原始用户 - 最后重新创建了具有旧 SID 的旧用户。
几乎所有事情似乎都恢复正常,除了一个用户。SQL Server 不知何故为一个用户设置了错误的 SID(所有其他用户都正常),并且无法从 AD 获取正确的 SID。我在两个地方都检查了 SID - AD 中的 SID 与 SQL Server 中的不同。
由于此“SID 不匹配”,该用户无法访问数据库。如果尝试访问,则会失败并得到:
- “错误:18456,严重性:14,状态:5。”
- 用户“DomainX\UserX”登录失败。原因:找不到与提供的名称匹配的登录名。
我从服务器及其使用的所有数据库中删除了用户,然后添加 - 再次得到错误的 SID!而且这个“新”用户仍然无法连接到数据库。
有两件事让我“恼火”:
- 其他用户的 SID 如何匹配以及只有一个用户的 SID 如何不匹配?
- 如果其他用户没有问题(他们获得了旧的 SID),那么我可以假设域控制器没有问题?
我发现了很多有关使用两个现有用户(或孤立用户?)登录进行的不同操作的信息,但没有发现仅更改 SID 的信息。
但主要问题是 - 如何在 MS SQL Server(版本 11.0)中更改一个用户的 SID?这可能吗?
更新
当我不断思考这个问题时,我意识到我问错了。由于此 UserX 是域用户,因此它不是 SQL Server 本地用户 - 这意味着我无法直接在 SQL Server 中更改 SID。
我有两台相同的服务器(ServerA 和 ServerB),它们使用来自 AD 的相同用户。在 ServerB 中,UserX 具有正确的 SID,并且可以在 SQL Server 中正常进行身份验证(正确的 SID 意味着与 AD 中的相同)。需要明确的是 - UserX 在 ServerA 中获得了错误的 SID。
问题 - 如果此用户是来自 Active Directory 的域用户,在哪里和如何更改其 SID?如果 UserX 可以在 ServerB 中进行身份验证,是否意味着必须在 Windows 用户中的 ServerA 中更改 SID?
如果某些想法或观点有误,请纠正我。
更新2
我找到了一个解决方案,尽管它没有回答问题。对于任何感兴趣的人 - 我的同事在 AD 中发现了一个使用错误 SID 的已删除用户。该用户已续订,现在在 AD 中两个用户都处于活动状态 -好的一和坏的一。SQL Server 识别出用户,并且用户登录和 SID 不匹配的问题以某种方式自行解决 - ServerA 中的 UserX 现在具有正确的SID 并可以访问数据库。现在一切都正常了!:)
答案1
我遇到过类似的情况,删除了 AD 用户,SID 不匹配。对我来说,问题在于本地 SID 缓存,解决方案是在 SQL 服务器和客户端 PC 上按照以下链接中的解决方法操作。
打开注册表编辑器。要在 Windows XP 或 Windows Server 2003 中执行此操作,请单击“开始”,单击“运行”,键入 regedit,然后单击“确定”。
要在 Windows Vista 和更新版本中执行此操作,请单击“开始”,在“> 开始搜索”框中键入 regedit,然后按 ENTER。
找到并右键单击以下注册表子项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa>
指向“新建”,然后单击“DWORD 值”。
键入 LsaLookupCacheMaxSize,然后按 ENTER。
右键单击“LsaLookupCacheMaxSize”,然后单击“修改”。
在数值数据框中,键入 0,然后单击确定。
退出注册表编辑器。
或者,随后右键单击您创建的 LsaLookupCacheMaxSize DWORD 并将其删除。
答案2
您是否尝试通过发出以下命令来检查孤立用户:
sp_change_users_login 'Report'
(反对这 掌握受影响的 SQL Server 的数据库以及有问题的数据库在受影响的服务器上。
如果有孤立用户,您可以发出:
sp_change_users_login 'Update_one', 'Domain\UserX', 'Domain\UserX'
...针对受影响的数据库或如果 SQL 登录映射到数据库用户发出:
sp_change_users_login 'Update_one', 'UserX', 'Domain\UserX'
修复 SID 不匹配的问题。
语法更改用户登录在 Microsoft 网站上。