使用 VS2012 数据库项目:无法打开登录请求的数据库“my_database”

Posted

技术标签:

【中文标题】使用 VS2012 数据库项目:无法打开登录请求的数据库“my_database”【英文标题】:Using VS2012 Database Projects: Cannot open database "my_database" requested by the login 【发布时间】:2013-03-08 16:24:44 【问题描述】:

我正在尝试为现有产品启动和运行 VS2012 数据库项目。我架构比较了我的数据库以填充我的新数据库项目,一切看起来都很好。使用 Visual Studio 似乎可以正常部署,没有错误,但是当我尝试针对新部署的数据库运行我的应用程序时,出现以下错误:

无法打开登录请求的数据库“my_database”。登录失败。

我对此进行了广泛研究,发现了一些我不理解的奇怪行为。如果我在部署数据库后执行以下 sql,一切都会开始工作:

DROP SCHEMA [my_app_user] 
GO
DROP USER [my_app_user] 
GO
CREATE SCHEMA [my_app_user]
GO
CREATE USER [my_app_user] FOR LOGIN [my_app_user] WITH DEFAULT_SCHEMA=[my_app_user]
GO
ALTER ROLE [my_app_role] ADD MEMBER [my_app_user];
GO

奇怪的是,这段代码也在我的数据库项目中,完全如图所示,没有 drop 语句。它在我部署时创建了所有这些东西,但它不起作用。另一个奇怪的行为是当我在 Sql Server Management Studio 2012 中为用户打开登录并查看登录的用户映射时,它没有映射。我可以选中我的数据库的复选框,一切看起来都不错,但是当我单击确定并返回同一个窗口时,它不再被选中。运行上面的脚本使用户映射窗口看起来不错。

更新:我将 login/schema/user 的 create 语句和 role 的 alter 语句移到了数据库项目使用的部署后脚本中,现在它可以正常发布到数据库了。然而,数据库项目似乎想将这些语句与架构的其余部分放在一起,而不是部署后,所以我仍然想知道我可以做些什么来解决这个奇怪的问题..

这里发生了什么,我能做些什么来解决这个问题?感谢您的帮助!

【问题讨论】:

【参考方案1】:

您需要将用户与部署后脚本中的角色相关联:

http://msdn.microsoft.com/en-us/library/aa833199(v=vs.100).aspx

【讨论】:

欢迎来到 Stack Overflow!虽然这在理论上可以回答这个问题,it would be preferable 在这里包括答案的基本部分,并提供参考链接。【参考方案2】:

这听起来像是权限问题。数据库部署的安全上下文是否有权限运行这条sql语句?

DROP SCHEMA [my_app_user] 
GO
DROP USER [my_app_user] 
GO
CREATE SCHEMA [my_app_user]
GO
CREATE USER [my_app_user] FOR LOGIN [my_app_user] WITH DEFAULT_SCHEMA=[my_app_user]
GO
ALTER ROLE [my_app_role] ADD MEMBER [my_app_user];
GO

在 SQL Server 日志中查看数据库正在部署的时间点,并在执行部署的框中查看应用程序日志以查看是否有更详细的错误消息。

【讨论】:

我在这两个地方都没有看到任何似乎表明这些语句失败的东西。事实上,在 Sql Server Management Studio 中表面上看起来这些语句执行得很好。用户在那里,架构在那里,角色在那里,登录在那里。正如预期的那样,它们似乎相互关联。我不是 DBA,所以我不确定我是否看到了我应该做的,但是..

以上是关于使用 VS2012 数据库项目:无法打开登录请求的数据库“my_database”的主要内容,如果未能解决你的问题,请参考以下文章

无法打开用户默认数据库.登录失败.怎么解决

VS2010编写的代码在VS2012中打开,中文全部乱码

无法打开登录请求的数据库 MyDB。登录失败。用户“myUser”的登录失败

无法打开登录所请求的数据库 "xxxx"。登录失败。 用户 'NT AUTHORITYSYSTEM' 登录失败。

插入错误:无法打开登录请求的数据库“xxxx”

sql server无法打开登录所请求的数据库 登录失败