我刚刚将现有的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管理用户(大多数人没有)。所以你可以脱掉它们,不要部署登录或用户。

有三种方式:

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"
.

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top