由于登录失败,SQL Server 2012无法启动。

83

我最近在新安装的Windows 7上安装了Microsoft SQL Server 2012,但每次想要运行服务器时,都会出现以下错误:

错误1069:由于登录失败,服务未能启动。

以下用户被配置为启动服务:NT Service\MSSQL$SQLEXPRESS

我该如何解决这个问题?


1
Windows事件查看器提供更多信息吗? - acraig5075
1
@acraig5075:是的!它说这个账户没有“作为服务登录”的权限。 - xsl
3
@xsl - 请考虑根据下面的讨论更改此问题的已接受答案,然后该答案的作者可以撤回它。谢谢! - killthrush
如果您将计算机加入域中,可能会出现这种情况。下面的答案关于在服务mmc中清除密码可以修复它。 - Brain2000
这只是暂时修复了它。 - Newclique
7个回答

237
这个问题的答案可能与完整版 SQL Server(NTService\MSSQLSERVER)相同,需要重置密码。具有讽刺意味的是,其实并没有密码。
步骤如下:
  • 在 Services mmc 中右键单击服务
  • 点击属性
  • 点击登录选项卡
  • 密码字段将显示为已有条目...
  • 清空两个密码字段
  • 点击 "确定"
这样应该重新授予服务访问权限,它应该会再次启动。奇怪吧?
注意:如果问题几个小时或几天后重新出现,则您可能有一个组策略覆盖了您的设置,并且它又来夺回了权限。

12
这个答案对我有用。我把它们空白,然后说服务拥有适当的权限,然后所有依赖服务都能够启动。 - tresstylez
3
有时需要在字段中输入正确的密码,例如当您更改Windows登录密码时。 - Yster
8
为什么这个可以工作?通过服务隐式地授予“登录为服务”的权限,尽管组策略将其取消,这是没有道理的。我该如何防止组策略在重新启动时破坏帐户? - wrschneider
1
当我安装了SQL Server Developer Edition之后,安装VS 2019时出现了这种情况。 - jhruby
1
这仍然是一个问题,很奇怪! - JLo

20

我也遇到过这个问题。该域上的策略取消了SQL Server用户帐户的“作为服务登录”的权限。你可以使用JLo的解决方案解决此问题,但它并没有专门解决组策略的问题,并且在下次机器上刷新组策略时会再次出现。

对我造成问题的具体策略是: 在“计算机配置”->“Windows设置”->“安全设置”->“本地策略”->“用户权限分配”下,“作为服务登录”

您可以通过从命令行运行“rsop”命令来查看应用于计算机的策略。遵循上面列出的路径,您将看到其当前值以及设置值的GPO。


你怎么修复它?需要是组策略管理员才能更改吗? - wrschneider
1
必须联系管理组策略的IT团队进行更改。您可以在本地向用户授予“作为服务运行”的权限,但每次组策略刷新(每隔几个小时)都会被清除。如果需要在策略修复之前使某些内容正常工作,则可以设置定期任务来触发“ntrights”工具以重新授予特权,使用事件作为触发器---组策略刷新事件是日志:系统/源:组策略/事件ID 1502。 - Truisms Hounds
在Windows 10中哪里可以找到这些设置?计算机配置? - TheTechGuy
这是在组策略中。在开始/搜索中键入“组策略”,您将找到一个“编辑组策略”的选项。(我认为它不适用于Windows 10 Home,需要Pro或更高版本。) - Truisms Hounds

12

虽然"作为SYSTEM运行"可以使用,但应当告知人们这意味着从一个最小权限类型的帐户转换到一个拥有世界上所有权限的帐户。这显然不是推荐的最佳实践或安全设置。

如果你知道自己在做什么,并且知道你的 SQL Server 总是在隔离环境中运行(例如不在酒店或机场 WiFi 上),那很可能没问题,但这会创建一个非常真实的攻击向量,如果在公开的互联网上,则可以完全破坏计算机。

这似乎是 Microsoft 的错误,人们应该意识到发布的解决方法所带来的影响。


MSSQLServer 2008在我的安装中使用SYSTEM,但2012不再使用。我必须将MS SQL Server作为SYSTEM运行,因为另一个服务(必须作为SYSTEM运行)自动登录到SQL Server实例。 - Neil Wightman
3
可以,@xsl所说的正确,但是很抱歉,这不是一个答案,而是一条评论。 - user1228

4
简短回答:
在SQL Server上安装远程服务器管理工具(这是Windows Server的可选功能),然后重新启动,运行SQL Server配置管理器,访问每个以“NT Service…”开头的登录帐户的服务设置,清除密码字段并重新启动服务。在幕后,SQL Server Config Manager将为这些虚拟帐户分配“作为服务登录”的权限,您就可以开始使用了。
tl;dr:
默认的Windows域设置与SQL Server 2012的默认安装之间存在一个困境。
如上所述,默认情况下,通过本地机器的组策略编辑无法定义“作为服务登录”的权限(至少通过GUI;如果安装Powershell ActiveDirectory模块(通过远程服务器管理工具下载),则可以通过脚本实现)。
默认情况下,SQL Server 2012设置在“虚拟帐户”中运行服务(NT Service\前缀,例如NT Service\MSSQLServer)。这些类似于本地机器帐户,而不是域帐户,但如果您的服务器加入了域,则仍无法为它们分配“作为服务登录”的权限。SQL Server设置在安装时尝试分配该权限,并且当您更改登录帐户时,SQL Server Config Management工具也尝试分配该权限。
SQL Server工具依赖于(某些组件的)RSAT来分配登录为服务权限,这就是一个美丽的catch-22。如果您的成员服务器上没有安装RSAT,则SQL Server Config Manager在尝试应用设置时会默默失败(尽管它运行了所有华丽的预安装验证),您最终将无法启动服务。我在SQL Server和虚拟账户文档的海量信息中找到的唯一提示是:https://msdn.microsoft.com/en-us/library/ms143504.aspx#New_Accounts,搜索RSAT。

2

我曾经遇到过类似的问题,以下方法成功解决了问题:

  1. 在 Services.MSC 中点击“登录”选项卡,并添加一个最小权限和密码的用户(在出现登录错误的服务上)
  2. 以管理员身份启动 Sql Server

如果用户是域用户,请使用域用户名和密码


1
一种可能是在已经设置好的SQL Server上安装SQL Server数据工具Bi。
解决方案: 1. 仅使用设置实例修复SQL Server。 如果解决方案无效,则值得尝试服务.msc。

1

我不知道这是否是一个好的解决方案,但在尝试了其他答案后都没有成功之后,我将MSSQLSERVER服务的连接用户设置为“本地服务”来解决问题。

注:我使用的是SQL Server 2017。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接