Назад | Перейти на главную страницу

Возможно ли иметь нереплицированные данные на потребителе LDAP?

Я прочитал все доступная документация, то Освоение книги OpenLDAP, и как миллион сообщений в списке рассылки, но я не нашел способа сделать такой сценарий возможным. Я вижу несколько вариантов использования этого сценария, например, корпоративное приложение, синхронизирующее всех пользователей с основным LDAP организации, но сохраняющее собственные схемы и объекты, связанные с приложением, на своем сервере.

Так что, пожалуйста, не могли бы вы указать мне правильное направление или помочь мне вообще отказаться от такой возможности?

ИЗМЕНИТЬ 17 июня

Пример сценария:

Я пытаюсь получить все данные в o = area1, o = myorg, dc = org и o = area2, o = myorg, dc = org от провайдера, а также иметь возможность иметь дополнительные данные в потребителе, например o = subarea1, o = myorg, dc = org.

У меня нет проблем с получением данных от провайдера, я установил запись syncrepl в потребителе для каждой ветви (area1, area2) с разными ридами.

syncrepl rid=101 
 provider="ldap://provider:389" 
 bindmethod=simple 
 binddn="cn=replicator,o=myorg,cn=org" 
 credentials="***" 
 searchbase="o=area1,o=myorg,dc=org" 
 type=refreshAndPersist 
 retry="5 5 300 5" 
 timeout=3 
 schemachecking=off 
 scope=sub

и я также активировал syncprov на провайдере.

Проблема возникает, когда я пытаюсь добавить какие-либо данные о потребителе, всегда происходит сбой с ошибкой:

LDAP Error code 53 - shadow context; no update referral

Да, ты можешь. Просто найдите фильтр и атрибуты, которые вы хотите реплицировать в вашей конфигурации syncrepl

syncrepl rid=1
  provider=ldap://provider.myorg.com:389
  type=refreshOnly
  interval=01:00:00:00
  searchbase="ou=sales,o=employees,o=myorg,cn=com"
  filter="(objectClass=posixAccount)"
  scope=base
  attrs="cn,sn,userPassword"
  schemachecking=off
  bindmethod=simple
  binddn="cn=syncuser,o=myorg,cn=com"
  credentials=secret

теперь это выглядит следующим образом:

  • копировать только ou = sales, o = myorg, cn = com
  • реплицировать только схему posixAccount
  • только cn, sn и userPassword. Таким образом, сохраняя gid и uid потребителя нетронутыми.
  • и не входите в детей. Просто укажите baseDN. У области есть несколько вариантов.
    • sub, означает все с поддеревьями
    • один означает только базу поиска, а расположенную под ней
    • база, означает только поисковую базу

Однако есть одна загвоздка. Атрибуты, которых нет у вашей мастер-самбы, вам придется обновить вручную. Например, у вас есть пароль samba на вашем потребительском LDAP, а ваш главный LDAP его не имеет, вам необходимо обновить 2 LDAP для синхронизации sambaNTPassword и sambaLMPassword в потребительском LDAP с userPassword на главном LDAP, когда пользователь меняет свой пароль. Конечно, это применимо только в том случае, если вы хотите, чтобы пароли синхронизировались.

Если вы имеете в виду, возможно ли иметь другую схему данных для потребителя, то я думаю, что вы могли бы просто реплицировать вещи отдельно для одного леса (или создать другой), а затем подключить потребителя к этому лесу или сайту AD. К сожалению, я использовал openldap очень недолго. Надеюсь, это поможет .

2 бэкенд-подхода

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

Вы определяете ou=sales,o=employees,o=myorg,cn=com как DN одного бэкэнда с настройками репликации. И вы определяете ou=accounting,o=employees,o=myorg,cn=com как DN другого бэкэнда, без настроек репликации.

1 бэкэнд-подход

Если все должно храниться в одном бэкэнде, я представляю себе следующее:

  1. Настройте внутреннюю репликацию в режиме с несколькими мастерами. Таким образом, оба сервера доступны для записи
  2. Там, где должно быть локально записываемое дерево, внедрите ACI, чтобы при необходимости сохранить реплицированные данные только для чтения для локальных пользователей.
  3. Если дерево с возможностью локальной записи должно храниться локально, а не реплицироваться, вы можете настроить директиву для выполнения выборочной репликации (игнорирование атрибутов, объекта, DN, ...)

У меня была аналогичная проблема, и я нашел вариант, который позволяет записывать на основе потребителя:

olcMirrorMode: TRUE

Его необходимо добавить после всех опций syncrepl. Думаю, это тоже решит вашу проблему.