使用ldapmodify修改条目
您可以使用 DSCC 执行此任务。有关信息,请参见和 DSCC 联机帮助。
可以使用 changetype: modify 关键字在现有条目中添加、替换或删除属性及属性值。指定 changetype: modify 时,还必须提供一个或多个更改操作,表明将如何修改条目。以下示例中显示了三种可能的 LDIF 更改操作:
dn:entryDNchangetype: modifyadd:attributeattribute:value...-replace:attributeattribute:newValue...-delete:attribute[attribute:value]... |
可以使用独占一行的连字符 (-) 分隔相同条目上的操作,并可使用空行来分隔不同条目上的操作组。还可以为每个操作提供多个attribute:value对。
添加属性值
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
以下示例显示如何使用相同的 add LDIF 语法向现有多值属性和尚未存在的属性中添加值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -Enter bind password:dn: uid=bjensen,ou=People,dc=example,dc=comchangetype: modifyadd: cncn: Babs Jensen-add: mobilemobile: (408) 555-7844 |
如果存在以下任一情况,则此操作可能会失败,并且服务器将返回错误:
属性中已存在给定的值。
值与为属性定义的语法不符。
条目的对象类不需要或不允许使用该属性类型。
属性类型不是多值类型,并且属性中已存在某个值。
使用二进制属性子类型
您可以使用 DSCC 执行此任务。有关信息,请参见和 DSCC 联机帮助。
attribute;binary 子类型表示属性值必须作为二进制数据通过 LDAP 进行传输,而不考虑属性值的实际语法。此子类型适用于没有 LDAP 字符串表示的复杂语法,如 userCertificate。不应将二进制子类型用于其他目的。
在 ldapmodify 命令中使用时,可以将相应的子类型添加到任何 LDIF 语句的属性名称中。
要输入二进制值,可以在 LDIF 文本中直接键入或从其他文件读取。以下示例显示了用于从文件读取二进制值的 LDIF 语法:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -Enter bind password:version: 1dn: uid=bjensen,ou=People,dc=example,dc=comchangetype: modifyadd: userCertificate;binaryuserCertificate;binary:< file:///local/cert-file |
要使用 :< 语法指定文件名,必须将 version: 1 行作为 LDIF 语句的开头。当 ldapmodify 处理此语句时,它会将属性设置为从给定文件的全部内容中读取的值。
添加具有语言子类型的属性
您可以使用 DSCC 执行此任务。有关信息,请参见和 DSCC 联机帮助。
属性的语言和发音子类型可指定本地化的值。为属性指定语言子类型时,该子类型将添加到属性名称中,如下所示:
attribute;lang-CC |
其中attribute是现有属性类型,而cc是用于指定语言的双字母国家/地区代码。您还可以将发音子类型添加到语言子类型中,以便为本地化的值指定一个语音值。在本案例中,属性名称如下所示:
attribute;lang-CC;phonetic |
要对具有子类型的属性执行操作,必须明确匹配其子类型。例如,如果要修改具有 lang-fr 语言子类型的属性值,则必须在修改操作中包含 lang-fr,如下所示:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -Enter bind password:dn: uid=bjensen,ou=People,dc=example,dc=comchangetype: modifyadd: homePostalAddress;lang-frhomePostalAddress;lang-fr: 34, rue de la Paix |
注 –
如果属性值包含非 ASCII 字符,则这些字符必须为 UTF-8 编码的字符。
修改属性值
您可以使用 DSCC 执行此任务。有关信息,请参见和 DSCC 联机帮助。
以下示例说明如何通过使用 LDIF 中的 replace 语法更改属性值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -Enter bind password:dn: uid=bjensen,ou=People,dc=example,dc=comchangetype: modifyreplace: snsn: Morris-replace: cncn: Barbara Morriscn: Babs Morris |
将删除指定属性的所有当前值,并添加所有给定值。
更改属性值之后,您可以使用 ldapsearch 命令验证此更改。
属性值中的结尾空格
修改属性值时,请勿不小心在值的末尾包含空格。结尾空格可能会导致值以 base-64 编码格式显示(如 34xy57eg)。
如果属性值的末尾是空格,则此空格将作为属性值的一部分进行编码。在使用 DSCC 或 ldapsearch 命令验证更改时,所显示的值可能是纯文本,也可能是 base-64 编码的文本。这取决于您所使用的目录服务器客户端。
删除属性值
您可以使用 DSCC 执行此任务。有关信息,请参见和 DSCC 联机帮助。
以下示例说明如何完整地删除属性,以及如何仅删除多值属性的一个值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -Enter bind password:dn: uid=bjensen,ou=People,dc=example,dc=comchangetype: modifydelete: facsimileTelephoneNumber-delete: cncn: Babs Morris |
使用 delete 语法时如果不指定attribute: value对,将删除该属性的所有值。如果指定attribute: value对,则只会删除该值。
修改多值属性的一个值
您可以使用 DSCC 执行此任务。有关信息,请参见和 DSCC 联机帮助。
要使用 ldapmodify 命令修改多值属性的一个值,则必须执行以下示例中显示的两个操作:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -Enter bind password:dn: uid=bjensen,ou=People,dc=example,dc=comchangetype: modifydelete: mobilemobile: (408) 555-7845-add: mobilemobile: (408) 555-5487 |