0

我的任务是将已在开发环境中成功运行的应用程序部署到暂存环境。部署发布的文件并配置 IIS 后,我可以看到初始登录屏幕,正如预期的那样。但是,当我尝试登录时,我得到:

Cannot open database "db1" requested by the login. The login failed.
Login failed for user 'user1'.

该设置包含以下部分:Windows Web Server 2008 R2、SQL Server Express 2008 R2、IIS 7、ASP.NET MVC4 和 Entity Framework 4.4

谷歌搜索没有发现任何成功的线索 - 这里和其他地方发布的答案都与最终不正确的凭据或服务器属性中未启用双模式身份验证有关。我看到服务器属性中启用了双模式身份验证,我可以通过在 SSMS 中使用 SQL Server 或 Windows 身份验证登录来确认这一点。这也向我证实了凭据是好的并被服务器接受。(如果我的想法有误,请纠正我)

SQL Server、IIS 和我正在测试的浏览器都在同一台机器上运行。

这是我的连接字符串:(替换了内部信息)

<add name="app1Entities" connectionString="metadata=res://*/app1.csdl|res://*/app1.ssdl|res://*/app1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=localhost\SQLEXPRESS;initial catalog=db1;user id=user1;password=pass1;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
4

1 回答 1

0

我找到了解决方案。这最终是一个权限问题。这个问题让我走上了正轨: SQL Server:无法打开登录请求的数据库

检查服务器日志显示:“无法打开明确指定的数据库”,然后是“错误 18456,严重性:14,状态:38”

谷歌透露状态 38 意味着权限问题。这个特定用户已经拥有数据库的“公共”服务器权限以及“db_datareader”和“db_datawriter”权限,所以我删除并重新创建了数据库上的用户,从而解决了这个问题。

编辑:

每次我恢复数据库时都会发生这种情况。显然,SQL 服务器对恢复的用户感到困惑。解决方法是执行此操作:

EXEC sp_change_users_login UPDATE_ONE, 'username_of_user', 'username_of_user';

恢复后,完全解决了这个问题。

于 2013-11-21T18:01:13.343 回答