如果 Access Manager 安装在领域模式下,每当创建新组时,Access Manager 都会动态创建一个组管理员,且该管理员带有管理该组所需的 ACI。在领域模式下,这些组管理员 ACI 不会被使用。然而,当 Directory Server 处理后缀下的条目时,仍然要评估它们,这就降低了 Access Manager 的性能,尤其是在部署创建了大量组的情况下。
解决方法:此问题的解决方法包括两部分:
阻止 Access Manager 在创建新组时创建组管理员和相应的 ACI。
从 Directory Server 中删除现有的全部组管理员 ACI。
阻止创建组管理员 ACI
下列过程可阻止 Access Manager 在创建新组时创建组管理员和相应的 ACI。
该过程会永久性阻止在创建新组时创建组管理员和相应的 ACI。仅当此行为适合您的特定部署时才使用该过程。
备份 amAdminConsole.xml 文件。根据您的平台,此文件位于下列目录:
Solaris 系统:/etc/opt/SUNWam/config/xml
Linux 及 HP-UX 系统:/etc/opt/sun/identity/config/xml
Windows 系统:javaes-install-dir\identity\config\xml
javaes-install-dir 表示 Java ES 5 安装目录。其默认值为 C:\Program Files\Sun\JavaES5。
在 amAdminConsole.xml 文件中删除下列注释行之间的组管理员条目:
<AttributeSchema name="iplanet-am-admin-console-dynamic-aci-list" type="list" syntax="string" i18nKey="g111"> <DefaultValues> ... # Beginning of entry to delete <Value>Group Admin|Group Admin Description|ORGANIZATION:aci: (target="ldap:///GROUPNAME")(targetattr = "*") (version 3.0; acl "Group and people container admin role"; allow (all) roledn = "ldap:///ROLENAME";)##ORGANIZATION:aci: (target="ldap:///ORGANIZATION") (targetfilter=(&FILTER(!(|(nsroledn=cn=Top-level Admin Role,dc=iplanet,dc=com) (nsroledn=cn=Top-level Help Desk Admin Role,dc=iplanet,dc=com) (nsroledn=cn=Top-level Policy Admin Role,dc=iplanet,dc=com) (nsroledn=cn=Organization Admin Role,ORGANIZATION) (nsroledn=cn=Container Admin Role,ORGANIZATION) (nsroledn=cn=Organization Policy Admin Role,ORGANIZATION))))) (targetattr != "iplanet-am-web-agent-access-allow-list || iplanet-am-web-agent-access-not-enforced-list|| iplanet-am-domain-url-access-allow || iplanet-am-web-agent-access-deny-list ||nsroledn") (version 3.0; acl "Group admin's right to the members"; allow (read,write,search) roledn = "ldap:///ROLENAME";)</Value> # End of entry to delete ... </DefaultValues> </AttributeSchema>
用 amadmin 从 Access Manager 中删除 Admin Console 服务。例如,在 Solaris 系统上:
# cd /opt/SUNWam/bin # ./amadmin -u amadmin -w amadmin_password --deleteService iPlanetAMAdminConsoleService
使用 amadmin 将 Admin Console 服务从步骤 2 中已编辑的 amAdminConsole.xml 文件中重新装入到 Access Manager。例如:
# ./amadmin -u amadmin -w amadmin_password -t /etc/opt/SUNWam/config/xml/amAdminConsole.xml
重新启动 Access Manager Web 容器。(如果计划按下一过程所述内容从 Directory Server 中删除 ACI,请在完成该过程后等待并重新启动 Web 容器。)
删除现有的组管理员 ACI
下列过程用 ldapsearch 和 ldapmodify 实用程序找到并删除组管理员 ACI。如果您的部署使用 Directory Server 6.0,则也可以用 Directory Server Control Center (DSCC) 或 dsconf 命令来完成这些功能。有关更多信息,参见 Directory Server 6.0 文档:
http://docs.sun.com/app/docs/coll/1224.1 及 http://docs.sun.com/app/docs/coll/1606.1
下列过程删除已经存在于 Directory Server 上的组管理员 ACI。
创建一个 LDIF 文件以搭配 ldapmodify 使用来删除组管理员 ACI。使用 ldapsearch(或其他您喜欢的目录搜索工具)可找到这些 ACI。
例如,命名为 Remove_Group_ACIs.ldif 的范例 LDIF 文件中的以下条目将删除命名为 New Group 的组的 ACI:
dn: ROOT_SUFFIX changetype: modify delete: aci aci: (target="ldap:///cn=New Group,ou=Groups,o=isp")(targetattr = "*") (version 3.0; acl "Group and people container admin role"; allow (all) roledn = "ldap:///cn=cn=New Group_ou=Groups_o=isp,o=isp";) dn: ROOT_SUFFIX changetype: modify delete: aci aci: (target="ldap:///ou=People,o=isp")(targetattr="nsroledn") (targattrfilters="add=nsroledn:(!(nsroledn=*)), del=nsroledn:(!(nsroledn=*))") (version 3.0; acl "Group admin's right to add user to people container"; allow (add) roledn = "ldap:///cn=cn=New Group_ou=Groups_o=isp,o=isp";) dn: ROOT_SUFFIX changetype: modify delete: aci aci: (target="ldap:///o=isp") (targetfilter=(&(|(memberof=*cn=New Group,ou=Groups,o=isp) (iplanet-am-static-group-dn=*cn=New Group,ou=Groups,o=isp)) (!(|(nsroledn=cn=Top-level Admin Role,o=isp) (nsroledn=cn=Top-level Help Desk Admin Role,o=isp) (nsroledn=cn=Top-level Policy Admin Role,o=isp) (nsroledn=cn=Organization Admin Role,o=isp)( nsroledn=cn=Container Admin Role,o=isp) (nsroledn=cn=Organization Policy Admin Role,o=isp))))) (targetattr != "iplanet-am-web-agent-access-allow-list || iplanet-am-web-agent-access-not-enforced-list || iplanet-am-domain-url-access-allow || iplanet-am-web-agent-access-deny-list ||nsroledn") (version 3.0; acl "Group admin's right to the members"; allow (read,write,search) roledn = "ldap:///cn=cn=New Group_ou=Groups_o=isp,o=isp";) aci: (target="ldap:///o=isp")(targetattr="*") (version 3.0; acl "S1IS special dsame user rights for all under the root suffix"; allow (all) userdn = "ldap: ///cn=dsameuser,ou=DSAME Users,o=isp"; )
使用 ldapmodify 搭配上一步的 LDIF 文件将组 ACI 从 Directory Server 上删除。例如:
# ldapmodify -h ds-host -p 389 -D "cn=Directory Manager" -w ds-bind-password -f Remove_Group_ACIs.ldif
重新启动 Access Manager Web 容器。