将“对用户未解决的引用”作为VS DB项目导入后
-
28-09-2020 - |
题
我刚刚将现有的SQL Server 2008R2生产数据库导入到VS 2013数据库项目中。
我现在沿着
的行得到了一些错误Error SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser].
.
我真的不需要我的VS DB项目来管理用户,但我担心它会尝试在部署时删除它们,如果它们不存在。
文件本身被生成为
CREATE USER [mydbuser] FOR LOGIN [mydbuser];
.
或
CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser];
.
错误标记显示它专门针对登录。因为这是一个系统级对象,我可以理解它超出了DB项目的范围。
是首选我将它们改变为
CREATE USER [mydbuser] WITHOUT LOGIN;
.
或将CREATE LOGIN
子句添加到每个文件的开头?
删除登录参考似乎更简单,完全删除用户将是最简单的。
我想确保我正在使用它的目的方式。重新发布任何回归生产的问题是否会出现任何问题?通过项目添加用户/登录的正确程序是什么?
解决方案
最简单的方法是无法通过SSDT管理用户(大多数人没有)。所以你可以脱掉它们,不要部署登录或用户。
有三种方式:
- 忽略用户/登录的新选项
- 编写部署贡献者以将它们拉出
- 使用我的部署贡献者 http://agilesqlclub.codeplex.com
ed
其他提示
我有同样的问题,发现这个链接
如果您创建特定于应用程序的登录(您应该)那么你 在尝试构建你的时候,将会遇到这个错误 解决方案。要更正此错误,请选择包含 选项中的“非应用程序范围”对象类型(齿轮图标 顶部)当您执行架构比较(右键单击数据库项目 找到模式比较)。然后,您可以将登录导入您的 常规项目,并分类引用。注意:如果您单击 “对象类型”选项卡,它将关闭对话框(为我做的), 相反,在突出显示的应用程序范围之前,请使用Tab键,然后 按向下箭头以突出显示非应用程序范围,然后按 空间栏。现在你应该能够单击确定并查看登录。
显然,此问题仍然在VS2017数据库项目上进行。
我设法首先创建登录并创建用户来解决它。
-- Windows Account
CREATE LOGIN [Domain\Username]
FROM WINDOWS WITH DEFAULT_LANGUAGE = [us_english];
GO
CREATE USER [Domain\Username] FOR LOGIN [Domain\Username];
GO
-- Sql Acccount
CREATE LOGIN [sql_account] WITH PASSWORD = 'Ch@ngeth1spA$swurD'
GO
CREATE USER [sql_account]
FROM LOGIN [sql_account]
WITH DEFAULT_SCHEMA = dbo
GO
-- Then set the sql file Build Action to "Build"
. 不隶属于 dba.stackexchange