我现在已经持续了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'登录失败。
答案 0 :(得分:83)
我遇到了类似的错误消息,我在Windows事件查看器中注意到:
用户'NT AUTHORITY \ NETWORK SERVICE'登录失败。原因:无法打开显式指定的数据库。 [客户:本地机器]
解决我问题的解决方案是:
以下是上述截图:
答案 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版安装在同一台机器上?
可能是某个地方连接字符串仍然引用了命名实例'SQLEXPRESS',而不是完整版本创建的默认实例。
还在哪里定义了连接字符串?在IIS或您的代码?确保如果在许多地方定义,则都指向同一个SQL实例&amp;数据库中。
还可以尝试查看SQL Server错误日志中存在的详细错误。出于安全原因,事件日志中记录的错误未完成。这也可以帮助您了解是否与正确的SQL Server建立了连接。
还要确保安装了SQL的计算机可以访问&amp; IIS正在尝试访问同一台计算机。在我的公司有时由于名称解析错误,查询失败,因为我们的大多数计算机都安装了SQL&amp;查询落在错误的SQL Server中。
确保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)
确保已创建数据库。当我将迁移应用于解决方案中的错误项目时,我遇到了相同的错误。当我将迁移应用于正确的项目时,它创建了数据库并解决了错误。