Sun Java System Message Queue 3.7 UR1 管理指南

用户授权:访问控制属性文件

访问控制属性文件(ACL 文件)包含一些规则,用来指定用户和用户组可以执行的操作。您可以编辑 ACL 文件,将操作限定给某些用户和组。各个代理实例可以使用不同的 ACL 文件。

无论用户信息是放在平面文件用户系统信息库中还是放在 LDAP 用户系统信息库中,都会使用 ACL 文件。当客户端应用程序执行以下操作之一时,代理将会检查其 ACL 文件:

代理将检查 ACL 文件,以确定是授权生成请求的用户还是用户所属的组来执行该操作。

如果对 ACL 文件进行编辑,新的设置将在下一次代理检查该文件以验证授权时生效。编辑完文件后,不需要重新启动代理。

创建访问控制属性文件

ACL 文件是特定于实例的。每次启动代理实例时,都会在该实例目录中创建一个名为 accesscontrol.properties 的默认文件。该文件的路径为如下格式(请参见附录 A, Message QueueTM 数据在特定平台上的位置):

…/instances/brokerInstanceName/etc/accesscontrol.properties

ACL 文件的格式与 Java 属性文件类似。首先定义文件的版本,然后指定访问控制规则,规则分为三部分:

version 属性定义 ACL 属性文件的版本,不能更改此条目。

version=JMQFileAccessControlModel/100

下面说明访问规则的基本语法并介绍如何计算权限,然后介绍指定访问控制的 ACL 文件的三个组成部分。

访问规则语法

ACL 属性文件中,访问控制用于定义特定用户或组对受保护的资源(如物理目的地和连接服务)具有哪些访问权限。访问控制由一个规则或一组规则组成,每个规则都由一个 Java 属性表示:

这些规则的基本语法如下:

resourceType.resourceVariant

.operation.access.
principalType=principals

表 7–3 介绍了语法规则的元素。

表 7–3 访问规则的语法元素

元素 

描述 

resourceType

以下选项之一:connectionqueuetopic

resourceVariant

resourceType 指定的类型的一个实例。例如,myQueue。通配符 (*) 可用于表示所有连接服务类型或所有物理目的地。

operation

值取决于所设置的访问规则的类型。 

access

以下选项之一:allowdeny

principalType

以下选项之一:usergroup。有关详细信息,请参见

principals

可能具有规则左侧指定的访问权限的人。如果 principalTypeuser,则可能是单个用户或以逗号分隔的用户列表;如果 principalTypegroup,则可能是单个组或以逗号分隔的组列表。通配符 (*) 可用于表示所有用户或所有组。

下面是一些访问规则示例:


注 –

要指定非 ASCII 的用户、组或目的地名称,请使用 Unicode 转义符 (\\uXXXX) 表示法。如果在您编辑并保存的 ACL 文件中,这些名称采用了非 ASCII 编码,则可以通过 Java native2ascii 工具将此文件转换为 ASCII。有关更多详细信息,请参见

http://java.sun.com/j2se/1.4/docs/guide/intl/faq.html

权限的计算方式

当文件中存在多个访问规则时,将按如下方式计算权限:

用于连接服务的访问控制

ACL 属性文件中的连接访问控制部分包含代理连接服务的访问控制规则。连接访问控制规则的语法如下:

connection.resourceVariant.
access.principalType=
principals

resourceVariant 定义了两个值:NORMALADMIN。这些预定义的值是您唯一能够授予访问权限的连接服务类型。

默认的 ACL 属性文件授予所有用户访问 NORMAL 连接服务的权限,并授予 admin 组中的用户访问 ADMIN 连接服务的权限:

connection.NORMAL.allow.user=*
connection.ADMIN.allow.group=admin

如果您使用的是基于文件的用户系统信息库,则默认组 admin 由用户管理器实用程序创建。如果您使用的是 LDAP 用户系统信息库,则可以通过执行以下操作之一来使用默认 ACL 属性文件:

您可以对连接访问权限加以限定。例如,以下规则拒绝 Bob 访问 NORMAL,但允许其他人访问:

connection.NORMAL.deny.user=Bob
connection.NORMAL.allow.user=*

可以使用星号 (*) 指定所有通过验证的用户或组。

使用 ACL 属性文件来授权访问 ADMIN 连接的方式与使用基于文件的用户系统信息库和 LDAP 用户系统信息库不同,如下所示:

对物理目的地的访问控制

访问控制属性文件的目的地访问控制部分包含基于物理目的地的访问控制规则。这些规则决定谁(用户/组)可以在哪里(物理目的地)执行什么(操作)。这些规则控制的访问类型包括向队列发送消息、向主题发布消息、从队列接收消息、订阅主题以及浏览队列中的消息。

默认情况下,任何用户或组都可以对任何物理目的地进行任意类型的访问。您可以添加更多特定的目的地访问规则或编辑默认的规则。本节的余下部分介绍物理目的地访问规则的语法,您必须理解这些语法才能编写自己的规则。

目的地规则的语法如下:

resourceType.resourceVariant.operation.access.principalType=principals

表 7–4 介绍了这些元素:

表 7–4 物理目的地访问控制规则的元素

组件 

描述 

resourceType

可以是 queuetopic

resourceVariant

某个物理目的地名或所有物理目的地 (*),星号表示所有队列或所有主题。 

operation

可以是 produceconsume browse

access

可以是 allowdeny

principalType

可以是 usergroup

可以将访问权限授予一个或多个用户和/或组。

以下示例说明了不同类型的物理目的地访问控制规则:

对自动创建的物理目的地的访问控制

ACL 属性文件最后一部分所包括的访问规则指定代理将为哪些用户和组自动创建物理目的地。

当用户在尚不存在的物理目的地上创建生成方或使用方时,如果已启用代理的自动创建属性,则代理将会创建该目的地。

默认情况下,任何用户或组都有权让代理为其自动创建一个物理目的地。此权限由以下规则指定:

queue.create.allow.user=*
topic.create.allow.user=*

您可以编辑 ACL 文件以限制此类访问权限。

物理目的地自动创建访问规则的一般语法如下:

resourceType.create.access.principalType=principals

其中 resourceTypequeuetopic

例如,以下规则允许代理为除 Snoopy 之外的每个用户自动创建 topic 目的地。

topic.create.allow.user=*
topic.create.deny.user=Snoopy

请注意,物理目的地自动创建规则的效果必须与物理目的地访问规则的效果一致。例如,如果您 1) 更改目的地访问规则,禁止任何用户向目的地发送消息;但是 2) 启用了目的地的自动创建,那么如果目的地不存在,代理创建一个物理目的地,但不会向该目的地发送任何消息。