登录失败。用户“NT AUTHORITY\NETWORK”的登录失败。

3

我无法解决这个错误。我已经通过SSMS添加了“NT AUTHORITY\NETWORK”用户,以及使用此线程作为参考添加了相关角色:Login failed for user 'NT AUTHORITY\NETWORK SERVICE'

我正在尝试通过Windows服务进行数据库连接。在调试模式下,DB连接正常工作。当我实际尝试运行安装的服务时,就会出现这个错误。

这是我的app.config中的连接字符串:

<connectionStrings>
    <remove name="LocalSqlServer" />
    <add name="LocalSqlServer" connectionString="Data Source=(LocalDb)\v11.0; database=MyDB; Integrated Security=True;" />
    <remove name="SqlServer" />
    <add name="SqlServer" connectionString="Data Source=(LocalDb)\v11.0; database=MyDB; Integrated Security=True;" />
    <remove name="SqlServer" />
  </connectionStrings>

我也尝试在连接字符串中添加User ID=myDomain\myUsername;,但这并没有起到帮助作用。


安装的服务正在运行哪个用户帐户下? - undefined
你是否指向了正确的SQL Server实例?(在你的连接字符串中) - undefined
3个回答

6
请先阅读此安全限制说明,了解使用LocalDB的安全限制。通过阅读这些信息,我认为可能无法使用"NT AUTHORITY\NETWORK SERVICE",但我不确定。您需要使用您的凭据。
如果您正在使用集成身份验证,则服务运行的凭证必须与可以访问数据库的凭证匹配。如果您不想使用服务的凭证(也就是说,您希望它在“NT AUTHORITY\NETWORK SERVICE”下运行),则需要将“NT AUTHORITY\NETWORK SERVICE”添加为具有足够访问权限的用户到MyDB数据库中。
如果可能,请先将该用户设置为MyDB的db_owner。如果可以正常工作,则开始降低SSMS权限级别。如果不起作用,则可能出现其他问题,确保用户“NT AUTHORITY\NETWORK SERVICE”对MyDB正在使用的文件系统具有访问权限。
另外,请注意您在末尾有一个额外的<remove name="SqlServer" /> ...不确定是否有意为之。

1
我已经使用Windows身份验证设置了SQL Server,所以实际上我没有密码进行连接。这可能是问题吗?我已经为NT AUTHORITY\NETWORK SERVICE用户设置了db_owner权限。我不确定如何检查它是否具有文件系统访问权限。感谢你指出多余的“remove name”行,我已经删除了它。但仍然出现相同的错误。 - undefined
哦,我应该补充一下,我没有使用SQL Server Express。我有普通的SQL Server 2012,但是阅读你提供的那篇文章让我觉得也许我应该使用一种不同的方式来连接Windows服务。 - undefined
3
好的,连接了我的数据库到本地机器并为网络服务和本地服务添加了登录信息后,我成功让它工作了。我想主要问题就是LocalDB不允许从NT AUTHORITY\NETWORK SERVICE进行连接。 - undefined
这也可能是由于组策略不允许服务账户的原因。 - undefined

0
你可以自己指定Windows服务使用哪个用户账户。如果服务使用集成安全性连接到数据库服务器,则相同的用户账户必须在数据库服务器上获得授权。最好创建一个专用用户,这样你可以根据需要进行精细调整授权。按照以下步骤操作:
在运行服务的机器上,创建一个新的Windows用户(例如MyUser)。
SQL Server Management Studio中,展开服务器实例,然后选择Security。右键单击Logins,选择New Login... 输入登录名NameOfMachineRunningTheService\MyUser并选择Windows身份验证。在Server RolesUser Mapping页面上调整设置;为了测试目的,您可能希望分配很多权限(例如服务器角色sysadmin),但在生产环境中,出于明显的安全原因,您应该将其减少到最低限度。
计算机管理 - 服务中,右键单击您的服务,选择Properties。在Log On选项卡上,选择This account并填写.\MyUser。输入用户的密码(两次)并点击OK。如有必要,重新启动服务。

0
在你作为参考所使用的链接中,我认为Jed给出了正确的答案来解决你的问题。请尝试一下。你应该添加'NT AUTHORITY\NETWORK SERVICE'而不是'NT AUTHORITY\NETWORK'。
我认为Windows服务的默认用户是Local Service。因此,请尝试添加'NT AUTHORITY\LOCAL SERVICE'。
你也可以尝试更改服务运行的用户。尝试使用你的凭据运行服务,看看是否有帮助。
希望能对你有所帮助。

感谢您的反馈。我确实已经添加了"NT AUTHORITY\NETWORK SERVICE",并且我也添加了"NT AUTHORITY\LOCAL SERVICE"。不幸的是,这两个都没有解决错误。我本来希望不必使用凭据来解决这个问题,但作为最后的办法,我会尝试一下。谢谢。 - undefined
您不想使用服务的凭据有什么原因吗? - undefined
你是否将"NT AUTHORITY\NETWORK SERVICE"设置为db_owner - undefined
我确实为NT AUTHORITY\NETWORK SERVICE设置了db_owner权限。我没有连接到SQL Server的凭据,我是使用Windows身份验证进行设置的。 - undefined

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