命名角色

Java™ 2 Platform, Enterprise Edition (J2EE) 基于角色的授权概念已扩展为保护 CosNaming 服务。

CosNaming 安全性对 CosNaming 功能提供增强的细颗粒度安全性控制。CosNaming 服务器(如 WebSphere® Application Server)上提供了 CosNaming 功能。它们影响名称空间的内容。通常,客户机程序可使用两种方法生成 CosNaming 调用。第一种方法是通过 Java 命名和目录接口 (JNDI) 方法进行。第二种方法是 CORBA 客户机直接调用 CosNaming 方法。

存在下列安全角色。但是,这些角色具有从低到高的权限级别,如以下列表中所示。该列表还会为每个角色提供与安全性有关的接口方法。未列示的接口方法不受支持或者与安全性无关。
  • CosNamingRead。被指定为 CosNamingRead 角色的用户可执行名称空间查询(如通过 JNDI 查询方法)。Everyone 特殊主体集是此角色的缺省策略。
    表 1. CosNamingRead 角色包和接口方法. 下表列出了 CosNamingRead 角色包和接口方法:
    接口方法
    javax.naming
    • Context.list
    • Context.listBindings
    • Context.lookup
    • NamingEnumeration.hasMore
    • NamingEnumeration.next
    org.omg.CosNaming
    • NamingContext.list
    • NamingContext.resolve
    • BindingIterator.next_one
    • BindingIterator.next_n
    • BindingIterator.destroy
  • CosNamingWrite。被指定为 CosNamingWrite 角色的用户可执行写操作(如 JNDI 绑定、重新绑定或取消绑定)及 CosNamingRead 操作。作为一种缺省策略,没有为主体集指定此角色。
    表 2. CosNamingWrite 角色包和接口方法. 下表列出了 CosNamingWrite 角色包和接口方法:
    接口方法
    javax.naming
    • Context.bind
    • Context.rebind
    • Context.rename
    • Context.unbind
    org.omg.CosNaming
    • NamingContext.bind
    • NamingContext.bind_context
    • NamingContext.rebind
    • NamingContext.rebind_context
    • NamingContext.unbind
  • CosNamingCreate。允许被指定为 CosNamingCreate 角色的用户通过 JNDI createSubcontext 操作和 CosNamingWrite 操作在名称空间中创建新对象。作为一种缺省策略,没有为主体集指定此角色。
    表 3. CosNamingCreate 角色包和接口方法. 下表列出了 CosNamingCreate 角色包和接口方法:
    接口方法
    javax.naming Context.createSubcontext
    org.omg.CosNaming NamingContext.bind_new_context
  • CosNamingDelete。被指定为 CosNamingDelete 角色的用户可能会破坏名称空间中的对象,如使用 JNDI destroySubcontext 方法和 CosNamingCreate 操作。作为一种缺省策略,没有为主体集指定此角色。
    表 4. CosNamingDelete 角色包和接口方法. 下表列出了 CosNamingDelete 角色包和接口方法:
    接口方法
    javax.naming Context.destroySubcontext
    org.omg.CosNaming NamingContext.destroy
要点: javax.naming 包适仅适用于 CosNaming JNDI 服务提供程序。JNDI 接口方法的所有变体都有相同的角色映射。
如果该调用者未被授权,那么先前表中列示的包将禁止下列行为:
javax.naming
此包创建 javax.naming.NoPermissionException 异常,它将 NO_PERMISSION 从 CosNaming 方法调用映射至 NoPermissionException。
org.omg.CosNaming
此包创建 org.omg.CORBA.NO_PERMISSION 异常。

可以随时从 WebSphere Application Server 管理控制台中将用户、组或 AllAuthenticated 和 Everyone 特殊主体集添加至命名角色或从中移除这些对象。但是,您必须重新启动服务器以使更改生效。最佳实践是将组或某个特殊主体集(而不是特定用户)映射至命名 (naming) 角色。这是因为从长远看来,它更灵活而且更易于管理。通过将组映射至命名角色,可以在 WebSphere Application Server 外部将用户添加到组或从组中移除用户,并且不需要重新启动服务器就能使更改生效。

如果用户被指定为特定命名角色,并且该用户属于被指定为另一命名角色的组,那么将授予该用户在被指定的角色和组被指定的角色之间的最大许可访问权。例如,假定 MyUser 用户被指定为 CosNamingRead 角色。此外,假定 MyGroup 组已被指定为 CosNamingCreate 角色。如果 MyUser 属于 MyGroup,那么会对 MyUser 用户指定 CosNamingCreate 角色,这是因为该用户属于 MyGroup 组。如果 MyUser 用户不属于 MyGroup 组,那么会被指定为 CosNamingRead 角色。

仅当启用了管理安全性 时,才会强制执行 CosNaming 授权策略。当启用管理安全性时,如果尝试在没有适当角色分配的情况下执行 CosNaming 操作,那么会导致 CosNaming 服务器产生 org.omg.CORBA.NO_PERMISSION 异常。

在 WebSphere Application Server 中,仅将每个 CosNaming 功能指定给一个角色。因此,被指定为 CosNamingCreate 角色的用户不能查询名称空间,除非他们同时被指定为 CosNamingRead 角色。在多数情况下,需要为创建者指定三个角色:CosNamingRead,CosNamingWrite 和 CosNamingCreate。创建者示例的 CosNamingRead 和 CosNamingWrite 角色分配已经包含在 CosNamingCreate 角色中。在大多数情况下,当用户或组从先前发行版移至本发行版时,WebSphere Application Server 管理员不必为每个用户或组更改角色分配。

尽管能够通过更改缺省策略来极大地限制对名称空间的访问,但这样做可能会导致在运行时发生意外的 org.omg.CORBA.NO_PERMISSION 异常。通常,J2EE 应用程序访问名称空间,并且使用的标识是访问 J2EE 应用程序时认证至 WebSphere Application Server 的用户标识。除非 J2EE 应用程序提供程序明确地与期望的命名角色通信,否则在更改缺省命名授权策略时就应该小心。


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rsec_nameroles
文件名:rsec_nameroles.html