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


97

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

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

我的连接字符串是

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

我们需要大量更多信息才能帮助诊断。
sblom

我有这个问题,并关闭Visual Studio和再次打开它,它开始工作..
trees_are_great

Answers:


47

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


11
不是“不允许连接到SQL Server”,而是“不允许使用数据库“测试””。
wRAR 2010年

@wRAR:是的-但我想用户登录名存在于服务器上但未在此特定数据库中启用的可能性很小(至少我会认为)
marc_s 2010年

另请参见“数据库= IFItest”与“测试”,尽管这可能是打印错误。
wRAR'4

2
您从未触及的一点是,数据库名称也可能是错误的。我从我的Azure SQL Server抛出了一个同样的异常消息,结果是我在ASP.NET项目的C#代码中的一个连接字符串中为数据库指定了错误的名称。
罗恩

罗恩,那是我的问题。我什至对拼写进行了仔细检查,但即使如此也错过了。
Darrell Lloyd Harvey

32
  • 要么:“ 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]

1
这真是太好了!这是检测和解决问题的简单工作流程。
Mazen el Senih

12

我遇到了这个问题,为我解决的问题是:

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

也为我工作!
Mazen el Senih

8

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

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

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

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


8

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

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

就我而言,代码编译良好,存在相同的登录问题,而我仍在下载Management Studio时,我经历了错误日志,修复了数据库上下文约束,站点开始正常运行....同时Management Studio仍在下载中


6

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

_dbContext.Database.EnsureCreated()

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


4

问题

该错误以类似于以下消息的形式呈现:

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

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

修复

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

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

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

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


问题是我什至找不到那个数据库。
Shimmy Weitzhandler

3

当您键入错误的数据库名称时也会发生

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

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


2

我尝试更新用户,并且有效。请参阅下面的命令。

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

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


2

这对我有用。

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

阅读此博客。

http://blog.sqlauthority.com/2009/08/20/sql-server-fix-error-cannot-open-database-requested-by-the-login-the-login-failed-login-failed-for-用户NT授权网络服务/


谢谢,使用“ NT AUTHORITY \ SYSTEM”解决了我的问题。
Farzad Karimi

2

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

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

我必须删除此部分“ User Instance = True”以使本地数据库正常工作
Anonymous

2

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

  1. 确保对象资源管理器指向诸如master之类的系统数据库。
  2. 执行a 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

1

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


1

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

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

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

1

受到我过去对塞浦路斯的回答的启发

_dbContext.Database.CreateIfNotExists();

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



1

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

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

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

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


0

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


0

我发现创建新的登录名时还必须设置UserMapping选项,这为我解决了问题。希望对任何也陷入困境的人有所帮助!

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


0

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

我对英语不好表示歉意。亲切的问候,伊格纳特。


0

就我而言,asp.net应用程序通常可以毫无问题地连接到数据库。我在日志中注意到了这样的消息。我打开SQL Server日志,发现以下消息:

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 Server已比ASP.NET应用程序早一点关闭,并且数据库在服务器重新启动前几秒钟不可用。


0

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


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 $”。我删除了该登录名和相应的用户,一切仍然正常。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.