2010-05-21 2 views
0

Мы используем репликацию слиянием в одной из наших программ, и я хотел бы позволить нашим пользователям принудительно синхронизировать свои ноутбуки с издателем по мере необходимости (мы используем push-подписки). Я получил эту работу, используя REPLMERG.EXE (see my previous question).Разрешения, необходимые для запуска REPLMERG.EXE

Однако, когда пользователи TrID для запуска сценария они получили следующее сообщение об ошибке:

Только члены сисадмина или db_owner роли могут выполнять эту операцию.
...
Exec sp_MSreplcheck_subscribe
...

Если добавить группу вход в систему пользователей, как db_owner на их локальной базе данных подписки, то скрипт работает правильно. Проблема в том, что они также получают полный доступ к каждой таблице в своей локальной базе данных, с которой мы не можем жить.

Позволяет пользователям в топологии репликации слияния синхронизировать свои локальные push-подписки по требованию, не давая им полномасштабный контроль над db, кажется довольно простым вариантом использования, но я не могу заставить его работать.

ответ

2

От Replication Agent Security Model:

агента слияния для тяговой подписки

Учетная запись Windows, под которой агент работает используется, когда он делает подключения к подписчику. Эта учетная запись должна быть как минимум быть членом db_owner фиксированной базой данных в подписка база данных.

Счет, который используется для подключения к издателю и дистрибьютор должен:

  • быть членом PAL.
  • Будьте логин, связанный с пользователем в базе данных публикаций.
  • Будьте логин, связанный с пользователем в базе данных распространения. Пользователь может быть пользователем гостя.
  • Разрешения на чтение для общей копии моментальных снимков.

Поэтому документально требование Merge репликации, что учетная запись запуска агента репликации (replmerge.exe) быть членом db_owner. Если вы это не сработаете для вас, то репликация Merge не является подходящей технологией для использования, поскольку в ней есть требование, которое вы не можете заполнить.

Теперь теория int может делать все, что REPLMERGE делает из другого приложения, и вы можете использовать возможности подписи кода для запуска набора процедур оболочки, которым предоставляются привилегии dbo посредством подписи кода, поэтому не требуется повышенный вход, но это просто теория, так как процедуры репликации не совсем просты в использовании и не документированы на уровне, необходимо повторно реализовать агентов ...

+0

Мы используем нажимные подписки, не тянуть подписки. Я не знаю, имеет ли значение какое-либо значение в отношении разрешений. – mwolfe02

+0

В той же ссылке: «Учетная запись, используемая для подключения к подписчику, должна как минимум быть членом фиксированной роли базы данных db_owner в базе данных подписки». –

+0

Точно ответил на заданный вопрос, спасибо Ремусу. Для других, кто, возможно, столкнулся с той же дилеммой, что и мы, см. Ниже для нашего обходного пути. Я буду счастливо расширять наше решение, если у вас есть интерес. – mwolfe02

0

Подписчик должен иметь право на репликацию инструкций по определению данных, отправленных издателю. Некоторые из этих инструкций могут даже привести к повторной инициализации подписчика, что требует права на drop \ воссоздать соответствующую базу данных. В этих условиях требования безопасности, установленные Microsoft, звучат вполне разумно.

0

Как отметил Ремус и Филипп, db_owner на подписке db является жестким требованием для синхронизации подписки на слияние. Однако мы действительно хотели разрешить нашим пользователям синхронизировать собственный ноутбук, не предоставляя им полные права db_owner для базы данных.

Наше решение состояло в том, чтобы активировать аутентификацию в смешанном режиме для подписчиков и добавить пользователя SQL Server, единственной целью которого было позволить нашим конечным пользователям синхронизировать свои ноутбуки. Пользователю SQL Server, «syncuser», была предоставлена ​​роль db_owner в локальной базе данных подписки. Тогда, когда мы позвонили replmerg.exe из программы, мы определили следующие параметры:

-SubscriberSecurityMode 0 -SubscriberLogin syncuser -SubscriberPassword 4w3 $ 0m3_P4 $$ w0rd

Смежные вопросы