Im делают некоторые автоматизации и в середине переписывания 10-15 старых, причудливых сценарии к одной и простой блок, который может:DacPac исключить пользователей и логины на экспорт или импорт
- Экспорт схема базы данных от MsSql2012 в производственной среде
- Импорт схемы базы данных в MsSql2012 в среде разработки
Im делает это с помощью Microsoft.SqlServer.Dac, в котором я могу экспортировать/импорт DAC пакеты.
Это работает красиво :), но после выполнения всех моих TDD и тестирования, пришло время для реальной вещи, и оказалось, что я полностью упустил, что у меня есть 2 домена на моей работе.
Это означает, что я получаю сообщение об ошибке при импорте dacpac в среде dev, из-за того, что наши 2 домена не имеют полного доверия в двух направлениях, и, конечно, у базы данных есть пользователи из обоих доменов. В частности, пользователи производственного домена. я могу увидеть 3 жизнеспособных решений:
- Gain полное доверие между средами. Но этого не произойдет из-за высокого уровня безопасности, который был применен в моей работе.
- Импорт dacpac без пользователей.
- Экспортировать в dacpac без пользователей.
Ive прочитало документацию (что, разумеется, нечетко), пытаясь найти набор опций, которые могли бы достичь 2) или 3). Ive тестирует множество комбо, но ни один из них не будет работать. Импорт dac pac продолжает пытаться создавать пользователей и терпеть неудачу, поскольку пользователи продукта не могут быть проверены в среде dev.
Im using Развертывание и извлечение для экспорта/импорта. Различных вариантов можно найти здесь:
- Extract: http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dac.dacextractoptions.aspx
- Deploy: http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dac.dacdeployoptions.aspx
Нет комбинированный я нашел работу и Ive даже читать сообщения, которые предполагают, что его ошибка в DacPac , Но я не уверен. Последний вариант, который я сейчас рассматриваю, заключается в использовании метода GenerateScript, который, надеюсь, может заставить исключить пользователей/логинов, но я боюсь, что он не будет работать. См. (http://technet.microsoft.com/en-us/library/hh753526.aspx).
Вопрос: Как я могу исключить пользователей/логинов из моего dacpac, будь то в экспорте или в импорте?
UPDATE
Текущие настройки Извлечение:
IgnoreUserLoginMappings = true,
VerifyExtraction = false,
Текущий Deploy Настройки:
CreateNewDatabase = true,
DeployDatabaseInSingleUserMode = true,
DisableAndReenableDdlTriggers = true,
IgnoreUserSettingsObjects = true,
Update
До сих пор все указывает на одно уродливое решение.
I can generate a deploy script using DacServices.
Then i can parse the script (Remove logins etc).
Then write the result to a file.
And then call SQLCMD in an external process given it the generated and parsed file.
Finally i must evaluate the result from the SQLCMD process.
Причиной использования SQLCMD является то, что сгенерированный скрипт apperently не является чисто TSQL, но использует материал как «: SetVar», который только SQLCMD может работать, насколько я могу судить. Приходите на MS ...
Опять же, если кто-нибудь знает лучший способ сделать это на C# или узнать об исправлении/обновлении ошибки для сборок DacPac, пожалуйста, поделитесь. :)
Update
Я обнаружил, что такие вещи, как IgnorePartitionSchemes тоже не работают. Похоже, что пространство имен Microsoft.SqlServer.Dac не просто немного, но ОЧЕНЬ глючно или отсутствует реализация.
Ive allready попробовал это. Поэтому я сделал чистый экспорт и импорт и получил тот же результат: {«Не удалось развернуть пакет. \ R \ nError SQL72014:.Net SqlClient Data Provider: Msg 15401, уровень 16, состояние 1, строка 1 Пользователь или группа Windows NT «PROD \\ Read_Write TestDB» не найден. Проверьте имя еще раз. \ R \ nError SQL72045: Ошибка выполнения скрипта. Выполненный скрипт: \ r \ nCREATE LOGIN [PROD \\ Read_Write TestDB] \ r \ n ИЗ WINDOWS WITH DEFAULT_DATABASE = [****], DEFAULT_LANGUAGE = [us_english]; \ r \ n \ r \ n \ r \ n "} –
Удивительно, это была именно та настройка, которая сделала трюк для меня. – Astrotrain