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

36

我已经苦苦挣扎了两天,仍然无法解决这个问题。我已经阅读了至少20到30个主题,但仍然无法解决。

请帮帮我。

我已禁用匿名身份验证,启用了asp.net模拟。

我已添加了一个连接到我尝试连接的数据库的安全登录用户。

这是我使用的连接字符串:

Data Source=IPTOSERVER;Initial Catalog=Phaeton;User Id=User;Password=Password;

错误信息:

无法打开登录所请求的数据库 "Phaeton.mdf"。登录失败。

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


Dejan,你好吗?请查看这个链接,它包含了所有可能的连接字符串组合:http://www.connectionstrings.com/ 希望能帮到你! - MRFerocius
你能否发布一下你用来连接数据库的代码? - Tim Scarborough
我使用NHibernate,这个网站在我将SQL Server Express更改为SQL Server之前已经在我的服务器上运行过。 - Dejan.S
请简单地按照ASP.NET和SQL Server的操作指南进行操作,http://msdn.microsoft.com/en-us/library/ms978512.aspx 这些是连接到SQL Server的推荐方法。祝好! - Lex Li
对于任何在谷歌上搜索此问题的人,在(混合)德语中,错误信息为**Login failed for user 'NT-AUTORITÄT\LOKALER DIENST'. () (.Net SqlClient Data Provider)**。 - Uwe Keim
9个回答

91

我遇到了一个类似的错误信息,发现它在Windows事件查看器中显示:

用户“NT AUTHORITY\NETWORK SERVICE”的登录失败。原因:无法打开明确定义的数据库。[CLIENT: local machine]

解决我的问题的方法是:

  1. 通过SQL Server管理工具登录SqlExpress
  2. 进入数据库的"Security"目录
  3. 右键单击"Users"目录
  4. 选择"New User..."
  5. 将“NT AUTHORITY\NETWORK SERVICE”添加为新用户
  6. 在数据角色成员区域中选择db_owner
  7. 单击OK

以下是上述步骤的屏幕截图: Screenshot of adding new user Network Service as db_owner to SqlExpress


2
我的投票首先是这个想法最终为我工作了,但用户名并不重要,重要的是你为其选择的登录名应该是NT AUTHORITY\NETWORK SERVICE。还有一件事是,在用户名称中使用\字符在我的SQL Server Express(2005)中是不允许的(我不确定是否适用于整个SQL)。再次感谢! - Mubarek
哦,太神奇了!我简直不敢相信那真的有效。点个赞,如果我有足够的积分,我一定会把采纳答案的勾选给你。 - Lukas
1
我知道这个问题已经四年了,但我真的很感激能找到它。我一直在努力尝试弄清楚如何访问外部数据库,已经困扰了我三天,在这个过程中遇到了各种难题。这是最后的障碍!我曾经和一个工程师一起工作,他经常说编写代码最困难的部分是要越过门口的石像鬼。这是我的最后一个石像鬼。谢谢! - Bill Norman
1
你能分享一下完整的查询语句来实现这个效果吗? - pt12lol
使用Windows身份验证或SQL Server身份验证 - Usman Younas
谢谢你,今天帮了我很多忙。 - Timbo773

11

你接收到的错误消息告诉你应用程序无法连接到sqlexpress数据库,而不是SQL Server。

我只需更改SQL Server中的数据库名称,然后相应地更新连接字符串并再次尝试即可。

Cannot open database "Phaeton.mdf" requested by the login. The login failed.

看起来你仍然在尝试连接基于文件的数据库,名称“Phaeton.mdf”与你的新SQL数据库名称“Phaeton”不匹配。

希望这可以帮助你。


1
救命稻草,非常感谢。我完全忽略了我尝试使用的数据库是sqlexpress。 - Dejan.S

9

如果你遇到的错误信息只是:

"Login failed for user 'NT AUTHORITY\NETWORK SERVICE'."

那么你需要为 'NT AUTHORITY\NETWORK SERVICE' 授予登录权限,具体方法如下:

"sp_grantlogin 'NT AUTHORITY\NETWORK SERVICE'" 

如果错误信息类似于以下内容:

"Cannot open database "Phaeton.mdf" requested by the login. The login failed. Login failed for user 'NT AUTHORITY\NETWORK SERVICE'."

请尝试使用以下方法:
"EXEC sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'" 

在您的“Phaeton”数据库下。


6

我喜欢Jed的解决方案,但问题在于每次我以调试模式构建项目时,它都会部署我的数据库项目并再次删除用户。因此,我将这个MySQL脚本添加到发布后脚本中。实际上,它做了Jed所说的事情,但每次我部署时都创建用户。

CREATE USER [NT AUTHORITY\NETWORK SERVICE]
    FOR LOGIN [NT AUTHORITY\NETWORK SERVICE]
    WITH DEFAULT_SCHEMA = dbo;
Go

EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'

你救了我。我使用了:NT AUTHORITY\SYSTEM。 - ilans

2

所需的 SQL Server 登录名为 DOMAIN\machinename$。这是调用 NT AUTHORITY\NETWORK SERVICE 在 SQL Server(以及文件服务器等)中显示的方式。

在 SQL 中,

CREATE LOGIN [XYZ\Gandalf$] FROM WINDOWS

2
你能具体说明我需要做什么吗?因为这对我来说毫无意义(真的没有). - Dejan.S

2

您说在使用 SQL Express 版本时它能正常工作。默认情况下,Express 版本会创建一个命名实例并在 NT Authority\Network Service 中运行。

SQL Server STD 默认安装一个默认实例并在 NT Authority\SYSTEM 中运行。

您是否在同一台机器上安装了完整版的 SQL 和 Express 版本?

  1. 可能是某个地方连接字符串仍然引用了“SQLEXPRESS”命名实例,而不是完整版本创建的默认实例。

  2. 还要注意连接字符串定义在哪里?是在 IIS 还是代码中?确保如果在多个位置定义,则所有位置都指向相同的 SQL 实例和数据库。

  3. 尝试查看 SQL Server 错误日志中的详细错误。事件日志中记录的错误由于安全原因不完整。这也将帮助您知道连接是否已经连接到正确的 SQL Server。

  4. 确保安装 SQL 的计算机可访问,并且 IIS 正在尝试访问同一台计算机。在我们公司中,由于名称解析错误,查询失败,因为我们的大多数计算机都安装了 SQL,而查询则落在错误的 SQL Server 上。

  5. 确保数据库存在于 SQL Server 中。在 SQL Management Studio 中显示的名称应与连接字符串中的名称匹配。


我只在这台服务器电脑上安装了SQL Server。我只在我的Web.Config文件中创建了连接字符串。现在我将尝试查看日志文件,看看是否会得到更具体的错误信息。数据库已连接到SQL Server,并且我创建了一个用户来使用它。但当我想要使用SQL身份验证时,它总是继续使用NT身份验证。 - Dejan.S

1
最好的方法是为您的应用程序创建一个用户,并分配适合该用户的权限。不要使用“NT AUTHORITY\NETWORK SERVICE”作为您的用户,它有自己的漏洞,并且是一个在操作系统级别上拥有许多权限的用户。远离这个内置用户。

0

我正在使用Entity Framework重新填充我的数据库,但每次生成数据库时,用户都会被覆盖。

现在我每次加载新的DBContext时都运行这个:

cnt.Database.ExecuteSqlCommand("EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\\NETWORK SERVICE'");

0

确保数据库已创建。当我将迁移应用于解决方案中错误的项目时,我遇到了相同的错误。当我将迁移应用于正确的项目时,它创建了数据库并解决了错误。


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