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

时间:2010-02-12 12:47:08

标签: asp.net sql-server-2008 iis-7 web-config connection-string

我现在已经持续了2天没有接近解决方案了。我已经阅读了20-30个线程的alteast和stil无法解决这个问题。

请帮帮我。

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

我添加了<identity impersonate = "true" />

我已将用户添加到连接到我尝试连接的数据库的安全登录

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

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

errormessage的:

  

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

     

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

9 个答案:

答案 0 :(得分:83)

我遇到了类似的错误消息,我在Windows事件查看器中注意到:

  

用户'NT AUTHORITY \ NETWORK SERVICE'登录失败。原因:无法打开显式指定的数据库。 [客户:本地机器]

解决我问题的解决方案是:

  1. 通过SQL Server Management Studio登录SqlExpress
  2. 转到数据库的“安全”目录
  3. 右键单击“用户”目录
  4. 选择“新用户...”
  5. 以新用户身份添加'NT AUTHORITY \ NETWORK SERVICE'
  6. 在“数据角色成员资格”区域中,选择“db_owner”
  7. 点击确定
  8. 以下是上述截图: Screenshot of adding new user Network Service as db_owner to SqlExpress

答案 1 :(得分:8)

您收到的错误消息告诉您应用程序无法连接到sqlexpress数据库,而不是sql server。 我将在sql server中更改db的名称,然后相应地更新连接字符串并再次尝试。

您的错误消息指出以下内容:

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

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

希望这有帮助。

答案 2 :(得分:8)

如果错误消息只是

  

“用户'NT AUTHORITY \ NETWORK SERVICE'登录失败。”,然后授予   'NT AUTHORITY \ NETWORK SERVICE'的登录权限

使用

"sp_grantlogin 'NT AUTHORITY\NETWORK SERVICE'" 

否则,如果错误消息类似于

  

“无法打开登录所请求的数据库”Phaeton.mdf“。登录   失败。用户'NT AUTHORITY \ NETWORK SERVICE'登录失败。“

尝试使用

"EXEC sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'" 

在“Phaeton”数据库下。

答案 3 :(得分:6)

我喜欢Jed的解决方案,但问题是每次我在调试模式下构建我的项目时,它会部署我的数据库项目并再次删除用户。所以我将这个MySQL脚本添加到Post-Deployment脚本中。 它实际上是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'

答案 4 :(得分:2)

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

在SQL中,

CREATE LOGIN [XYZ\Gandalf$] FROM WINDOWS

答案 5 :(得分:2)

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

SQL Server STD默认安装默认实例&amp;在NT Authority \ SYSTEM中运行。

你有完整的SQL版本吗? Express版安装在同一台机器上?

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

  2. 还在哪里定义了连接字符串?在IIS或您的代码?确保如果在许多地方定义,则都指向同一个SQL实例&amp;数据库中。

  3. 还可以尝试查看SQL Server错误日志中存在的详细错误。出于安全原因,事件日志中记录的错误未完成。这也可以帮助您了解是否与正确的SQL Server建立了连接。

  4. 还要确保安装了SQL的计算机可以访问&amp; IIS正在尝试访问同一台计算机。在我的公司有时由于名称解析错误,查询失败,因为我们的大多数计算机都安装了SQL&amp;查询落在错误的SQL Server中。

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

我正在使用Entity Framework重新编制数据库,每次生成数据库时都会覆盖用户。

现在每次加载新的DBContext时都会运行它:

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

答案 8 :(得分:0)

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