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


11

我只是将现有的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];

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

我是否全部将其更改为

CREATE USER [mydbuser] WITHOUT LOGIN;

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

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

我想确保我按预期使用该工具。将这些重新发布回生产中是否会有任何问题?通过项目添加用户/登录的正确程序是什么?


1
我只是注意到并非所有用户都遇到这种情况。他们都碰巧是SQL用户,其中一些被禁用(而其他人则没有)。有什么想法从哪里开始寻找差异?
格雷格

Answers:


9

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

有三种方法:

埃德


您在此处的链接也很有帮助:blogs.msdn.com/b/ssdt/archive/2015/02/23/…–
Greg

1
您能否详细说明“忽略用户/登录的新选项”?
Yawar Murtaza


9

我遇到了同样的问题,并找到了此链接

用户对登录有未解决的引用

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


1
感谢您的答复!您可以为这些说明提供一些背景信息吗?例如,架构比较与该错误有什么关系?“对象类型”选项卡在哪里?您在哪里按Tab键?等等
杰克

当然。基本上在VS2013 / 2015中,您有一个数据库项目,其中包含要使用的解决方案的所有SQL。如果右键单击该数据库项目,然后单击“架构比较”,则可以将项目中的内容与数据库中的内容进行比较。在弹出的窗口顶部是用于设置的齿轮图标。由于某种原因,您不能使用鼠标单击“非应用程序范围”复选框,因此请使用Tab键。按一次Tab键,然后按向下箭头键,然后按空格键将其选中。希望能有所帮助。
SpeedOfSpin

1

显然,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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.