首先我要声明,我更擅长 UNIX,这让我很抓狂。我有一台 Windows 2003 服务器,它正在为 VMware 的虚拟基础架构系统运行 SQL Server 2005。理论上是让这个系统成为 Active Directory 控制器,但我们决定暂时不这么做。我将服务器从 Active Directory 域中降级(不再是控制器或任何 Active Directory 的成员)。不幸的是,当我这样做时,SQL Server 服务将不再启动。
当我进入 SQL Server 配置管理器并尝试将登录更改为管理员帐户或其中一个内置帐户时,出现错误“未完成帐户名和安全 ID 之间的映射”。
我该如何修复 SQL Server 以使其不再考虑 Active Directory 权限和帐户 ID?
答案1
答案2
我还没有启动测试实例来在我自己的机器上重现这个问题,但看起来下面的键中存储了三个注册表值,它们引用了 SQL Server 2005 安装创建的组的 SID:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.x\Setup
这些值为 AGTGROUP、FTSGROUP 和 SQLGROUP。具有用于填充这些值的 SID 的组是(替换为服务器计算机的名称和 SQL 实例名称):
SQLServer2005MSSQLUser$SERVER-NAME$INSTANCE-NAME
SQLServer2005MSFTEUsers$SERVER-NAME$INSTANCE-NAME
SQLServer2005SQLAgentUsers$SERVER-NAME$INSTANCE-NAME
据我所知(再次强调,我没有亲自重现此情况),您需要为此服务器创建这些组,然后获取新组的 SID 并将它们放入注册表中。看起来“修复” SQL Server 安装可以做到这一点。请查看 Microsoft Connect 的这篇文章:http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=202561
在该文章中搜索短语“一个或多个 SQL 安全组以某种方式被删除”,然后阅读那里的解决方法。看来清除旧组并在修复模式下运行安装程序可以实现您的目标。我相信这比尝试手动重新创建它们(如我发现的一些博客文章和论坛帖子所建议的那样)更好。
话虽如此,在开始更改之前,至少要备份注册表和数据库的那部分。做好备份可以让一切“正常运转”……<微笑>