0

我正在尝试为现有产品启动并运行 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 中打开用户的登录名并查看登录名的用户映射时,它没有被映射。我可以选中我的数据库的复选框,一切看起来都不错,但是当我单击确定并返回同一个窗口时,它不再被选中。运行上面的脚本使用户映射窗口看起来不错。

更新:我将登录/模式/用户的创建语句和角色的更改语句移动到数据库项目使用的部署后脚本中,现在它可以很好地发布到数据库。然而,数据库项目似乎希望将这些语句与架构的其余部分放在一起,而不是部署后,所以我仍然想知道我能做些什么来解决这个奇怪的问题。

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

4

2 回答 2

0

这听起来像是权限问题。部署数据库的安全上下文是否有权限运行这条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 日志中查看数据库正在部署的时间点,并在执行部署的框中查看应用程序日志以查看是否有更详细的错误消息。

于 2013-03-08T19:03:39.313 回答
0

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

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

于 2013-03-08T18:57:30.130 回答