动态组具有一个 groupOfURLs 对象类 objectclass,可以没有也可以具有多个 memberURL 属性,其中每个属性都是一个描述一组对象的 LDAP URL。
对于 LDAP 服务,如果您希望基于任何属性自动将用户分组,或者希望将 ACL 应用于包含匹配 DN 的特定组,则 Web Server 允许您创建动态组。例如,您可以创建一个组,该组将自动包括任何包含属性 department=marketing 的 DN。如果您对 department=marketing 应用搜索过滤器,搜索将返回一个组,其中包含具有属性 department=marketing 的所有 DN。然后,您可以从基于此过滤器的搜索结果中定义一个动态组。随后,您可以为所获得的动态组定义一个 ACL。
Web Server 在 LDAP 服务器模式中以 objectclass = groupOfURLs 的方式实现动态组。groupOfURLS 类可以有多个 memberURL 属性,每个属性都包含一个 LDAP URL,用于枚举目录中的一组对象。组的成员是这些对象集的总和。例如,下面的组只包含一个成员 URL:
ldap:///o=mcom.com??sub?(department=marketing)
此示例介绍了一个集合,该集合包含所在部门为 "marketing" 的 "o=mcom.com" 下的所有对象。LDAP URL 可以包含搜索基 DN、范围和过滤器,但不能包含主机名和端口。这意味着您只能引用同一个 LDAP 服务器上的对象。LDAP URL 支持所有范围。
DN 会自动包含在内,因而不需要您向组中添加每个 DN。组是动态变化的,因为每次 ACL 验证需要查找组时,Web Server 都会执行一次 LDAP 服务器搜索。ACL 文件中使用的用户和组名与 LDAP 数据库中的对象的 cn 属性相对应。
Web Server 使用 cn (commonName) 属性作为 ACL 的组名。
在 dbswitch.conf 配置文件(将 ACL 数据库名称与实际的 LDAP 数据库 URL 相关联)和 ACL 文件(定义要用于每个 ACL 的数据库)中,同时定义了从 ACL 到 LDAP 数据库的映射。例如,如果要将基本访问权限授予名为 "staff" 的组中的成员,ACL 代码将查找对象类为 groupOf<anything> 且将 CN 设置为 "staff" 的对象。该对象可通过两种方法来定义组成员,即显式枚举成员 DN(与静态组的 groupOfUniqueNames 操作相同),或指定 LDAP URL(例如,groupOfURLs)。
组对象可以同时包含 objectclass = groupOfUniqueMembers 和 objectclass = groupOfURL;因此,"uniqueMember" 和 "memberURL" 属性都是有效的。组成员是其静态和动态成员的总和。
使用动态组对服务器的性能有所影响。如果您正在测试组成员,而该 DN 不是静态组的成员,则 Web Server 将检查数据库的基 DN 中的所有动态组。要完成此任务,Web Server 需要检查每个 memberURL 是否匹配,方法是对照用户 DN 检查其基 DN 和范围,然后使用用户 DN 作为基 DN 并使用 memberURL 的过滤器来执行基搜索。这一过程将产生大量的单个搜索操作。
使用 Administration Server 创建新动态组时,请考虑以下指导原则:
动态组不能包含其他组。
使用以下格式输入组的 LDAP URL(没有主机和端口信息,因为这些参数将被忽略):
ldap:///<basedn>?<attributes>?<scope>?<(filter)>
下表说明了必需的参数:
请注意,<attributes>、<scope> 和 <(filter)> 参数是根据它们在 URL 中的位置来标识的。因此,即使不想指定任何属性,也需要使用问号来表明不限制该字段。
可以选择为新组添加说明。
如果您的目录定义了任何组织单位,则可以使用“将新组添加到”列表指定要放置新组的位置。默认位置为目录的根节点(最顶端的条目)。