导入为 VS DB 项目后出现“未解析的用户引用”

Gre*_*reg 12 sql-server ssdt database-projects

我刚刚将现有的 SQL Server 2008r2 生产数据库导入到 VS 2013 数据库项目中。

我现在遇到了一些错误

Error       SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser].
Run Code Online (Sandbox Code Playgroud)

我真的不需要我的 VS DB 项目来管理用户,但我担心如果它们不存在,它会在部署时尝试删除它们。

文件本身生成为

CREATE USER [mydbuser] FOR LOGIN [mydbuser];
Run Code Online (Sandbox Code Playgroud)

或者

CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser];
Run Code Online (Sandbox Code Playgroud)

错误标记显示它专门用于Login。由于这是一个系统级对象,我可以理解它超出了 db 项目的范围。

我是否更喜欢将它们全部更改为

CREATE USER [mydbuser] WITHOUT LOGIN;
Run Code Online (Sandbox Code Playgroud)

或将CREATE LOGIN子句添加到每个文件的开头?

删除登录引用似乎更简单,而完全删除用户将是最简单的。

我想确保我按照预期的方式使用该工具。将其中任何一个重新发布到生产环境中会不会有任何问题?通过项目添加用户/登录的正确程序是什么?

小智 11

我遇到了同样的问题,找到了这个链接

用户有一个未解析的登录引用

如果您创建了特定于应用程序的登录名(您应该这样做),那么您将在尝试构建解决方案时遇到此错误。要更正此错误,请在进行架构比较(右键单击数据库项目以查找架构比较)时在选项(顶部的齿轮图标)中选择包括“非应用程序范围”对象类型。然后,您可以将登录名导入到您的常规项目中,并且对引用进行排序。注意:如果您单击“对象类型”选项卡并关闭对话框(它为我所做的),请使用 Tab 键直到突出显示应用程序范围,然后按向下箭头突出显示非应用程序范围并按空格键。现在您应该能够单击“确定”并查看登录信息。


Ed *_*ott 10

最简单的方法是不通过 ssdt 管理用户(大多数人不这样做)。因此,您可以将它们去掉,而不要部署登录名或用户。

有以下三种方式:

埃德

  • 您能否详细说明“忽略用户/登录名的新选项”? (3认同)

rea*_*eas 6

显然,这个问题在 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"
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

26117 次

最近记录:

4 年,12 月 前