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.
18 回答
嗯,错误很清楚,不是吗?您正在尝试使用用户“xyz / ASPNET”连接到您的SQL Server - 这是您的ASP.NET应用程序运行的帐户 .
此帐户不允许连接到SQL Server - 在该帐户的SQL Server上创建登录,或者在连接字符串中指定另一个有效的SQL Server帐户 .
你能告诉我们你的连接字符串(通过更新原始问题)吗?
更新:好的,您正在使用集成的Windows身份验证 - >您需要在SQL Server上为“xyz \ ASPNET”创建SQL Server登录 - 或者将您的连接字符串更改为:
如果您的数据库中有一个用户名为“xyz”,密码为“top $ secret” .
要么:"xyz\ASPNET"不是登录名(在sys.server_principals中)
或:"xyz\ASPNET"已设置但未映射到数据库测试中的用户(sys.database_principals)
我会选择第二个选项:错误消息暗示默认数据库不存在或没有权限,而不是设置为登录 .
测试它是否设置为登录
如果为NULL
如果不是NULL
如果为NULL
登录问题的最佳解决方案是在sqlServer中创建登录用户 . 以下是创建使用Windows身份验证(SQL Server Management Studio)的SQL Server登录的步骤:
在SQL Server Management Studio中,打开对象资源管理器,然后展开要在其中创建新登录名的服务器实例的文件夹 .
右键单击“安全性”文件夹,指向“新建”,然后单击“登录” .
在“常规”页面上,在“登录名”框中输入Windows用户的名称 .
选择Windows身份验证 .
单击“确定” .
例如,如果用户名是
xyz\ASPNET
,则在“登录名”框中输入此名称 .您还需要更改用户映射以允许访问要访问的数据库 .
大多数情况下,这不是登录问题,而是创建数据库本身的问题 . 因此,如果创建数据库时出错,则不会首先创建它 . 在这种情况下,如果您尝试登录,则无论用户如何,登录都将失败 . 这通常是由于db上下文的逻辑错误解释而发生的 .
在浏览器中访问该站点并真正阅读这些错误日志,这可以帮助您发现代码的问题(通常与模型的逻辑问题相冲突) .
在我的情况下,代码编译好,相同的登录问题,而我还在下载管理工作室,我通过错误日志,修复了我的数据库上下文约束和网站开始运行良好....同时管理工作室仍在下载
我有这个问题,为我解决的问题是:
转到IIS中的应用程序池
右键单击我的项目应用程序池
在Process Model部分打开Identity
选择自定义帐户选项
输入您的电脑用户名和密码 .
问题
该错误表现为类似于此的消息:
通常无法通过简单的Visual Studio或完整计算机重新启动来纠正错误 .
该错误也可以作为看似锁定的数据库文件找到 .
修复
解决方案包括以下步骤 . 您不会丢失数据库中的任何数据,也不应删除数据库文件!
先决条件:您必须已安装SQL Server Management Studio(完整或快速)
打开SQL Server Management Studio
在"Connect to Server"窗口(文件 - >连接对象资源管理器)中输入以下内容:
服务器类型:数据库引擎
服务器名称:(localdb)\ v11.0
身份验证:[无论您在创建本地数据库时使用了什么 . 可能是Windows身份验证) .
点击"Connect"
在对象资源管理器中展开"Databases"文件夹(View-> Object Explorer,F8)
找到你的数据库 . 它应该被命名为数据库(.mdf)文件的完整路径
你应该看到"(Pending Recovery)"在结尾处数据库名称或当您尝试扩展数据库时,它将无法,可能会也可能不会给您一个错误消息 .
这个问题!您的数据库已基本崩溃..
右键单击数据库,然后选择"Tasks -> Detach..." .
在分离窗口中,在列表中选择您的数据库并检查显示"Drop Connections"的列
单击“确定” .
您应该看到数据库从数据库列表中消失 . 你的问题现在应该修复了 . 转到并运行使用localdb的应用程序 .
运行应用程序后,您的数据库将重新出现在数据库列表中 - 这是正确的 . 它不应该再说"Pending recovery",因为它应该正常工作 .
The source of the solution: https://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
我使用Windows身份验证连接到本地数据库.mdf文件,我的本地服务器是sql server 2014.我的问题解决了使用此连接字符串:
最好的选择是使用Windows集成身份验证,因为它比sql身份验证更安全 . 在sql server中创建具有必要权限的新Windows用户,并在应用程序池安全设置中更改IIS用户 .
我试图更新用户,它工作 . 请参阅以下命令 .
只需要相应地替换
user('ftool')
.我没有在前面的问题中看到这一点,所以让我抛出另一种可能性 . 可能是
IFItest
无法访问或根本不存在 . 例如,如果一个配置有多个配置,每个配置都有自己的数据库,则可能是数据库名称未更改为当前配置的正确配置 .对我来说,数据库没有创建,EF代码首先应该创建它,但总是在这个错误中 . 相同的连接字符串在aspnet核心默认Web项目中工作 . 解决方案是添加
在第一次数据库联系之前(在DB播种之前) .
我发现在创建新登录时我还必须设置UserMapping选项,这解决了我的问题 . 希望能帮助那些也发现自己陷入困境的人!
编辑:设置登录名为db owner也解决了下一个问题
有时候如果你在另一台sql server中打开这个数据库会出现这种麻烦(例如,你启动sql管理工作室(SMS)并添加这个数据库),并忘记停止这个服务器 . 结果 - 您的应用程序尝试连接已在另一台服务器下的此数据库中连接的用户 . 要解决此问题,请尝试通过Config停止此服务器 . 调度程序sql server .
我对英语不好道歉 . 亲切的问候,Ignat .
这对我有用 .
转到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/
在我的情况下,asp.net应用程序通常可以毫无问题地连接到数据库 . 我在日志中发现了这样的消息 . 我turn on the SQL server logs并且我发现了这条消息:
所以似乎服务器正在重新启动,并且SQL服务器已经关闭了一点,然后ASP.NET应用程序和数据库在服务器重启之前几秒钟就不可用了 .
即使您已将登录设置为数据库所有者并为将使用登录的数据库设置用户映射,请检查实际数据库用户(而不仅仅是登录名)是否具有“所有者”角色 .
当您输入错误的DB名称时也会发生这种情况
有时,这只是一个愚蠢的错误 . 我花了大约1个多小时才发现这个:(因为我只是先尝试了很多困难的事情
注意:如果使用Windows服务来托管Web服务 .
您必须确保您的Web服务使用正确的登录帐户连接到SQL Server .
开放服务(我假设已经安装了windows服务)
右键单击服务并转到属性 .
单击"Log On" Tab
单击"This account"单选按钮
点击"Browse"
在文本字段中输入Pc用户名,然后单击右侧的"Check Name"按钮 .
单击文本字段中的文本,按"OK"按钮
输入登录密码并申请