VS 数据库项目用户创建错误

Posted

技术标签:

【中文标题】VS 数据库项目用户创建错误【英文标题】:VS Database Project User Creation Error 【发布时间】:2015-06-09 17:53:01 【问题描述】:

我正在尝试针对 SQLExpress 实例在本地发布以测试 VS 数据库项目的发布能力,并且我遇到了一个错误,它试图创建数据库中已经存在的用户。用户创建不是t 被包裹在 IF EXISTS 中,我没有看到任何类型的设置来控制或强制执行此操作。

具体来说,它是在抛出: 正在创建 [xyz\abc46518]... (208,1): SQL72014: .Net SqlClient 数据提供者: Msg 15063, Level 16, State 1, Line 1 登录已经有一个不同用户名下的帐户。 (208,0):SQL72045:脚本执行错误。执行的脚本: 为登录 [xyz\abc46518] 创建用户 [xyz\abc46518];

虽然脚本的其他部分有“IF EXISTS”和“IF NOT EXISTS”,但脚本的这一部分没有。

我希望能够将此作为脚本的一部分来控制数据库中的用户。如果有人选择授予访问权限并且它不在源代码中,那么在我们部署时它就会消失。

【问题讨论】:

我们放弃了原生的“用户”支持并推出了我们自己的支持,这在很大程度上基于 Jamie Thomson 的一些工作。这会将所有权限和用户置于部署后脚本中。 schottsql.blogspot.com/2013/05/… 你能在用户脚本中加入'IF NOT EXISTS'吗? 【参考方案1】:

我开始使用数据库项目,它们很棒,除了用户权限。 我对我们的数据库只有 dba 权限,而处理登录是在服务器级别。

所以在创建数据库项目时,我会生成以下代码:

为登录创建用户 [用户名]

当我去构建项目时会出错。

好吧,我想要用户,但不想麻烦地跟踪部署后的脚本,主要是因为它们破坏了我可爱的 ​​TFS 结构。

我的解决方案,有点hack,我没有创建用户,而是创建了一个同名的角色:

创建角色 [用户名] 授权[dbo];

现在我可以为我的对象分配权限给用户(我知道所有的访问都应该通过角色,但它不是我的数据库,所以我很乐意破解)

我们从不自己部署角色,因此对于我们开发人员来说,角色或用户并不重要。

【讨论】:

以上是关于VS 数据库项目用户创建错误的主要内容,如果未能解决你的问题,请参考以下文章

VS2017 数据库项目在模式比较期间为用户生成错误的密码

VS 中 Sql Server Database Project 的应用

vs2015 创建项目失败

从向导中取消 VS2010 项目创建

实体框架代码首先不使用 VS 2012 创建表

创建新项目时出现 vs2015 ctp6 错误