无法打开login请求的数据库“testing”。 login失败。 用户'xyz \ ASPNET'login失败
我创build了一个Web服务,它将一些数据保存到数据库。 但是我得到这个错误:
无法打开login请求的数据库“testing”。 login失败。 用户'xyz \ ASPNET'login失败。
我的连接string是
Data Source=.\SQLExpress;Initial Catalog=IFItest;Integrated Security=True
那么错误很明显,不是吗? 你正尝试用用户“xyz / ASPNET”连接到你的SQL Server – 这就是你的ASP.NET应用程序正在运行的帐户。
此帐户不允许连接到SQL Server – 要么在SQL Server上为该帐户创buildlogin名,要么在连接string中指定另一个有效的SQL Server帐户。
你能告诉我们你的连接string(通过更新你的原始问题)吗?
更新:好吧,您正在使用集成的Windows身份validation – >您需要在SQL Server上为“xyz \ ASPNET”创build一个SQL Serverlogin名 – 或者将连接string更改为:
connectionString="Server=.\SQLExpress;Database=IFItest;User ID=xyz;pwd=top$secret"
如果你的数据库中有一个用户“xyz”,密码是“top $ secret”。
- 或者:“xyz \ ASPNET”不是login名(在sys.server_principals中)
- 或者:“xyz \ ASPNET”是build立起来的,但是没有映射到数据库中的一个用户test(sys.database_principals)
我会去第二个选项:错误消息意味着默认数据库是不存在或没有权利,而不是设置为login。
testing它是否被设置为login
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]
login问题的最佳解决scheme是在sqlServer中创build一个login用户。 以下是创build使用Windows身份validation的SQL Serverlogin(SQL Server Management Studio)的步骤:
- 在SQL Server Management Studio中,打开对象资源pipe理器并展开要在其中创build新login的服务器实例的文件夹。
- 用鼠标右键单击安全性文件夹,指向新build,然后单击login。
- 在“常规”页面上,在“login名”框中inputWindows用户的名称。
- selectWindows身份validation。
- 点击OK。
例如,如果用户名是xyz\ASPNET
,则在login名框中input该名称。
您还需要更改用户映射以允许访问您要访问的数据库。
大多数情况下,这不是login问题,而是创build数据库本身的问题。 所以,如果创build数据库时发生错误,首先不会创build它。 在这种情况下,如果您尝试login,则无论用户如何login都将失败。 这通常是由于db语境的逻辑错误解释而发生的。
在浏览器中访问该网站,并真正阅读这些错误日志,这可以帮助你发现你的代码问题(通常与模型相冲突的逻辑问题)。
在我的情况下,代码编译好,同样的login问题,而我还在下载pipe理工作室,我经历了错误日志,固定我的数据库上下文约束和网站开始运行良好….与此同时pipe理工作室仍在下载
我用Windows身份validation连接到本地数据库.mdf文件,我的本地服务器是SQL Server 2014.我的问题解决使用此连接string:
string sqlString = " Data Source = (LocalDB)\\MSSQLLocalDB;" + "AttachDbFilename = F:\\.........\\myDatabase.mdf; Integrated Security = True; Connect Timeout = 30";
问题
该错误呈现为类似于以下的消息:
无法打开login请求的数据库“DATABASE NAME”。 login失败。 用户XYZlogin失败。
- 错误通常不能通过简单的Visual Studio或全电脑重新启动来纠正。
- 该错误也可以作为看似locking的数据库文件find。
修正
解决scheme按照以下步骤进行。 您不会丢失数据库中的任何数据,也不应该删除数据库文件!
先决条件:您必须安装了SQL Server Management Studio(Full或Express)
- 打开SQL Server Management Studio
- 在“连接到服务器”窗口中(文件 – >连接对象资源pipe理器)input以下内容:
- 服务器types:数据库引擎
- 服务器名称:(localdb)\ v11.0
- 身份validation:[无论您在创build本地数据库时使用了什么。 可能是Windows身份validation)。
- 点击“连接”
- 展开对象资源pipe理器中的“数据库”文件夹(查看 – >对象资源pipe理器,F8)
- find你的数据库。 它应该被命名为数据库(.mdf)文件的完整path
- 你应该在数据库名称末尾看到“(Pending Recovery)”,或者当你试图扩展数据库时,它将不能够,也可能不会给你一个错误信息。
- 这个问题! 你的数据库已经崩溃了..
- 右键单击数据库,然后select“任务 – >分离…”。
- 在分离窗口中,从列表中select您的数据库并选中“Drop Connections”
- 点击OK。
- 您应该看到数据库从数据库列表中消失。 你的问题现在应该被修复。 去运行使用您的localdb的应用程序。
- 运行应用程序后,数据库将重新出现在数据库列表中 – 这是正确的。 它不应该说“等待恢复”,因为它应该正常工作。
解决scheme的来源: https : //www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
最好的select是使用Windows集成身份validation,因为它比sql身份validation更安全。 使用必要的权限在sql server中创build一个新的Windows用户,并在应用程序池安全设置中更改IIS用户。
我在前面的问题中没有提到这个,所以让我抛出另外一个可能性。 可能是IFItest
不可访问或根本不存在。 例如,如果有多个configuration,每个configuration都有自己的数据库,那么数据库名称可能不会更改为当前configuration的正确configuration。
我有这个问题,为我解决这个问题是:
- 转到IIS中的应用程序池
- 右键单击我的项目应用程序池
- 在Process Model部分打开Identity
- select自定义帐户选项
- input您的电脑用户名和密码。
我发现在创build新的login时,我还必须设置UserMapping选项,这解决了我的问题。 希望能帮助那些也发现自己陷入困境的人!
编辑:设置login为数据库所有者也解决了下一个问题
我试图更新用户,它的工作。 看下面的命令。
USE ComparisonData// databaseName EXEC sp_change_users_login @Action='update_one', @UserNamePattern='ftool',@LoginName='ftool';
只需要replaceuser('ftool')
。
有些时候,如果你打开这个数据库在另一个SQL服务器(例如,启动SQLpipe理工作室(SMS),并添加此数据库),可能会出现这种麻烦,并忘记停止此服务器。 因此,你的应用程序尝试连接已经连接在这个数据库下的另一台服务器的用户。 要解决这个问题,请尝试通过Config来停止这个服务器。 调度员的SQL Server。
我对坏英语表示歉意。 亲切的问候,Ignat。
这对我有用。
- 转到SQL Server >>安全>>login,然后右键单击NT AUTHORITY \ NETWORK SERVICE并select属性
- 在新login的属性页面中,进入“用户映射”页面。
- 然后,在“用户映射”选项卡上,select所需的数据库 – 尤其是显示此错误消息的数据库。
- 点击OK。
阅读这个博客。
在我的情况下,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应用程序之前已经closures了一些,并且在服务器重启之前数据库不可用几秒钟。
即使您已将login名设置为数据库所有者,并为将使用login名的数据库设置用户映射,请检查实际的数据库用户(不仅仅是login名)是否具有“所有者”angular色。