“никакое глобальное превосходящее знание” при добавлении страны

Я думаю, что Вам нужен mysqlrepair:

mysqlrepair -r tablename

(Просто реализованный это совпадает с mysqlcheck.)

То, в чем Вы нуждаетесь, является явным восстановлением вместо автовосстановления.

11
задан 15 January 2013 в 19:56
2 ответа

Благодаря ответу larsks , вот что я сделал.

Во-первых, вот выдержка из конфигурации по умолчанию в Ubuntu 12.04 (файл / etc / ldap / slapd.d / cn = config / olcDatabase = {1} hdb.ldif ):

dn: olcDatabase={1}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain

Итак, я создал следующий change_suffix.ldif :

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization,c=fr
-
replace: olcRootDN
olcRootDN: cn=admin,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,o=myorganization,c=fr" write by * none
olcAccess: {2}to * by self write by dn="cn=admin,o=myorganization,c=fr" write by * read

и добавил его в свой ldap с помощью следующей команды:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f change_suffix.ldif

Теперь мне нужно было создать узел организации со следующим myorganization.ldif :

dn: o=myorganization,c=fr
objectclass: organization
o: myorganization

И, наконец, добавить его с помощью следующей команды (первая не работала из-за Недостаточный доступ (50) ):

ldapadd -x -D cn=admin,o=myorganization,c=fr -W -f myorganization.ldif

Теперь я мог добавить организационные единицы:

dn: ou=GROUPS, o=myorganization,c=fr
ou: GROUPS
objectClass: top
objectClass: organizationalunit

dn: ou=MYAPP, ou=GROUPS, o=myorganization,c=fr
ou: MYAPP
objectClass: top
objectClass: organizationalunit

dn: ou=MYREGION, ou=MYAPP, ou=GROUPS, o=myorganization,c=fr
ou: MYREGION
objectClass: top
objectClass: organizationalunit
1
ответ дан 2 December 2019 в 21:47

Ошибка no global superior knowledge означает, что slapd не знает, куда поместить вашу новую запись. Обычно это означает, что вы не определили подходящую базу данных. В более новых системах (использующих cn = config вместо slapd.conf ) вы обычно сначала добавляете новую базу данных или изменяете существующую запись базы данных с помощью ldapadd или ldapmodify . Например, в моей системе Fedora 17 установка по умолчанию устанавливает такую ​​базу данных для размещения dc = my-domain, dc = com :

dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
creatorsName: cn=config
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com

Для размещения вашей организации ( o = myorganization , c = fr ), мне нужно было бы создать следующий файл LDIF:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization, c=fr
-
replace: olcRootDN
olcRootDN: cn=Manager,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write 
  by dn.base="cn=Manager,o=myorganization,c=fr" write
  by * none

И затем я бы загрузил эти модификации следующим образом:

ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif

Это работает, потому что следующие строки olcAccess уже присутствует в конфигурации:

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * none

Это предоставляет root , связываясь с slapd через сокет ldapi: /// , доступ без пароля к дереву cn = config .

Затем я загружаю свою запись верхнего уровня:

dn: o=myorganization, c=fr
objectclass: organization
o: myorganization

Запуская:

ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif

Это работает, потому что я добавил аналогичный ACL в эту базу данных. Обратите внимание, что мне не нужно было начинать с c = fr здесь, потому что база данных определена для хранения o = myorganization, c = fr

18
ответ дан 2 December 2019 в 21:47

Теги

Похожие вопросы