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 管理用户(大多数人不这样做)。因此,您可以将它们去掉,而不要部署登录名或用户。
有以下三种方式:
埃德
显然,这个问题在 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 次 |
| 最近记录: |