Как создать пользователя для входа в 2013 году в SQL Server Database Project
Я пытаюсь создать пользователя с логином для проекта базы данных SSDT. Логин уже существует на целевом сервере. Со следующим SQL:
CREATE USER [MyLogin]
FOR LOGIN [MyLogin]
WITH DEFAULT_SCHEMA = dbo
GO
Я получаю сообщение об ошибке:
Ошибка 1 SQL71501: Пользователь: [MyLogin] имеет неразрешенную ссылку на Login [MyLogin].
Я нашел два решения, но не работаю с 2013:
1) Создайте проект сервера, чтобы ссылаться на логин. Это не вариант в текущей версии SSDT/VS2013
2) Отключить проверку схемы. Опция отсутствует в 2013 году (я считаю, что она была Options -> Database Tools -> Schema Compare
)
Ответы
Ответ 1
Фактически вы можете создать вход на уровне сервера в проекте базы данных SQL Server с использованием стандартного синтаксиса T-SQL:
CREATE LOGIN [Login_Name] WITH PASSWORD = '<Password>';
Примечание. Вы также можете щелкнуть правой кнопкой мыши проект базы данных и выбрать "Добавить новый элемент" и перейти к SQL Server > Безопасность (в диалоговом окне шаблонов) и выбрать "Войти (SQL Server)",.
Это устраняет ошибку SQL71501 и (при условии, что вы используете SQLPackage.exe для развертывания) позволит SQLPackage.exe сопоставить объект безопасности с целевой базой данных до развертывания и публикации.
Надеюсь, что это поможет:)
Ответ 2
Если вам гарантирован доступ к логину на сервере, лучше всего настроить ваш файл master dacpac. Есть несколько инструкций о том, как это сделать здесь:
http://sqlproj.com/index.php/2013/02/how-to-add-objects-to-master-dacpac
В качестве альтернативы вы можете удалить ссылки на логины из части SSDT и обработать ее в сценариях после развертывания. Если у вас есть какая-либо среда, где разные разрешения должны применяться на разных серверах (Development, QA, Production), это может быть лучшим вариантом. Я писал об этом здесь: http://schottsql.blogspot.com/2013/05/ssdt-setting-different-permissions-per.html
Надеюсь, один из них поможет. Я фактически использовал первый вариант для решения проблемы с необходимостью использования EXECUTE AS, которая требует, чтобы пользователь находился в проекте. Было немного сложно получить точный XML, но я работал вокруг него, создав пустой проект, используя только этот логин, построил его и скопировал XML из dacpac в master dacpac.