Обеспечение безопасности репликации SQL Server 2000

ПУБЛИКАЦИИ  

По материалам статьи Marcin Policht: SQL Server 2000 Security - Part 9 - Replication Security
Перевод Александра Гладченко

Безопасность репликации - очень важная задача, которую нужно очень тщательно планировать. Давайте начнём с замечания о том, что процедуры создания/администрирования издателей, дистрибуторов и подписчиков (включая публикацию базы данных для репликации) доступны только для серверной роли sysadmin. После определения участников репликации, только члены роли sysadmin и члены роли db_owner публикуемой базы данных могут создавать и настраивать публикации. Мониторинг репликации доступен для членов серверной роли sysadmin и роли replmonitor базы данных distributor, которая создаётся автоматически, вместе с дистрибутором.

Дистрибутор создаётся в SQL Server Enterprise Manager с помощью опции "Configure Publishing, Subscribers and Distribution...", в пункте меню Tools -> Replication. Вы можете разместить издателя и дистрибутора на одном и том же компьютере, или использовать для дистрибутора отдаленный сервер. В последнем случае, издателя нужно сначала создать на сервере размещения дистрибутора. Сделать это можно на закладке Publishers диалогового окна Publisher and Distributor Properties, которое можно вызвать, выбрав опцию "Configure Publishing, Subscribers and Distribution...". Там Вы можете назначить издателей (из списка серверов, зарегистрированных в SQL Server Enterprise Manager), которых будет обслуживать дистрибутор. На закладке Distributor того же диалогового окна, Вы можете задать пароль подключения администратора, который будет использоваться издателями при подключении к дистрибутору, для его администрирования. На этих же закладках Вы можете увидеть опцию для создания нескольких базы данных distribution, выделенных для разных групп издателей (что повышает безопасность работы нескольких издателей с одним дистрибутором). При создании издателя, требуется определить логины пользователей, которые будут использовать агенты репликации для подключения к издателю. Аналогично, при создании подписчика, на закладке Subscribers диалогового окна Publisher and Distributor Properties, Вы должны установить контекст безопасности подключений агента к издателю/дистрибутору. Так как агенты репликации управляются заданиями SQL Server Agent, по умолчанию они работают в контексте безопасности учетной записи SQL Server Agent. Вы можете принять значение по умолчанию или изменить контекст подключения к SQL Server на другой, обладающий необходимым для этого набором разрешений. При создании публикаций можно разрешить существование анонимных подписчиков. Несмотря на то, что это упрощает управление публикацией, особенно когда подписчиков очень много, это негативно влияет на безопасность тиражируемых данных, и допустимо только после очень тщательного рассмотрения возможных последствий утечки информации.

Теперь давайте сделаем обзор требований безопасности для разных типов репликации. Начнём мы с общих для всех типов механизмов. Одним из таких механизмов является моментальный снимок, который используется в каждом типе репликации хотя бы один раз. Снимки обслуживаются программой Snapshot Agent, запускающейся на дистрибуторе, и имеют следующие требования безопасности:

  • Учетная запись контекста исполнения Snapshot Agent должна иметь на сервере издателя легитимный логин, и право на SELECT в тиражируемой публикации издаваемой базы данных. Для этого лучше всего подходит (в случае, если издатель и дистрибутор разнесены на разные компьютеры) используемая для запуска SQL Server Agent на сервере дистрибутора непривилегированная учётная запись пользователя домена (в контексте безопасности который будет работать Snapshot - агент, и которая является пользователем Windows NT 4.0, 2000 или более поздней версии). Для этой учётной записи на SQL сервере, являющемся издателем, должен быть создан логин с Windows аутентификацией, и ему нужно предоставить соответствующие права в публикуемой базе данных.

  • Snapshot Agent сохраняет тиражируемые данные в файлы, а также схемы и скрипты, создающие на подписчике статьи публикации. Эти файлы создаются издателем в сетевом ресурсе на дистрибуторе для размещения архива моментального снимка. Расположение этого ресурса может быть задано несколькими способами. Если издатель и дистрибутор находятся на одном компьютере, Вы получите запрос на указание расположения этого ресурса (Snapshot folder location) в мастере Configure Publishing and Distribution Wizard. Если они расположены на разных компьютерах, то местоположение папки для моментальных снимков можно определить в диалоговом окне Publisher Properties (в дополнение к контексту безопасности подключения агента репликации) при выборе издателей на сервере дистрибутора (как было показано выше). В этом же диалоговом окне, Вы можете указать необходимость использования издателем пароля для подключения к дистрибутору. Этот пароль будет назначен логину distributor_admin с SQL серверной аутентификацией и он входит в серверную роль sysadmin. Логин distributor_admin создаётся автоматически, при настройке репликации. Старайтесь использовать для этого логина криптостойкие пароли. Если нужно сменить этот пароль, используйте для этого только системную хранимую процедуру sp_changedistributor_password или закладку Distributor в диалоговом окне Publisher and Distributor Properties. По возможности, используйте для издателя доверительное подключение. Подключение без установленного пароля очень нежелательно, т.к. является очень большой уязвимостью сервера.
    Также Вы можете настраивать свойства дистрибутора и издателя при создании публикации, используя Create Publication Wizard или в диалоговом окне Create and Manage Publications. Эти два мастера доступны в меню Tools -> Wizards в контейнере Replication, или можно нажать правую кнопку мыши на контейнере Replication и выбрать пункт Configure Publishing, Subscribers and Distribution. Также Вы можете изменить эти параметры позже, изменив значения на закладке Snapshot Location в окне свойств публикации. Независимо от выбора альтернативного расположения снимка, папка снимка по умолчанию будет находиться в каталоге сервера - дистрибутора: "Program Files\Microsoft SQL Server\MSSQL\Repldata".
    Связанная с этим проблема безопасности заключается в том факте, что, по умолчанию, к этой папке обращаются через скрытый ресурс C$, то есть "\\distributor_server\C$\Program Files\Microsoft SQL Server\MSSQL\Repldata", к которому разрешён доступ членам локальной группы Administrators на сервере дистрибутора. Для этого, в свою очередь, требуется, чтобы учетная запись сервиса SQL Server Agent была добавлена в эту группу и получается, что она будет работать с очень высокими правами, создавая потенциальную уязвимость. Этого можно избежать, настроив запуск SQL Server Agent так, чтобы он работал в контексте безопасности непривилегированной учетной записи (для получения более подробной информации об этом изучите одну из предыдущих статей автора http://www.databasejournal.com/features/mssql/article.php/3349561), и изменив заданное по умолчанию место расположения и правила совместного доступа к папке моментальных снимков (создав специальный ресурс на сервере дистрибутора и указав его на закладке Snapshot Location). Убедитесь, что доступ к этой папке предоставлен только учетной записи, под которой запускается SQL Server Agent на дистрибуторе. Также обратите внимание, что каждый издатель может использовать разные папки снимков, задать которые также можно в диалоговом окне свойств издателя на дистрибуторе.
    Новшеством, появившемся в SQL Server 2000, является возможность определять альтернативное местоположение снимка. Это можно сделать в свойствах публикации на закладке Snapshot Location и в диалоговом окне Create and Manage Publications, доступном через меню Tools -> Replication. В окне Snapshot Location Вы можете определить основное (заданное по умолчанию) или альтернативное расположение моментальных снимков. Это может быть любой ресурс, доступный для Snapshot Agent и подписчиков, включая FTP каталог (информация о логине задаётся в этом же окне).
    Также, при использовании pull - подписки, папка для снимков должна быть доступна SQL Server Agent подписчиков. Запускающие эти сервисы учётные записи должны иметь право на чтение (на уровне NTFS) альтернативного ресурса моментальных снимков и основной папки, а так же права на SELECT в нескольких таблицах базы данных distribution (MSrepl_commands и MSrepl_transactions).
    В случае push - подписчиков репликации моментальных снимков, учетная запись SQL Server дистрибутора должна иметь достаточные права на подписчиках, в частности на CREATE и DROP в подписываемой базе данных, а так же на SELECT, INSERT, EXECUTE и DELETE для каждой статьи публикации.

Требования для работы Snapshot Agent одинаковы для всех типов репликации. Однако, при использовании репликации транзакций или репликации слиянием, Вы должны учитывать дополнительные аспекты, которые касаются работы дистрибутора и Log Reader агента для репликации транзакций или Merge - агента в случае репликации слиянием.

Log Reader Agent работает с дистрибутором. Его задача читать отмеченные для репликации транзакции в журнале издаваемой базы данных и копировать их в виде команд в базу данных distribution. Всё это происходит в контексте безопасности SQL Server Agent дистрибутора. Тиражированием изменений подписчикам занимается Distribution Agent, который, кроме необходимых ему для этого прав в базе distribution, также нуждается в правах на INSERT, UPDATE и DELETE в базах данных подписчиков, и должен иметь разрешение на чтение в папке моментальных снимков на дистрибуторе.

Merge Agent в репликации слиянием занимается синхронизацией данных между издателем и подписчиками. Он контролирует изменения с обеих сторон, разрешая возможные конфликты и отмечая все изменения данных в таблицах метаданных издателя. Для этого ему требуются прав на SELECT, DELETE, INSERT и UPDATE в базе данных издателя. Изменения, переданные агентом издателю, впоследствии будут применены другими подписчиками. Механизм изменений данных на подписчиках зависит от того, какой используется тип подписки, push или pull. В первом случае, Merge Agent запускается на дистрибуторе, подключается к подписчику и тиражирует изменения, для чего ему нужны права на INSERT, DELETE и UPDATE. Во втором случае, Merge Agent запускается на подписчиках, подключается к издателю, получает метаданные об изменениях и выполняет их на подписчике. Обратите внимание, что для pull - подписки существуют отдельные экземпляры Merge Agents на дистрибуторе и на подписчике. Вы можете использовать этот факт в своих интересах и запускать их под различными учетными записями, фактически регулируя уровень доступа, который подписчик имеет в базе данных distribution (и на сервере). Независимо от места запуска, Merge Agent нуждается в праве на чтение в папке снимков (по умолчанию это: "Program Files\Microsoft SQL Server\MSSQL\Repldata") на дистрибуторе.

При работе в составе Active Directory, Вы можете публиковать там экземпляры SQL Server, их базы данных и статьи для репликации как объекты домена. С одной стороны, это упрощает к ним доступ и облегчает их поиск для легитимных подписчиков; но с другой стороны, это потенциально выставляет их напоказ тем, кому об этих публикациях знать не положено.

Как Вы можете видеть, аспекты безопасности репликации баз данных SQL Server 2000 довольно сложны. К счастью, работа с ними значительно упрощена при использование мастеров, и предупреждений, которые выдаются ими в процессе конфигурирования, а также параметров по умолчанию, которые учитывают типовые требования безопасности.

[В начало]


Перевод: Александра Гладченко  2004г.

ПУБЛИКАЦИИ

Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz