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

Posted

技术标签:

【中文标题】无法打开登录请求的数据库“测试”。登录失败。用户 \'xyz\\ASPNET\' 登录失败【英文标题】:Cannot open database "test" requested by the login. The login failed. Login failed for user 'xyz\ASPNET'无法打开登录请求的数据库“测试”。登录失败。用户 'xyz\ASPNET' 登录失败 【发布时间】:2010-04-04 21:11:00 【问题描述】:

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

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

我的连接字符串是

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

【问题讨论】:

我们需要更多信息才能帮助诊断。 我遇到了这个问题并关闭了视觉工作室并再次打开它并开始工作.. 【参考方案1】:

嗯,错误很明显,不是吗?您正在尝试使用用户“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"

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

【讨论】:

不是“不允许连接SQL Server”,而是“不允许使用数据库“test””。 @wRAR: true - 但我猜用户登录存在于服务器上但未在此特定数据库中启用的可能性可能很小(至少我认为) 另请参阅“Database=IFItest”与“test”,尽管这可能是印刷错误。 您从未触及过的一点是数据库名称也可能是错误的。我从我的 Azure SQL Server 中收到了一条类似的异常消息,结果发现我在我的 ASP.NET 项目的 C# 代码中的一个连接字符串中为我的数据库提供了错误的名称。 罗恩,那是我的问题。我什至仔细检查了拼写,但还是错过了。【参考方案2】: 要么:“xyz\ASPNET”不是登录名(在 sys.server_principals 中) 或:“xyz\ASPNET”已设置但未映射到数据库测试中的用户 (sys.database_principals)

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

测试是否设置为登录

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

如果为空

CREATE LOGIN [xyz\ASPNET] FROM WINDOWS

如果不为空

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

如果为空

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

【讨论】:

这太棒了!一个检测和解决问题的简单工作流程。 "SELECT USER_ID(..." 运行在哪个表上?大师?【参考方案3】:

我遇到了这个问题,解决它的方法是:

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

【讨论】:

【参考方案4】:

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

_dbContext.Database.EnsureCreated()

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

【讨论】:

这是真的,尤其是当您播种数据并激活身份检查时 就是这样。我正在使用 EF Core Code First 运行一个项目,并认为它正在执行“更新数据库”命令,自动创建和应用挂起的迁移,但事实并非如此。我修复了它应用“dotnet ef 数据库更新”命令 就是这样!至少对于我的示例项目。【参考方案5】:

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

    在 SQL Server Management Studio 中,打开对象资源管理器并展开文件夹 要在其中创建新登录的服务器实例。 右键单击安全文件夹,指向新建,然后单击登录。 在“常规”页面的“登录名”框中输入 Windows 用户的名称。 选择 Windows 身份验证。 点击确定。

例如,如果用户名为xyz\ASPNET,则将此名称输入到登录名框中。

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

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

这对我有用。

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

阅读此博客。

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/

【讨论】:

谢谢,使用“NT AUTHORITY\SYSTEM”解决了我的问题。 谢谢,它解决了我的问题。此外,我已授予 dbowner 权限【参考方案8】:

问题

错误显示为类似于以下的消息:

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

该错误通常无法通过简单的 Visual Studio 或完全重启计算机来纠正。 也可以发现错误是一个看似锁定的数据库文件。

修复

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

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

    打开 SQL Server Management Studio 在“连接到服务器”窗口(文件->连接对象资源管理器)中输入以下内容: 服务器类型:数据库引擎 服务器名称:(localdb)\v11.0 身份验证:[创建本地数据库时使用的任何内容。可能是 Windows 身份验证)。 点击“连接” 在对象资源管理器中展开“数据库”文件夹(视图->对象资源管理器,F8) 找到您的数据库。它应命名为数据库 (.mdf) 文件的完整路径 您应该会在数据库名称的末尾看到它显示“(Pending Recovery)”,或者当您尝试扩展数据库时,它将无法并且可能会或可能不会给您一条错误消息。 这就是问题!你的数据库基本上已经崩溃了.. 右键单击数据库,然后选择“Tasks -> Detach...”。 在分离窗口中,在列表中选择您的数据库并检查“删除连接”列 点击确定。 您应该会看到数据库从数据库列表中消失。您的问题现在应该得到解决。去运行使用你的 localdb 的应用程序。 运行您的应用程序后,您的数据库将重新出现在数据库列表中 - 这是正确的。它不应再显示“等待恢复”,因为它应该可以正常工作。

解决方案来源: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed

【讨论】:

问题是我什至找不到那个数据库。【参考方案9】:

我尝试更新用户,并且成功了。请参阅下面的命令。

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

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

【讨论】:

【参考方案10】:

当您输入错误的数据库名称时也会发生这种情况

ex : xxx-db-dev to xxx-dev-db

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

【讨论】:

【参考方案11】:

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

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

【讨论】:

我必须删除这部分“User Instance=True”才能使我的本地数据库正常工作【参考方案12】:

在我的情况下,这是一个不同的问题。数据库变为单用户模式,与数据库的第二个连接显示此异常。 要解决此问题,请按照以下步骤操作。

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

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:

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

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

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

【讨论】:

【参考方案15】:

受我使用的 cyptus 回答的启发

_dbContext.Database.CreateIfNotExists();

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

【讨论】:

【参考方案16】:

如果您尚未在服务器中创建数据库,您将收到相同的登录错误。请确保数据库在您登录之前存在。

【讨论】:

【参考方案17】:

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

要创建数据库并确保它可以访问,请按照以下步骤操作:

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

这将创建数据库并在其上运行所有必要的迁移。

【讨论】:

【参考方案18】:

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

【讨论】:

【参考方案19】:

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

使用:

update-database

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

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

Tools-> Nuget Package Manager -> Package Manager console

【讨论】:

【参考方案20】:

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

【讨论】:

【参考方案21】:

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

编辑:将登录设置为数据库所有者也解决了下一个问题

【讨论】:

【参考方案22】:

如果您在另一个 sql server 中打开此数据库(例如,您启动 sql managment studio(SMS) 并添加此数据库),有时可能会出现此问题,而忘记停止此服务器。结果-您的应用程序尝试与已在另一台服务器下的此数据库中连接的用户连接。要解决此问题,请尝试通过 Config 停止此服务器。调度程序 sql 服务器。

我对糟糕的英语表示歉意。 亲切的问候,Ignat。

【讨论】:

【参考方案23】:

在我的例子中,asp.net 应用程序通常可以毫无问题地连接到数据库。我在日志中注意到这样的消息。我turn on the SQL server logs 发现这条消息:

2016-10-28 10:27:10.86 Logon       Login failed for user '****'. Reason: Failed to open the explicitly specified database '****'. [CLIENT: <local machine>]
2016-10-28 10:27:13.22 Server      SQL Server is terminating because of a system shutdown. This is an informational message only. No user action is required.

所以似乎服务器正在重新启动,并且 SQL 服务器在 ASP.NET 应用程序之前关闭了一点,并且在服务器重新启动之前的几秒钟内数据库不可用。

【讨论】:

【参考方案24】:

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

【讨论】:

【参考方案25】:

就我而言,我在“系统”身份下运行 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$”。我删除了该登录名和相应的用户,一切仍然有效。

【讨论】:

【参考方案26】:

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

【讨论】:

【参考方案27】:

如果上述解决方案均无效。

我遇到了相同的错误消息,但我的问题完全不同。我刚刚恢复了我的数据库,并且数据库处于恢复模式。因此,如果您的数据库处于 rstoreing 模式,只需应用以下查询。

RESTORE DATABASE MyDatabase
   FROM DISK = 'pathToYourDbBackup\MyDatabase.bak'
   WITH REPLACE,RECOVERY

【讨论】:

【参考方案28】:

当我删除数据库并忘记重新创建它时,我遇到了这种情况。有时会发生,因为数据库文件夹需要刷新。

【讨论】:

这是一个没有答案的问题。其他人已经在“检查数据库是否存在”这一行中回答了。都太微不足道了。

以上是关于无法打开登录请求的数据库“测试”。登录失败。用户 'xyz\ASPNET' 登录失败的主要内容,如果未能解决你的问题,请参考以下文章

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

无法打开登录请求的数据库“ASPNETDB”。登录失败。用户 'Philip-Desktop\Philip' 登录失败

用户 '' 登录失败,无法打开登录请求的数据库“Database1.mdf”。登录失败。用户 'rBcollo-PC\rBcollo' 登录失败

无法打开登录请求的数据库 MyDB。登录失败。用户“myUser”的登录失败

新建sql注册提示无法打开用户默认数据库 登录失败,怎么解决

无法打开登录所请求的数据库 "xxxx"。登录失败。 用户 'NT AUTHORITYSYSTEM' 登录失败。