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

我已经创建了一个 Web 服务,它将一些数据保存到数据库中:

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

我的连接字符串是

Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
468546 次浏览

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

不允许此帐户连接到 SQLServer ——要么在 SQLServer 上为该帐户创建登录名,要么在连接字符串中指定另一个有效的 SQLServer 帐户。

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

更新: 好的,您正在使用集成的 Windows 认证—— > 您需要在您的 SQL Server 上为“ xyz ASPNET”创建一个 SQL Server 登录名——或者将您的连接字符串更改为以下内容:

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

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

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

  • 要么: “ xyz ASPNET”不是登录名(在 sys.server _ cipals 中)
  • 或者: “ xyz ASPNET”已经设置,但是没有映射到数据库测试中的用户(sys.database _ cipals)

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

测试它是否被设置为登录

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]

登录问题的最佳解决方案是在 sqlServer 中创建一个登录用户。下面是创建使用 Windows 身份验证的 SQLServer 登录名(SQLServerManagementStudio)的步骤:

  1. 在 SQLServerManagementStudio 中,打开对象资源管理器并展开 要在其中创建新登录名的服务器实例。
  2. 右键单击“安全”文件夹,指向“新建”,然后单击“登录”。
  3. 在“常规”页的“登录名”框中输入 Windows 用户的名称。
  4. 选择 Windows 身份验证。
  5. 单击 OK。

例如,如果用户名是 xyz\ASPNET,则在“登录名”框中输入此名称。

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

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

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

我尝试更新用户,并且成功了。

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

相应地替换 user('ftool')

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

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

很抱歉我英语说得不好。 问候你,伊格纳特。

大多数情况下,这不是登录问题,而是创建数据库本身的问题。因此,如果在创建数据库时出现错误,一开始就不会创建数据库。在这种情况下,如果您尝试登录,无论用户是谁,登录都将失败。这通常是由于对数据库上下文的逻辑误解造成的。

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

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

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

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

这对我有用。

  1. 转到 SQL Server > > Security > > Logins,右键单击 NT AUTHORITY NETWORK SERVICE 并选择 Properties
  2. 在新打开的登录属性屏幕中,转到“用户映射”选项卡。
  3. 然后,在“ User Mapping”选项卡上,选择所需的数据库-特别是显示此错误消息的数据库。
  4. 单击 OK。

看看这个博客。

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/

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

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

在我的例子中,asp.net 应用程序通常可以毫无问题地连接到数据库。我在日志中注意到了这样的信息。我 打开 SQL 服务器日志和我发现这个消息:

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 应用程序和数据库不可用的几秒钟之前,服务器重新启动。

问题

该错误显示为类似如下的消息:

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

  • 通常不能通过简单的 VisualStudio 或全计算机重新启动来纠正错误。
  • 该错误也可以作为表面上锁定的数据库文件找到。

The Fix

解决方案按照以下步骤进行布置。您不会丢失数据库中的任何数据,也不应删除数据库文件!

必备条件: 必须已安装 SQLServerManagementStudio (Full 或 Express)

  1. 打开 SQLServerManagementStudio
  2. 在“ Connect to Server”窗口(File-> Connect object Explorer)中输入以下内容:
    • 服务器类型: 数据库引擎
    • 服务器名称: (localdb) v11.0
    • 身份验证: [无论您在创建本地数据库时使用了什么。可能是 Windows 身份验证)。
  3. 点击“连接”
  4. 展开对象资源管理器中的“数据库”文件夹(视图-> 对象资源管理器,F8)
  5. 查找数据库。它应该被命名为数据库(. mdf)文件的完整路径
    • 您应该看到在数据库名称的末尾写着“(Pending Recovery)”,或者当您尝试展开数据库时,它将不能够并且可能会或可能不会给您一个错误消息。
    • 这就是问题所在! 你的数据库基本上已经崩溃了. 。
  6. 右键单击数据库,然后选择“ Tasks-> Detach...”。
  7. 在分离窗口中,选择列表中的数据库并检查“ DropConnections”列
  8. 单击 OK。
  9. 您应该会看到数据库从数据库列表中消失。你的问题现在应该解决了。运行使用 localdb 的应用程序。
  10. 运行应用程序后,数据库将重新出现在数据库列表中——这是正确的。它不应该再说“待复苏”,因为它应该正常运转。

解决方案的来源: ref = “ https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requsted-Login-false”rel = “ norefrer”> https://www.codeproject.com/tips/775607/how-to-fix-localdb-requested-login-failed

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

当您键入错误的 DB 名称时也会发生这种情况

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

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

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

_dbContext.Database.EnsureCreated()

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

注意: 如果使用一个 windows 服务来托管 webservice。

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

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

受到塞浦路斯回答的启发

_dbContext.Database.CreateIfNotExists();

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

如果您没有在服务器中创建数据库,那么您将得到相同的登录错误。在登录之前确保数据库存在。

在我的例子中,我使用“系统”标识运行 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 $’登录名,并授予这个登录系统管理员访问权限,并在我的目标数据库中添加了这个登录名的用户,并使用这个用户 dbowner 之后,我仍然会得到同样的错误。 显然,我需要为“ NT 授权系统”登录做同样的事情。在我这样做之后,我能够登录没有问题。我不知道为什么错误消息抱怨“ MYDOMAINNAME HOSTNAME $”。我删除了那个登录名和对应的用户,一切都还能用。

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

  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

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

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

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

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

大多数情况下不是登录问题。数据库可能尚未创建。要创建数据库,请转到 db 上下文文件并添加以下内容。数据库。确保创建() ;

我创建 WPF 时遇到了这个问题。NET 核心 + 实体框架核心项目,然后将其克隆到一台新的笔记本电脑上。

使用:

update-database

在包管理器控制台中简单地解决了这个问题。

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

Tools-> Nuget Package Manager -> Package Manager console

使用 EF Code First 时,请确保数据库存在。

如果上述解决方案都不起作用。

我遇到了相同的错误消息,但我的问题是完全不同的。我刚刚还原了我的数据库,数据库处于还原模式。因此,如果数据库处于存储模式,只需应用以下查询。

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

当我删除数据库,忘记重建数据库的时候,就发生了这种事。这种情况有时会发生,因为数据库文件夹需要刷新。

如果之前没有任何问题,并且只在包管理器控制台中得到此错误,则不需要执行任何特殊操作。只需打开 sql 服务器对象资源管理器窗口,然后在控制台中连接并再次运行该命令。