«Неразрешенная ссылка на пользователя» после импорта в виде проекта 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];

Маркер ошибки показывает, что это специально для входа в систему . Поскольку это объект системного уровня, я могу понять, что он выходит за рамки проекта db.

Желательно ли изменить их все на

CREATE USER [mydbuser] WITHOUT LOGIN;

или добавить CREATE LOGINпункт в начале каждого файла?

Удаление ссылки на логин кажется более простым, а удаление пользователей вообще будет самым простым.

Я хочу убедиться, что я использую инструмент так, как он был предназначен. Будут ли какие-либо проблемы в переиздании любого из тех назад к производству? Как правильно добавить пользователя / логин через проект?

Greg
источник
1
Я только заметил, что это произошло не для всех пользователей. Все они оказались пользователями SQL, а некоторые были отключены (хотя другие не были). Есть идеи, где начать искать различия?
Грег

Ответы:

9

Самый простой способ - не управлять пользователями через ssdt (большинство людей этого не делают). Таким образом, вы можете просто удалить их и не развертывать логины или пользователей.

Есть три способа:

  • новые возможности игнорировать пользователей / логины
  • написать вкладчик развертывания, чтобы вытащить их
  • используйте мой участник развертывания http://agilesqlclub.Codeplex.com

издание

Эд Эллиотт
источник
Ваша ссылка здесь также была весьма полезной: blogs.msdn.com/b/ssdt/archive/2015/02/23/…
Грег
1
Не могли бы вы рассказать о «новых опциях игнорирования пользователей / логинов»?
Явар Муртаза
@YawarMurtaza dba.stackexchange.com/a/150092/117350
Дуглас Гаскелл
9

У меня была такая же проблема и нашел эту ссылку

У пользователя есть неразрешенная ссылка на Логин

Если вы создаете приложения для входа в систему (что вам нужно), то вы столкнетесь с этой ошибкой при попытке построить свое решение. Чтобы исправить эту ошибку, выберите включение типов объектов «Не в области приложения» в параметры (значок шестеренки вверху) при сравнении схем (щелкните правой кнопкой мыши проект базы данных, чтобы найти сравнение схем). Затем вы можете просто импортировать логины в ваш обычный проект, и ссылки отсортированы. Примечание. Если вы щелкнете по вкладке «Типы объектов» и она закроет диалоговое окно (что она и сделала для меня), вместо этого используйте клавишу табуляции, пока не будет выделена область приложения, затем нажмите стрелку вниз, чтобы выделить область без приложения, и нажмите пробел. Теперь вы сможете нажать кнопку ОК и увидеть логины.

SpeedOfSpin
источник
1
Спасибо за ответ! Не могли бы вы предоставить некоторый контекст для этих инструкций? Например, какое отношение сравнение схем имеет к этой ошибке? Где находится вкладка «Типы объектов»? Где вы нажимаете клавишу Tab? И т.д.
Джейк
Конечно. В основном в VS2013 / 2015 у вас есть проект базы данных, который содержит весь ваш SQL для решения, которое вы используете. Если вы щелкнете правой кнопкой мыши по этому проекту БД и нажмете «Сравнение схем», вы сможете сравнить, что в вашем проекте с тем, что в вашей базе данных. Вверху всплывающего окна находится значок Cog для настроек. По какой-то причине вы не можете щелкнуть мышью по флажку «Не для приложения», поэтому используйте вместо этого клавишу табуляции. Нажмите клавишу табуляции один раз, затем клавишу со стрелкой вниз и затем пробел, чтобы выбрать его. Надеюсь, это поможет.
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"
Риз
источник