все что связано с моей работой
Главная » Технические » Автоматизируем обновление Скиф-Свод. Часть 2. Безопасность.

Автоматизируем обновление Скиф-Свод. Часть 2. Безопасность.

В нашем “батнике” авто обновления Скиф-а, есть один очень большой изъян с точки зрения безопасности.

Разберем команду загрузки обновлений базы и шаблонов, в общем виде выглядит так:

skif.exe -sSERVER -dSkif3 -usa -p -it».sql» –rs».xml» /fd

На всякий случай:

  1. -s<Server> – сервер где “лежит” база от Скиф-а;
  2. -d<DataBase> – имя базы данных;
  3. -u<UserName> – имя пользователя базы данных
  4. -p<Password> – пароль;
  5. -it"XXXX.sql” – указывает что надо выполнить обновление базы и скрипт обновления взять из файла XXXX.sql
  6. –rs”.xml” – тоже самое что и выше, только обновить шаблоны
  7. /fd – подавить все запросы “положительно”, которые выскачут в процессе загрузки

Из всего этого следует что у нас две проблемы по безопасности в нашем сценарии:

Первая проблема.

Это то что все действия выполняются от пользователя sa, который является “суперпользователем” sql-сервера. С точки зрения “теоретической” безопасности это очень плохо. Особенно если на этом sql-сервере есть еще что-то кроме Скиф-а.

Но избавиться от нее невозможно, по крайней мере пока, вернее штатными средствами Скиф-а. Почему? Потому что, для решения данной проблемы надо создать пользователя которому разрешить только импорт шаблонов и выполнение скритпа в базе.

Итак в Скифе создаем пользователя Updater с паролем “1”, пока тестим потом поменяем, и ФИО я заполнил “Для обновления”. Для того чтобы разрешить пользователю импортировать шаблоны надо в “Роли базы данных” добавить роль “Skif_DB_Task_Importer”:

Скиф-Свод. Роль базы данных

Скиф-Свод. Роль базы данных для пользователя

Если вы пойдете этим путем, рекомендую добавить этому пользователю любую задачу, чтобы при запуске программы не получать окошек вида “Данному пользователю не назначена ни одна задача”. Просто добавьте любую задачу, без прав

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

НО! таким же способов “Выполнить скрипт в базе данных” у меня не получилось. В ролях БД есть еще одна роль: Skif_DB_Task_Admin, но в хелпе написано что это “Куратор задач (Доступно редактирование шаблонов форм, контрольных соотношений и прочей метаинформации по всем задачам)” не то что нам надо.

Так что, выполнить обновление базы от имени пользователя не получится, по крайней мере с “наскока”. В теории можно загружать не через Скиф, а напрямую на сервер по аналогии с АИСБП, но при таком подходе надо чтоб на рабочей станции для загрузки был установлен клиент SQL-сервера. Еще можно покопаться  в ролях и правах на сервере,и возможно получится найти серверную роль которая даст возможность выполнять скрипт средствами Скиф-а. А пока придется оставить выполнение от имени “sa”.

Вторая проблема.

Это то что пароль хранится открытым текстом! А в нашем случае не просто пароль, а пароль от “суперпользователя”. И любой кто посмотрит наш батник будет обладать неограниченными правами не только в базе Скиф-а, а на ВСЕМ SQL-сервере. Эту проблему оказалось довольно просто решить. Достаточно убрать параметр “-p” с паролем и Скиф при запуске будет постоянно требовать пароль. Но, такой подход уменьшает “автоматизацию”. Потому что, надо сидеть и вводить пароль на каждом скрипте или файле шаблонов, не очень приятно когда обновляются шаблоны сразу по нескольким задачам.

  1. Наделение пользователя Updater всем доступными в Скиф-е правами – желаемого результата не дали.
  2. Копание в серверных ролях эффект дало, но проблему не решило. Если нашего Updater-а добавить в серверную роль “sysdmins” — то все будет работать, но это равносильно работе через sa.

Выход видится как бы только один. Все равно создаем бесправного пользователя и загружаем шаблоны от его имени, исправляем строку 22 на:

for /R %%f in (*.xml) do ..\skif.exe -sSERVER -dSkif3 -uUpdater -p123456 -it"%%f" /fd

а в строке 16 убираем “–р”, должно получится так:

for /R %%f in (*.sql) do ..\skif -sSERVER -dSkif3 -usa -rs"%%f" /fd

Обновления шаблонов будут идти от имени Updater-а и не будут требовать пароль, а обновления базы от пользователя sa и будет просить пароль. Таким образом мы решим нашу вторую проблему и частично первую

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.