登录失败。用户'NT AUTHORITY \ NETWORK登录失败

时间:2014-02-02 05:50:08

标签: sql sql-server

我无法摆脱这个错误。我已经通过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;添加到连接字符串,但这没有帮助。

4 个答案:

答案 0 :(得分:5)

首先阅读使用LocalDB的this description of the security limitations。阅读让我觉得可能无法使用“NT AUTHORITY \ NETWORK SERVICE”;我不确定。我想你需要使用你的凭证。

不是太明显,但如果您使用集成身份验证运行该服务的凭据必须匹配有权访问数据库的凭据。如果您不想使用该服务的凭据(也就是说,您希望它在“NT AUTHORITY \ NETWORK SERVICE”下运行),那么您需要添加:“NT AUTHORITY \ NETWORK SERVICE”作为用户<强大的>有足够的访问权限到数据库MyDB。

如果可能,首先将该用户设置为db_owner以获取MyDB。如果可行,则开始将SSMS中的权限调整为较低级别。如果工作,则数据库配置出现其他问题。还要确保用户“NT AUTHORITY \ NETWORK SERVICE”具有对MyDB正在使用的文件的文件系统访问权限。

此外,你最后还有一个<remove name="SqlServer" /> ...不确定这是否是故意的。

答案 1 :(得分:0)

在您用作参考的链接中我认为Jed为您的问题提供了正确的答案。试试吧。你应该添加'NT AUTHORITY \ NETWORK SERVICE'而不是'NT AUTHORITY \ NETWORK'。

我认为Windows服务的默认用户是本地服务。因此,请尝试添加“NT AUTHORITY \ LOCAL SERVICE”。

您还可以尝试更改运行服务的用户。尝试使用您的凭据运行该服务,看看这是否有帮助。

我希望它有所帮助。

答案 2 :(得分:0)

您可以指定自己Windows服务使用的用户帐户。如果服务使用集成安全性连接到数据库服务器,则必须在数据库服务器上授权相同的用户帐户。最好创建一个专用用户,这样您就可以根据需要微调授权。请按照以下步骤操作:

  • 在运行该服务的计算机上,创建一个新的Windows用户(例如 MyUser )。
  • SQL Server Management Studio 中,展开您的服务器实例,然后展开安全。右键单击登录并选择新登录... 输入登录名NameOfMachineRunningTheService\MyUser并选择 Windows身份验证。修改页面上的设置服务器角色用户映射;出于测试目的,您可能希望分配大量权限(例如服务器角色 sysadmin ),但在生产时,出于明显的安全原因,您应该将其减少到最低限度。
  • 计算机管理 - 服务中,右键单击您的服务,然后选择属性。在选项卡登录上,选择此帐户并填写.\MyUser。输入用户密码(两次),然后单击确定。如有必要,请重新启动该服务。

答案 3 :(得分:0)

为什么要将集成安全性与网络服务一起使用?
那将是愚蠢的。任何Web服务器应用程序都可以访问任何数据库...

只需向SQL-Server用户添加ConnectionString:

<remove name="YOUR_CONNECTIONSTRING_NAME"/>
<add name="YOUR_CONNECTIONSTRING_NAME" connectionString="Data Source=localhost;
Initial Catalog=MyDB;
Persist Security Info=False;
User ID=YOUR_SQL_SERVER_LOGIN;
Password=YOUR_PASSWORD;
MultipleActiveResultSets=False;
Packet Size=4096;
Application Name=&quot;YOUR_APPLICTION_NAME&quot;" 
providerName="System.Data.SqlClient"/>

然后添加登录YOUR_SQL_SERVER_LOGIN,并授予其访问MyDB的权限。 然后允许远程登录(需要重新启动SQL-Server服务),并确保防火墙不会阻止相应的端口。

如果要排除您的登录无法访问数据库MyDB,只需将其置于SQL Server的sysadmin角色中。