SSIS Очистить зашифрованный пароль при снятии отметки с чувствительных - PullRequest
3 голосов
/ 07 марта 2019

Использованные инструменты

  • Visual Studio 2017 (с SSIS)
  • SQL Server Management Studio 17.9.1

Участие в процессе

Два разработчика служб SSIS и SSMS с каталогом служб Integration Services, в котором хранятся развернутые проекты.

Обзор

У меня естьрешение с проектами внутри, созданным в SSIS.Каждый проект имеет параметры проекта, определяющие для каждого соединения с базой данных два разных параметра: Строка соединения и пароль.Пароль помечен как конфиденциальный.

Project, и для всех его пакетов ProtectionLevel установлено значение EncryptAllWithPassword.Проект загружается в репозиторий git, а другой разработчик загружает изменения.Теперь ему нужно предоставить пароль, чтобы иметь возможность работать с проектом (или несколькими проектами в рамках решения).Пока все хорошо, у нас есть «главный пароль» на уровнях проекта, который защищает доступ к таким параметрам, как конфиденциальные пароли.Когда разработчик переходит к Project.params и снимает отметку с чувствительной отметки, отображается пароль.Пока все хорошо, так как ему нужно было сначала узнать пароль для проекта, чтобы увидеть пароли.

Вот сложная часть

Когда проект находится в стадии разработкиВ развернутом каталоге приложений Integration Services ProtectionLevel изменяется, и проект, который можно экспортировать из Management Studio, больше не защищен паролем.Для экспорта такого проекта очевидно требуется разрешение ssis_admin , но это выходит за рамки данной проблемы.Когда проект был развернут и затем импортирован обратно из SSMS в SSIS, разработчик может открыть его без пароля и снять отметку с чувствительной отметки для паролей Project.params.Все пароли видны для него сейчас.Это неправильно.

Чего я пытаюсь достичь

Я хочу имитировать то же поведение с чувствительными значениями, которые мы имеем в SSMS.Всякий раз, когда вы снимаете отметку с чувствительной метки в переменной среды, значение очищается, как показано ниже.

enter image description here

Однако, когда я делаю то же самое в проекте SSIS.params (отметка, не отмеченная галочкой), значение по-прежнему отображается, поэтому я вижу все пароли - как показано ниже.

enter image description here

Мне бы хотелосьон должен быть сохранен как есть, но не может видеть текстовое значение.

Возможно ли это вообще?Или, может быть, есть лучший способ организовать это?Мне нужно иметь возможность выполнять пакеты из агента SQL Server Agent (SSMS), предоставляющего переменные среды, а также со своего собственного компьютера в SSIS, поэтому мне нужно хранить эти пароли, чтобы не повторять их каждый раз.

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Эта проблема, которую вы описали, является реальной проблемой для любой команды, работающей совместно над службами SSIS.Я опишу шаблон, который я использовал для решения этой проблемы, что может быть полезно.Во-первых, я должен заявить, что мне не нравится хранить пароли в системе контроля версий, даже если они зашифрованы.Вот что я обычно делаю:

  • Установите все пакеты и проекты служб SSIS на Не сохранять чувствительные.Это удаляет все пароли из файлов и закрывает лазейку управления исходным кодом
  • Когда это возможно, все разработчики должны иметь локальную настройку экосистемы ETL - базы данных SQL (нет данных или только данные тестирования), файловая система,и т.д. Все пакеты должны быть настроены для работы в этой локальной среде.Таким образом, вы можете быть администратором, подключаться к аутентификации Windows и иметь полный контроль над тестовыми данными.Это также помогает избежать вмешательства в разработку и тестирование других пользователей.
  • Для соединения SQL установите параметры для строки соединения и пароля.Строка подключения может указывать на ваш локальный экземпляр и использовать аутентификацию Windows.Пароль может быть пустым и отмечен как конфиденциальный.Если каждый настраивает свою локальную систему одинаково, то ничего не нужно менять, когда другой разработчик открывает это и начинает работу над проектом.
  • Для развертывания среды могут быть настроены для каждого сервера.При желании пароль можно использовать для проверки подлинности SQL, и строка подключения изменится, включив в себя свойство имени пользователя, а не Windows Auth.

Приведенный выше шаблон делает его действительно простым для разработки в команде и довольно простым.для автоматизации развертывания.

1 голос
/ 09 марта 2019

Я бы предложил использовать каталог проектов служб SSIS и Среды проекта вместе со следующим подходом.
Представьте, что пакеты SSIS программы или бегуны , а базы данных - ресурсы . Таким образом, пакеты не зависят от ресурсов, а ресурсы настраиваются на этапе настройки пакета в конкретной среде.
На практике это приводит к следующей конфигурации и действиям:

  • Пакеты создаются и разрабатываются в Режим проекта SSIS . Все соединения устанавливаются на уровне проекта.
  • Не сохранять пароли в пакетах или проектах.
  • В каждой среде, в которой развернут Проект, определена конфигурация переменных среды, в которой мы храним конфигурацию баз данных, а именно
    • Строки подключения, могут быть вырезаны и вставлены из оригинальной упаковки
    • Имя БД
    • Имя сервера
    • Имя пользователя, если Windows Auth не используется
    • Пароль, если Windows Auth не используется
  • После развертывания проекта необходимо сопоставить все параметры подключения проекта с переменными среды. Для этого мы создали простую программу на C #.
  • Значения из переменных среды используются при соответствующих значениях параметров соединений. Более того, вы можете хранить там другие параметры конфигурации, а не только соединения.
  • Вы можете иметь несколько наборов параметров в одной среде и выбирать набор при запуске пакета.
  • Автоматизированное тестирование выполняется с использованием сценариев, а среда определяется в сценарии тестирования.

Итак, каждая среда, в которой мы развертываем проект, имеет конфигурационную среду со всеми данными подключения. Параметры подключения в средах обеспечения качества предоставляются инженером env; Разработчик не должен беспокоиться об этом.

...