靜態組 | 通過使用groupOfNames、groupOfUniqueNames或groupOfEntries對象類提供顯式的可分辨名稱集(DNs)來定義其成員身份。靜態組得到了外部客戶機的良好支持,并提供了良好的性能。  靜態組是其條目包含顯式DNs的成員列表的組。許多客戶機支持靜態組,但隨著組中成員數量的增加,靜態組很難管理。例如,如果有需要更改DN的成員條目,則必須為該用戶所屬的每個組更改該用戶的DN。 目錄服務器支持以下三種類型的靜態組,根據它們使用的對象類進行劃分: groupOfNames | 可以通過使用groupOfNames對象類和使用member屬性顯式指定成員DNs來定義靜態組 dn: cn=Example Static Group 1,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfNames
member: uid=user1,ou=People,dc=example,dc=com
member: uid=user2,ou=People,dc=example,dc=com
cn: Example Static Group 1 RFC 4519(https://www.ietf.org/rfc/rfc4519.txt)要求成員屬性在groupOfNames對象類中是必需的。當管理員試圖刪除組中的最后一個成員時,此成員資格要求通常會導致數據管理問題。目錄服務器通過允許成員屬性是可選的來解決這個問題。可選的成員資格要求允許您在刪除組的最后一個成員時擁有空的對象類。 ? dn: cn=Directory Administrators,ou=Groups,dc=example,dc=com
cn: Directory Administrators
objectclass: top
objectclass: groupOfNames
ou: Groups
member: uid=ttully,ou=People,dc=example,dc=com
member: uid=charvey,ou=People,dc=example,dc=com
member: uid=rfisher,ou=People,dc=example,dc=comldapmodify -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--defaultAdd --filename static-group1.ldif
Processing ADD request for cn=Directory Administrators,ou=Groups,dc=example,dc=com
ADD operation successful for DN cn=Directory
Administrators,ou=Groups,dc=example,dc=comldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--baseDN dc=example,dc=com "(uid=ttully)" isMemberOf
dn: uid=ttully,ou=People,dc=example,dc=com
isMemberOf: cn=Directory Administrators,ou=Groups,dc=example,dc=com ? | groupOfUniqueNames | 可以通過使用groupOfUniqueNames對象類和使用uniqueMember屬性顯式指定成員DNs來定義靜態組。groupOfUniqueNames對象類與groupOfNames對象類的不同之處在于,可以通過指定唯一DN和可選標識符來枚舉組的成員。標識符確保在添加、刪除或重命名任何對象時可以標識唯一的對象。 例如,您可以刪除或移動一個員工(cn=Tom Smith),然后將一個同名的新員工(cn=Tom Smith)添加到目錄中。要區分兩者,必須使用位字符串添加單獨的標識符。下面的示例顯示了兩個同名的用戶,但第二個uniqueMember有一個可選的標識符。 uniqueMember: uid=tsmith,ou=People,dc=example,dc=com
uniqueMember: uid=tsmith,ou=People,dc=example,dc=com#'0111101'B 很少有LDAP應用程序實際使用可選的UID標識符。 RFC 4519(https://www.ietf.org/rfc/rfc4519.txt)要求在groupOfUniqueNames對象類中uniqueMember屬性是必需的。當管理員試圖刪除組中的最后一個成員時,此成員資格要求曾經導致數據管理問題。Oracle統一目錄允許uniqueMember屬性是可選的,從而解決了這個問題。可選的成員資格要求允許您在刪除組的最后一個成員時擁有空的對象類。 dn: cn=Example Static Group 2,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember: uid=user1,ou=People,dc=example,dc=com
uniqueMember: uid=user2,ou=People,dc=example,dc=com
cn: Example Static Group 2 dn: cn=Directory Administrators2,ou=Groups,dc=example,dc=com
cn: Directory Administrators2
objectclass: top
objectclass: groupOfUniqueNames
ou: Groups
uniquemember: uid=alangdon,ou=People,dc=example,dc=com
uniquemember: uid=drose,ou=People,dc=example,dc=com
uniquemember: uid=polfield,ou=People,dc=example,dc=comldapmodify -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--defaultAdd --filename static-group2.ldifldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--baseDN dc=example,dc=com "(uid=rdaugherty)" isMemberOf
dn: uid=alangdon,ou=People,dc=example,dc=com
isMemberOf: cn=Directory Administrators2,ou=Groups,dc=example,dc=com ? | groupOfEntries | 可以使用groupOfEntries對象類定義靜態組。基于原始規范(RFC 4519(http://www.rfc-editor.org/rfc/rfc4519.txt)和draft-findlay-ldap-groupofentries-00.txt(2008年3月到期),groupofentries對象類與groupOfNames和groupOfUniqueNames對象類的不同之處在于屬性是可選的,它使您能夠指定一個沒有任何成員的空對象類。 Oracle統一目錄支持groupOfEntries草稿,但也允許空groupOfNames和groupOfUniqueNames對象類。因此,您可以創建任何類型的空組(groupOfEntries、groupOfNames和groupOfUniqueNames)。 dn: cn=Example Static Group 3,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfEntries
cn: Example Static Group 3 dn: cn=Directory Administrators3,ou=Groups,dc=example,dc=com
cn: Directory Administrators3
objectclass: top
objectclass: groupOfEntries
ou: Groups
member: uid=bfrancis,ou=People,dc=example,dc=com
member: uid=tjames,ou=People,dc=example,dc=com
member: uid=bparker,ou=People,dc=example,dc=comldapmodify -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--defaultAdd --filename static-group3.ldifldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--baseDN dc=example,dc=com "(uid=bparker)" isMemberOf
dn: uid=bparker,ou=People,dc=example,dc=com
isMemberOf: cn=Directory Administrators3,ou=Groups,dc=example,dc=com ? |
? |
查看靜態組成員方法 |
$ ldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \-b dc=example,dc=com \"(isMemberOf=cn=Accounting Managers,ou=Groups,dc=example,dc=com)"
dn: uid=scarter,ou=People,dc=example,dc=com
objectClass: person
objectClass: inetOrgPerson
objectClass: top
objectClass: organizationalPerson
ou: Accounting
ou: People
sn: Carter
facsimiletelephonenumber: +1 408 555 9751
roomnumber: 4612
userpassword: {SSHA}3KiJ51sx2Ug7DxZoq0vA9ZY6uaomevbJUBm7OA==
l: Sunnyvale
cn: Sam Carter
telephonenumber: +1 408 555 4798
givenname: Sam
uid: scarter
mail: scarter@example.comdn: uid=tmorris,ou=People,dc=example,dc=com
objectClass: person
objectClass: inetOrgPerson
objectClass: top
objectClass: organizationalPerson
ou: Accounting
ou: People
sn: Morris
facsimiletelephonenumber: +1 408 555 8473
roomnumber: 4117
userpassword: {SSHA}bjFFHv6k1kbI6fZoCEfqmTj9XOZxWR06gxpKpQ==
l: Santa Clara
cn: Ted Morris
telephonenumber: +1 408 555 9187
givenname: Ted
uid: tmorris
mail: tmorris@example.com
19.3.1.5 Viewing All Static Groups of Which a User Is a Member
Search using ldapsearch and the virtual attribute cn=IsMemberOf, as shown in the following example:查看用戶所屬的所有靜態組
$ ldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \-b dc=example,dc=com "(uid=scarter)" isMemberOf
dn: uid=scarter,ou=People,dc=example,dc=com
isMemberOf: cn=Accounting Managers,ou=groups,dc=example,dc=com確定用戶是否是組的成員
$ ldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \-b "cn=Account Managers,ou=Groups,dc=example,dc=com" \"(&(objectclass=groupOfUniqueNames) \(uniquemember=uid=scarter,ou=People,dc=example,dc=com))"
dn: cn=Accounting Managers,ou=groups,dc=example,dc=com
objectClass: groupOfUniqueNames
objectClass: top
ou: groups
description: People who can manage accounting entries
cn: Accounting Managers
uniquemember: uid=scarter, ou=People, dc=example,dc=com
uniquemember: uid=tmorris, ou=People, dc=example,dc=com ? |
動態組 | 動態組使用一組LDAP URL形式的搜索條件(使用groupofurl對象類)定義其成員身份。動態組可以很好地處理大量成員(數百萬個條目)。隨著條目的更新,所有父組都會自動更新。 動態組的一個缺點是不是所有的客戶端都支持它們。如果必須查詢整個條目列表,性能也會受到不利影響。因此,動態組最適合具有大量條目的組或需要確定條目的特定組成員身份的客戶端。 動態組是指其成員資格(而不是在列表中顯式維護)由使用LDAP URL的搜索條件確定的組。例如,假設您希望向dc=example,dc=com命名上下文中的所有經理發送電子郵件。為此,創建一個動態組,在其中指定cn=Managers、ou=Groups、dc=example、dc=com。您進一步指定只希望返回電子郵件地址。當電子郵件應用程序查詢該特定組的目錄時,目錄服務器動態計算成員資格并返回相應的電子郵件地址列表。 動態組使用groupOfURL對象類和memberURL屬性來定義LDAP URL,其中包含用于確定組成員的條件(搜索基、范圍和篩選器)。確定用戶是否是動態組的成員的機制是一個常數時間操作,因此對于擁有數百萬成員的組,它的效率與對于只有少數成員的組一樣高。但是,在指定搜索條件時必須小心,因為如果搜索大量數據,可能會對性能產生不利影響  此示例為位于庫比蒂諾的員工指定了動態組。 dn: cn=cupertinoEmployees,ou=Groups,dc=example,dc=com
cn: CupertinoEmployees
objectclass: top
objectclass: groupOfURLs
ou: Groups
memberURL: ldap:///ou=People,dc=example,dc=com??sub?(l=Cupertino) $ ldapmodify -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--defaultAdd --filename dynamic_group.ldif
Processing ADD request for cn=cupertionEmployees,ou=Groups,dc=example,dc=com
ADD operation successful for DN cn=cupertionEmployees,ou=Groups,dc=example,dc=com ? $ ldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \-b "dc=example,dc=com" \
"(isMemberOf=cn=cupertinoEmployees,ou=Groups,dc=example,dc=com)"
dn: uid=abergin,ou=People,dc=example,dc=com
objectClass: person
objectClass: inetOrgPerson
objectClass: top
objectClass: organizationalPerson
ou: Product Testing
ou: People
sn: Bergin
facsimiletelephonenumber: +1 408 555 7472
roomnumber: 3472
userpassword: {SSHA}YcDl0pHLxkd/ouW2jslAk1XaT5SiY4ium5qh8w==
l: Cupertino
cn: Andy Bergin
telephonenumber: +1 408 555 8585
givenname: Andy
uid: abergin
mail: abergin@example.com
...(more entries)... $ ldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \-b dc=example,dc=com "(uid=abergin)" isMemberOf
dn: uid=abergin,ou=People,dc=example,dc=com
isMemberOf: cn=QA Managers,ou=groups,dc=example,dc=com
isMemberOf: cn=cupertinoEmployees,ou=Groups,dc=example,dc=com ? $ ldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \-b dc=example,dc=com \
"(&(uid=abergin)(isMemberOf=cn=cupertinoEmployees,ou=Groups,dc=example,dc=com))"
dn: uid=abergin,ou=People,dc=example,dc=com
objectClass: person
objectClass: inetOrgPerson
objectClass: top
objectClass: organizationalPerson
ou: Product Testing
ou: People
sn: Bergin
facsimiletelephonenumber: +1 408 555 7472
roomnumber: 3472
userpassword: {SSHA}YcDl0pHLxkd/ouW2jslAk1XaT5SiY4ium5qh8w==
l: Cupertino
cn: Andy Bergin
telephonenumber: +1 408 555 8585
givenname: Andy
uid: abergin
mail: abergin@example.com |
|
? | ? |
虛擬靜 態組 | 對于外部客戶端,虛擬靜態組的顯示和行為與靜態組類似,只是每個成員都由一個虛擬屬性表示,該屬性根據需要從另一個動態組定義其成員身份。 虛擬靜態組允許只能支持靜態組的客戶端訪問動態組。  在虛擬靜態組中,通過使用虛擬屬性,每個條目的行為類似于靜態組條目。虛擬屬性在調用時是動態確定的,確定組成員身份的操作被傳遞給另一個組 虛擬靜態組應包括GroupNoNames或GroupOfInQueNames對象類,但不應包含member或uniqueMember屬性 。虛擬靜態組還應包含ds虛擬靜態組輔助對象類和ds目標組dn屬性。ds目標組dn屬性用于引用要鏡像為虛擬靜態組的實際組,并用于替代成員或uniquemember屬性 dn: cn=Example Virtual Static Group,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfUniqueNames
objectClass: ds-virtual-static-group
cn: Example Virtual Static Group
ds-target-group-dn: cn=Example Real Group,ou=Groups,dc=example,dc=com 當應用程序以成員資格屬性為目標進行搜索,但實際上沒有檢索到整個成員集時,虛擬靜態組的效率最高。應用程序通常使用如下篩選器來嘗試確定用戶是否是給定組的成員: (&(objectClass=groupOfUniqueNames)(uniqueMember=uid=john.doe,\ou=People,dc=example,dc=com)) 對于檢索成員集的應用程序,虛擬靜態組可能并不理想,因為構建整個成員列表的過程可能非常昂貴。 |
-
創建指定組的 LDIF 文件。 此示例文件指定了一個名為虛擬靜態組。virtual-static.ldif cupertinoEmployees dn: cn=virtualStatic,ou=Groups,dc=example,dc=com
cn: Virtual Static
objectclass: top
objectclass: groupOfUniqueNames
objectclass: ds-virtual-static-group
ou: Groups
ds-target-group-dn: cn=cupertinoEmployees,ou=Groups,dc=example,dc=com
-
通過處理 LDIF 文件來添加組。ldapmodify $ ldapmodify -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--defaultAdd --filename virtual-static.ldif
Processing ADD request for cn=virtualStatic,ou=Groups,dc=example,dc=com
ADD operation successful for DN cn=virtualStatic,ou=Groups,dc=example,dc=com -
$ ldapsearch -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \-b dc=example,dc=com "(isMemberOf=cn=virtualStatic,ou=Groups,dc=example,dc=com)"dn: cn=virtualStatic,ou=Groups,dc=example,dc=com
objectClass: groupOfUniqueNames
objectClass: ds-virtual-static-group
objectClass: top
cn: Virtual Static
uniqueMember: uid=abergin,ou=People,dc=example,dc=com
ds-target-group-dn: cn=cupertinoEmployees,ou=Groups,dc=example,dc=com
ou: Product Testing
ou: People
sn: Bergin
facsimiletelephonenumber: +1 408 555 7472
roomnumber: 3472
userpassword: {SSHA}YcDl0pHLxkd/ouW2jslAk1XaT5SiY4ium5qh8w==
l: Cupertino
cn: Andy Bergin
telephonenumber: +1 408 555 8585
givenname: Andy
uid: abergin
mail: abergin@example.com
...(more entries)...
|
? |
嵌套組 | 組可以嵌套,其中一個組定義為子組條目,其DN列在另一個組(其父組)中。組嵌套允許您在性能不是優先級時設置繼承的組成員身份。可以將零個或多個成員屬性的值設置為嵌套子組(包括靜態和動態組)的DNs  此示例過程使用一個靜態組和一個動態組創建嵌套組。 -
創建指定靜態組的 LDIF 文件。 此示例文件指定了一個名為虛擬靜態組。static-group.ldif Dev Contractors dn: cn=Contractors,ou=Groups,dc=example,dc=com
cn: Dev Contractors
objectclass: top
objectclass: groupOfUniqueNames
ou: Dev Contractors Static Group
uniquemember: uid=wsmith,ou=Contractors,dc=example,dc=com
uniquemember: uid=jstearn,ou=Contractors,dc=example,dc=com
uniquemember: uid=pbrook,ou=Contractors,dc=example,dc=com
uniquemember: uid=njohnson,ou=Contractors,dc=example,dc=com
uniquemember: uid=sjones,ou=Contractors,dc=example,dc=com
-
通過處理 LDIF 文件來添加組。ldapmodify $ ldapmodify -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--defaultAdd --filename static-group.ldif
-
創建指定動態組的 LDIF 文件。 此示例文件指定了一個名為 動態組。dynamic-group.ldif Developers dn: cn=Developers,ou=Groups,dc=example,dc=com
cn: Developers
objectclass: top
objectclass: groupOfURLs
ou: Groups
memberURL: ldap:///ou=People,dc=example,dc=com??sub?(ou=Product Development)
-
通過處理 LDIF 文件來添加組。ldapmodify $ ldapmodify -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--defaultAdd --filename dynamic-group.ldif
-
創建指定嵌套靜態組的 LDIF 文件。 此示例文件指定了一個名為"嵌套"的組。nested-group.ldif Developers Group dn: cn=DevelopersGroup,ou=Groups,dc=example,dc=com
cn: Developers Group
objectclass: top
objectclass: groupOfUniqueNames
ou: Nested Static Group
uniquemember: cn=Contractors,ou=Groups,dc=example,dc=com
uniquemember: cn=Developers,ou=Groups,dc=example,dc=com
-
通過處理 LDIF 文件添加組,ldapmodify $ ldapmodify -h localhost -p 1389 -D "cn=Directory Manager" -j pwd-file \--defaultAdd --filename nested-group.ldif
|