无法打开登录请求的数据库“test”。登录失败。用户'xyz \ ASPNET'登录失败

时间:2010-04-04 21:11:01

标签: c# asp.net sql-server iis web-services

我创建了一个将一些数据保存到db的Web服务。但是我收到了这个错误:

  

无法打开登录请求的数据库“test”。登录失败。用户'xyz \ ASPNET'登录失败。

我的连接字符串是

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True

25 个答案:

答案 0 :(得分:42)

嗯,错误很清楚,不是吗?您正尝试使用用户“xyz / ASPNET”连接到您的SQL Server - 这是您的ASP.NET应用程序运行的帐户。

此帐户不允许连接到SQL Server - 在该帐户的SQL Server上创建登录,或者在连接字符串中指定另一个有效的SQL Server帐户。

您能告诉我们您的连接字符串(通过更新原始问题)吗?

更新:好的,您正在使用集成的Windows身份验证 - >您需要在SQL Server上为“xyz \ ASPNET”创建SQL Server登录 - 或者将您的连接字符串更改为:

connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"

如果您的数据库中有“xyz”用户,密码为“top $ secret”。

答案 1 :(得分:22)

  • :“xyz \ ASPNET”不是登录名(在sys.server_principals中)
  • 或者:“xyz \ ASPNET”已设置但未映射到数据库测试中的用户(sys.database_principals)

我会选择第二个选项:错误消息表示默认数据库不存在或没有权限,而不是设置为登录。

测试它是否设置为登录

SELECT SUSER_ID('xyz\ASPNET') -- (**not** SUSER_SID)

如果为NULL

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

如果不是NULL

USE test
GO
SELECT USER_ID('xyz\ASPNET')

如果为NULL

USE test
GO
CREATE USER [xyz\ASPNET] FROM LOGIN [xyz\ASPNET]

答案 2 :(得分:8)

登录问题的最佳解决方案是在sqlServer中创建登录用户。以下是创建使用Windows身份验证(SQL Server Management Studio)的SQL Server登录的步骤:

  1. 在SQL Server Management Studio中,打开对象资源管理器并展开文件夹      用于创建新登录的服务器实例。
  2. 右键单击“安全性”文件夹,指向“新建”,然后单击“登录”。
  3. 在“常规”页面上,在“登录名”框中输入Windows用户的名称。
  4. 选择Windows身份验证。
  5. 单击“确定”。
  6. 例如,如果用户名为xyz\ASPNET,则在登录名框中输入此名称。

    您还需要更改用户映射以允许访问您要访问的数据库。

答案 3 :(得分:7)

大多数情况下,它不是登录问题,而是创建数据库本身的问题。因此,如果创建数据库时出错,则不会首先创建它。在这种情况下,如果您尝试登录,则无论用户如何,登录都将失败。这通常是由于对db上下文的逻辑错误解释而发生的。

在浏览器中访问该网站并真正阅读这些错误日志,这可以帮助您发现代码问题(通常与模型的逻辑问题相冲突)。

在我的情况下,代码编译好,同样的登录问题,而我还在下载管理工作室,我经历了错误日志,修复了我的数据库上下文约束和网站开始运行良好....同时管理工作室仍然下载

答案 4 :(得分:6)

我有这个问题,为我解决的问题是:

  • 转到IIS中的应用程序池
  • 右键单击我的项目应用程序池
  • 在流程模型部分打开标识
  • 选择自定义帐户选项
  • 输入您的电脑用户名和密码。

答案 5 :(得分:3)

问题

错误表现为类似于此的消息:

  

无法打开登录请求的数据库“DATABASE NAME”。登录   失败。用户XYZ登录失败。

  • 通常可以通过简单的Visual Studio或完全重新启动计算机来纠正错误。
  • 该错误也可以作为看似锁定的数据库文件找到。

修复

解决方案包括以下步骤。您不会丢失数据库中的任何数据,也不应删除数据库文件!

先决条件:您必须已安装SQL Server Management Studio(完整或快速)

  1. 打开SQL Server Management Studio
  2. 在“连接到服务器”窗口(文件 - >连接对象资源管理器)中输入以下内容:
    • 服务器类型:数据库引擎
    • 服务器名称:(localdb)\ v11.0
    • 身份验证:[无论您在创建本地数据库时使用了什么。可能是Windows身份验证)。
  3. 点击“连接”
  4. 在对象资源管理器中展开“数据库”文件夹(View-> Object Explorer,F8)
  5. 找到您的数据库。它应该被命名为数据库(.mdf)文件的完整路径
    • 您应该在数据库名称的末尾看到它显示“(Pending Recovery)”,或者当您尝试扩展数据库时,它将无法并且可能会或可能不会向您显示错误消息。
    • 这个问题!您的数据库已基本崩溃..
  6. 右键单击数据库,然后选择“任务 - >分离...”。
  7. 在分离窗口中,在列表中选择您的数据库,然后选中“删除连接”列
  8. 单击“确定”。
  9. 您应该会看到数据库从数据库列表中消失。你的问题现在应该修复了。转到并运行使用localdb的应用程序。
  10. 运行应用程序后,您的数据库将重新出现在数据库列表中 - 这是正确的。它不应该再说“待恢复”,因为它应该正常工作。
  11. 解决方案的来源: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

答案 6 :(得分:3)

对我来说,数据库没有创建,EF代码首先应该创建它,但总是在这个错误中。相同的连接字符串在aspnet核心默认Web项目中工作。解决方案是添加

_dbContext.Database.EnsureCreated()

在第一次数据库联系之前(在DB播种之前)。

答案 7 :(得分:2)

我尝试更新用户,但它确实有效。请参阅以下命令。

USE ComparisonData// databaseName
EXEC  sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';

只需相应地替换user('ftool')

答案 8 :(得分:2)

就我而言,这是一个不同的问题。数据库变成单用户模式,并且到数据库的第二个连接显示此异常。 要解决此问题,请执行以下步骤。

  1. 确保对象资源管理器指向诸如master之类的系统数据库。
  2. 执行exec sp_who2并找到与数据库“ my_db”的所有连接。通过执行KILL { session id }终止所有连接,其中会话ID是sp_who2列出的SPID。
USE MASTER;
EXEC sp_who2
  1. 更改数据库
USE MASTER;
ALTER DATABASE [my_db] SET MULTI_USER
GO

答案 9 :(得分:2)

我使用Windows身份验证连接到本地数据库.mdf文件和 我的本地服务器是sql server 2014。 使用此连接字符串解决了我的问题:

string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";

答案 10 :(得分:1)

最好的选择是使用Windows集成身份验证,因为它比sql身份验证更安全。在具有必要权限的sql server中创建一个新的Windows用户,并在应用程序池安全设置中更改IIS用户。

答案 11 :(得分:1)

我在创建 WPF .NET Core + Entity Framework Core 项目然后将其克隆到新笔记本电脑上时遇到了这个问题。

使用:

update-database

在包管理器控制台中简单地解决了它。

要打开包管理器控制台,请转到:

Tools-> Nuget Package Manager -> Package Manager console

答案 12 :(得分:1)

大多数时候这不是登录问题。可能尚未创建数据库。要创建数据库,请转到 db 上下文文件并添加 this.Database.EnsureCreated();

答案 13 :(得分:1)

尝试写入asp.net mvc模板中提供的默认数据库时遇到了此问题。这是由于尚未创建数据库。

要创建数据库并确保可访问该数据库,请执行以下步骤:

  1. 在Visual Studio中打开“程序包管理器”控制台
  2. 运行命令“ update-database”

这将创建数据库并对其进行所有必要的迁移。

答案 14 :(得分:1)

受到我使用的塞浦路斯答案的启发

_dbContext.Database.CreateIfNotExists();

在第一个数据库联系之前(在DB播种之前)在EF6上。

答案 15 :(得分:1)

当您输入错误的DB名称

时也会发生这种情况
ex : xxx-db-dev to xxx-dev-db

有时,这只是一个愚蠢的错误。我花了大约1个多小时才发现这个:(因为我只是先尝试​​了很多困难的事情

答案 16 :(得分:1)

我之前没有看到过这个问题,所以让我抛弃另一种可能性。可能是IFItest无法访问或根本不存在。例如,如果一个配置有多个配置,每个配置都有自己的数据库,则可能是数据库名称未更改为当前配置的正确配置。

答案 17 :(得分:0)

注意:如果使用Windows服务托管Web服务。

您必须确保您的Web服务正在使用正确的登录帐户连接到SQL Server。

  • 打开服务(我假设Windows服务已安装)
  • 右键单击服务和转到属性。
  • 点击“登录”标签
  • 点击“此帐户”单选按钮
  • 点击“浏览”
  • 在“文本字段”中输入PC用户名,然后单击右侧的“检查名称”按钮。
  • 单击“文本字段”中的文本,然后按“确定”按钮
  • 输入登录密码并应用

答案 18 :(得分:0)

即使您已将登录设置为数据库所有者并为将使用登录的数据库设置用户映射,请检查实际数据库用户(而不仅仅是登录名)是否具有“所有者”角色。

答案 19 :(得分:0)

如果尚未在服务器中创建数据库,则会出现相同的登录错误。请确保在登录之前该数据库存在。

答案 20 :(得分:0)

就我而言,我以“系统”身份运行Windows服务。错误是:

System.Data.SqlClient.SqlException (0x80131904): 
Cannot open database "MyDbName" requested by the login. The login failed.
Login failed for user 'MYDOMAINNAME\HOSTNAME$'.

问题在于该错误非常容易引起误解。即使我在数据库中添加了“ MYDOMAINNAME \ HOSTNAME $”登录名,并授予该登录名sysadmin访问权限,并在目标数据库上添加了该登录名的用户,并使该用户成为dbowner,我仍然遇到相同的错误。 显然,我需要对“ NT AUTHORITY \ SYSTEM”登录执行相同的操作。完成此操作后,我可以顺利登录。我不知道为什么错误消息会抱怨“ MYDOMAINNAME \ HOSTNAME $”。我删除了该登录名和相应的用户,一切仍然正常。

答案 21 :(得分:0)

这适合我。

  1. 转到SQL Server>>安全>>登录并右键单击NT AUTHORITY \ NETWORK SERVICE并选择Properties
  2. 在新打开的“登录属性”屏幕中,转到“用户映射”选项卡。
  3. 然后,在“用户映射”选项卡上,选择所需的数据库 - 尤其是显示此错误消息的数据库。
  4. 单击“确定”。
  5. 阅读此博客。

    http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for-user-nt-authoritynetwork-service/

答案 22 :(得分:0)

有时候如果你在另一个sql server中打开这个数据库会出现这种麻烦(例如,你启动sql管理工作室(SMS)并添加这个数据库),并忘记停止这个服务器。结果 - 您的应用程序尝试连接已在另一台服务器下的此数据库中连接的用户。要解决此问题,请尝试通过Config停止此服务器。调度程序sql server。

我对英语不好道歉。 亲切的问候,Ignat。

答案 23 :(得分:0)

我发现在创建新登录时我还必须设置UserMapping选项,这解决了我的问题。希望能帮助那些也发现自己陷入困境的人!

编辑:将登录设置为db owner也解决了下一个问题

答案 24 :(得分:0)

使用 EF Code First 时,请确保数据库存在。您可以先运行 update-database 命令。