在 LDAP 中有这样的搜索查询。这个查询到底是什么意思?

("CN=Dev-India,OU=Distribution Groups,DC=gp,DC=gl,DC=google,DC=com");

CN= Common Name 通用名称
OU= Organizational Unit 组织单位
DC= Domain Component 领域组件

这些都是 X.500 目录规范的所有部分,它定义了 LDAP 目录中的节点。

还可以阅读LDAP 数据交换格式 ( LDIF),这是一种替代格式。

从右到左读取它,最右边的组件是树的根,最左边的组件是你想要到达的节点(或叶子)。

每个“=”条目都是一个搜索条件。

示例查询

("CN=Dev-India,OU=Distribution Groups,DC=gp,DC=gl,DC=google,DC=com");

实际上,查询是:

从com域组件中,找到google域组件,然后在其中找到域组件,然后在gl其中找到gp域组件。

在gp域组件中,找到名为的组织单元Distribution Groups,然后找到具有通用名称的对象Dev-India。

String X.500 AttributeType


CN - commonName
L - localityName
ST - stateOrProvinceName
O - organizationName
OU - organizationalUnitName
C - countryName
STREET - streetAddress
DC - domainComponent
UID - userid

该查询中的字符串是什么意思?

字符串 ( "CN=Dev-India,OU=Distribution Groups,DC=gp,DC=gl,DC=google,DC=com") 是层次结构( DIT = 目录信息树) 的路径,应从右(根)到左(叶) 读取。

它是一个DN(可分辨名称)(一系列逗号分隔的键/值对,用于在目录层次结构中唯一标识条目)。DN 实际上是条目的完全限定名称。

在这里,您可以看到一个示例,其中我添加了更多可能的条目。

实际路径用绿色表示。

LDAP

以下路径代表 DN(它们的值取决于您在运行查询后想要获得的内容):

  • "DC=gp,DC=gl,DC=google,DC=com"
  • "OU=Distribution Groups,DC=gp,DC=gl,DC=google,DC=com"
  • "OU=People,DC=gp,DC=gl,DC=google,DC=com"
  • "OU=Groups,DC=gp,DC=gl,DC=google,DC=com"
  • "CN=QA-Romania,OU=Distribution Groups,DC=gp,DC=gl,DC=google,DC=com"
  • "CN=Dev-India,OU=Distribution Groups,DC=gp,DC=gl,DC=google,DC=com"
  • "CN=Diana Anton,OU=People,DC=gp,DC=gl,DC=google,DC=com"

从技术上讲,LDAP 只是一个协议,它定义了访问目录数据的方法。必然地,它还定义和描述了数据在目录服务中的表示方式

数据在 LDAP 系统中表示为对象的层次结构,每个对象称为一个条目。生成的树结构称为目录信息树 (DIT)。树的顶部通常称为根(也称为基或后缀)。

LDAP

为了导航DIT,我们可以定义一条路径(一个DN)到我们的数据所在的位置(cn=DEV-India,ou=Distrubition Groups,dc=gp,dc=gl,dc=google,dc=com 将带我们到唯一条目),或者我们可以定义一条路径(DN)到我们认为我们的数据所在的位置(例如,ou=Distrubition Groups,dc=gp,dc=gl,dc=google,dc=com)然后搜索属性=值或多个属性=值对来查找我们的目标条目(或条目)。

LDAP

问题的关键点在于LDIF

LDAP 数据交换格式 (LDIF) 用于以文本形式表示 LDAP 条目和更改记录。 LDAP 工具,例如 ldapadd(1) 和 ldapsearch(1),读取和写入 LDIF 条目记录。 ldapmodify(1) 读取 LDIF 更改记录。更详细的资料在 RFC 2849 中有描述。

LDIF 条目记录用于表示目录条目。 录入记录的基本形式是:

       dn: <distinguished name>
       <attrdesc>: <attrvalue>
       <attrdesc>: <attrvalue>
       <attrdesc>:: <base64-encoded-value>
       <attrdesc>:< <URL>
       ...

该值可以指定为 UTF-8 文本或 base64 编码数据,或者可以将 URI 提供给属性值的位置。

可以通过以单个空格或制表符开始下一行来继续一行,例如,

       dn: cn=Barbara J Jensen,dc=exam
        ple,dc=com

如果一个值包含非打印字符,或者以空格或冒号“:”开头,则 <attrtype> 后跟一个双冒号,并且该值以 base 64 表示法编码。 例如,值“以空格开头”将被编码如下:

       cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U=

如果属性值位于文件中,则 <attrtype> 后跟一个 ':<' 和一个 file: URI。 例如,文件 /tmp/value 中包含的值将如下列出:

       cn:< file:///tmp/value

也可以支持其他 URI 方案(ftp、http)。 同一个 LDIF 文件中的多个条目由空行分隔。

录入记录示例

下面是一个包含三个条目的 LDIF 文件示例。

       dn: cn=Barbara J Jensen,dc=example,dc=com
       cn: Barbara J Jensen
       cn: Babs Jensen
       objectclass: person
       description:< file:///tmp/babs
       sn: Jensen

       dn: cn=Bjorn J Jensen,dc=example,dc=com
       cn: Bjorn J Jensen
       cn: Bjorn Jensen
       objectclass: person
       sn: Jensen

       dn: cn=Jennifer J Jensen,dc=example,dc=com
       cn: Jennifer J Jensen
       cn: Jennifer Jensen
       objectclass: person
       sn: Jensen
       jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD
        A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ
        ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG
       ...

请注意,Barbara Jensen 条目中的描述是从 file:///tmp/babs 读取的,而 Jennifer Jensen 条目中的 jpegPhoto 使用 base 64 编码。

更改记录

       dn: <distinguishedname>

       changetype: <[modify|add|delete|modrdn]>

最后给出变化信息本身,其格式取决于上面指定的变化类型。 对于 modify 的 changetype,格式为以下一项或多项:

       add: <attributetype>
       <attrdesc>: <value1>
       <attrdesc>: <value2>
       ...

或者,对于替换修改:

       replace: <attributetype>
       <attrdesc>: <value1>
       <attrdesc>: <value2>
       ...

如果没有给出要替换的属性类型行,则将删除整个属性(如果存在)。

或者,对于删除修改:

       delete: <attributetype>
       <attrdesc>: <value1>
       <attrdesc>: <value2>
       ...

如果没有给出要删除的属性类型行,则将删除整个属性。

对于 add 的 changetype,格式为:

       <attrdesc1>: <value1>
       <attrdesc1>: <value2>
       ...
       <attrdescN>: <value1>
       <attrdescN>: <value2>

对于 modrdn 或 moddn 的 changetype,格式为:

       newrdn: <newrdn>
       deleteoldrdn: 0 | 1
       newsuperior: <DN>

其中 deleteoldrdn 的值为 1 表示从条目中删除形成旧 rdn 的值,值为 0 表示将这些值作为非可区分属性保留在条目中。 newsuperior 行是可选的。

对于删除的更改类型,记录中不需要其他信息。

请注意,属性值可以使用 base64 或在文件中显示,如条目记录所述。 变更记录中的行也可以按照条目记录所述的方式继续。

更改记录示例

以下示例 LDIF 文件包含每种更改类型的更改记录。

       dn: cn=Babs Jensen,dc=example,dc=com
       changetype: add
       objectclass: person
       objectclass: extensibleObject
       cn: babs
       cn: babs jensen
       sn: jensen

       dn: cn=Babs Jensen,dc=example,dc=com
       changetype: modify
       add: givenName
       givenName: Barbara
       givenName: babs
       -
       replace: description
       description: the fabulous babs
       -
       delete: sn
       sn: jensen
       -

       dn: cn=Babs Jensen,dc=example,dc=com
       changetype: modrdn
       newrdn: cn=Barbara J Jensen
       deleteoldrdn: 0
       newsuperior: ou=People,dc=example,dc=com

       dn: cn=Barbara J Jensen,ou=People,dc=example,dc=com
       changetype: delete

Tags: none

我有个想法