我创建了一个将一些数据保存到db的Web服务。但是我收到了这个错误:
无法打开登录请求的数据库“test”。登录失败。用户'xyz \ ASPNET'登录失败。
我的连接字符串是
Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
答案 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)
我会选择第二个选项:错误消息表示默认数据库不存在或没有权限,而不是设置为登录。
测试它是否设置为登录
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登录的步骤:
例如,如果用户名为xyz\ASPNET
,则在登录名框中输入此名称。
您还需要更改用户映射以允许访问您要访问的数据库。
答案 3 :(得分:7)
大多数情况下,它不是登录问题,而是创建数据库本身的问题。因此,如果创建数据库时出错,则不会首先创建它。在这种情况下,如果您尝试登录,则无论用户如何,登录都将失败。这通常是由于对db上下文的逻辑错误解释而发生的。
在浏览器中访问该网站并真正阅读这些错误日志,这可以帮助您发现代码问题(通常与模型的逻辑问题相冲突)。
在我的情况下,代码编译好,同样的登录问题,而我还在下载管理工作室,我经历了错误日志,修复了我的数据库上下文约束和网站开始运行良好....同时管理工作室仍然下载
答案 4 :(得分:6)
我有这个问题,为我解决的问题是:
答案 5 :(得分:3)
错误表现为类似于此的消息:
无法打开登录请求的数据库“DATABASE NAME”。登录 失败。用户XYZ登录失败。
解决方案包括以下步骤。您不会丢失数据库中的任何数据,也不应删除数据库文件!
先决条件:您必须已安装SQL Server Management Studio(完整或快速)
解决方案的来源: 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)
就我而言,这是一个不同的问题。数据库变成单用户模式,并且到数据库的第二个连接显示此异常。 要解决此问题,请执行以下步骤。
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
答案 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模板中提供的默认数据库时遇到了此问题。这是由于尚未创建数据库。
要创建数据库并确保可访问该数据库,请执行以下步骤:
这将创建数据库并对其进行所有必要的迁移。
答案 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。
答案 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)
这适合我。
阅读此博客。
答案 22 :(得分:0)
有时候如果你在另一个sql server中打开这个数据库会出现这种麻烦(例如,你启动sql管理工作室(SMS)并添加这个数据库),并忘记停止这个服务器。结果 - 您的应用程序尝试连接已在另一台服务器下的此数据库中连接的用户。要解决此问题,请尝试通过Config停止此服务器。调度程序sql server。
我对英语不好道歉。 亲切的问候,Ignat。
答案 23 :(得分:0)
我发现在创建新登录时我还必须设置UserMapping选项,这解决了我的问题。希望能帮助那些也发现自己陷入困境的人!
编辑:将登录设置为db owner也解决了下一个问题
答案 24 :(得分:0)
使用 EF Code First 时,请确保数据库存在。您可以先运行 update-database 命令。