存取控制特性檔案 (ACL 檔案) 包含的規則,指定使用者和群組使用者可以執行的作業。您可以編輯 ACL 檔案,限制某些使用者和群組執行作業。您可以在每個代理程式實例使用不同的 ACL 檔案。
無論使用者資訊放在平面檔案使用者儲存庫中還是放在 LDAP 使用者儲存庫中,均可使用 ACL 檔案。當用戶端應用程式執行以下作業時,代理程式會檢查其 ACL 檔案:
建立連線
建立產生器
建立用戶
瀏覽佇列
代理程式會檢查 ACL 檔案,判斷提出請求的使用者或該使用者所屬的群組,是否已有執行此作業的授權。
如果您編輯 ACL 檔案,新的設定會在下次代理程式檢查檔案以驗證授權時生效。您編輯此檔案後,不需要重新啟動代理程式。
不同實例有不同的 ACL 檔案。每次啟動代理程式實例時,會在實例目錄中建立預設檔案 accesscontrol.properties。此檔案的路徑格式如下 (請參閱附錄 AMessage 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 |
下列其中一項:connection、queue 或 topic。 |
resourceVariant |
resourceType 指定的類型實例。例如,myQueue。您可使用萬用字元符號 (*) 來表示所有連線服務類型或所有實體目標。 |
operation |
值取決於要制定的存取規則種類。 |
access |
下列其中一項:allow 或 deny。 |
principalType |
下列其中一項:user 或 group。如需更多資訊,請參閱群組。 |
principals |
可以擁有在規則左側所指定存取權的使用者。如果 principalType 為 user,則此項可以為個別使用者或使用者清單 (以逗號分隔);如果 principalType 為 group,則此項可以為單一群組或群組清單 (以逗號分隔的清單)。您可使用萬用字元符號 (*) 來表示所有使用者或所有群組。 |
以下為存取規則的一些範例:
以下規則表示任何使用者均可以將訊息傳送至名為 q1 的佇列。
queue.q1.produce.allow.user=*
以下規則表示任何使用者均可以將訊息傳送至任何佇列。
queue.*.produce.allow.user=*
若要指定非 ASCII 的使用者、群組或目標名稱,請使用 Unicode 換碼 (\\uXXXX) 表示法。如果您已經編輯並儲存具有非 ASCII 編碼名稱的 ACL 檔案,則可以使用 Java native2ascii 工具將其轉換為 ASCII。如需更多詳細資訊,請至
http://java.sun.com/j2se/1.4/docs/guide/intl/faq.html
特定存取規則置換一般存取規則。套用以下兩條規則之後,所有使用者均可以將訊息傳送至所有佇列,但是 Bob 卻無法將訊息傳送至 tq1。
queue.*.produce.allow.user=* queue.tq1.produce.deny.user=Bob
賦予明確 principal 的存取權會置換賦予 * principal 的存取權。以下規則拒絕 Bob 產生訊息傳給 tq1,但允許其他所有使用者執行這項作業。
queue.tq1.produce.allow.user=* queue.tq1.produce.deny.user=Bob
用於使用者的 * principal 規則置換用於群組的相應 * principal 規則。例如,以下兩條規則允許所有認證使用者將訊息傳送至 tq1。
queue.tq1.produce.allow.user=* queue.tq1.produce.deny.group=*
授予使用者的存取權會置換授予使用者群組的存取權。在下列範例中,即使 Bob 是 User 成員,也無法產生訊息傳給 tq1。User 的所有其他成員皆可執行這項作業。
queue.tq1.produce.allow.group=User queue.tq1.produce.deny.user=Bob
任何未透過存取規則明確授予的存取權限,都會遭到隱式拒絕。例如,如果 ACL 檔案不包含存取規則,則所有使用者都無法執行所有作業。
相同使用者或群組的拒絕和允許權限會相互抵銷。例如,以下兩條規則導致 Bob 無法瀏覽 q1:
queue.q1.browse.allow.user=Bob queue.q1.browse.deny.user=Bob
以下兩條規則導致 User 群組無法使用 q5 的訊息。
queue.q5.consume.allow.group=User queue.q5.consume.deny.group=User
當存在多條相同的左側規則時,只有最後一項生效。
ACL 特性檔案中的連線存取控制區段,包含用於代理程式連線服務的存取控制規則。連線存取控制規則的語法如下:
connection.resourceVariant. access.principalType= principals
resourceVariant 定義有兩個值:NORMAL 和 ADMIN。您只能授權存取這些連線服務類型的預定值。
預設 ACL 特性檔案授權所有使用者存取 NORMAL 連線服務,並授權 admin 群組中的使用者存取 ADMIN 連線服務:
connection.NORMAL.allow.user=* connection.ADMIN.allow.group=admin
如果您使用檔案式的使用者儲存庫,使用者管理員公用程式會建立預設群組 admin。如果您使用 LDAP 使用者儲存庫,只要執行下列一項作業即可使用預設 ACL 特性檔案:
在 LDAP 目錄中定義 admin 群組。
將 ACL 特性檔案中的 admin 名稱,換成 LDAP 目錄中已定義的一個或多個群組名稱。
您可以限制連線存取權限。例如,以下規則拒絕 Bob 存取 NORMAL,但是允許其他所有使用者進行存取:
connection.NORMAL.deny.user=Bob connection.NORMAL.allow.user=*
您可以使用星號 (*) 字元代表所有認證使用者或群組。
對於檔案式使用者儲存庫和 LDAP 使用者儲存庫,使用 ACL 特性檔案授權存取 ADMIN 連線的方式有下列不同:
LDAP 使用者儲存庫。 如果您使用 LDAP 使用者儲存庫,請執行下列所有作業:
啟用存取控制。
編輯 ACL 檔案,並提供可以建立 ADMIN 連線的使用者或群組名稱。指定 LDAP 目錄伺服器中已定義的任何使用者或群組。
存取控制特性檔案的目標存取控制區段,包含實體目標型的存取控制規則。這些規則決定何人 (使用者/群組) 可以在何處 (實體目標) 做什麼 (作業)。這些規則所規定的存取權類型包括:將訊息傳送至佇列、將訊息發佈至主題、接收來自佇列的訊息、訂閱主題以及瀏覽佇列中的訊息。
依預設,任何使用者或群組對任何實體目標都擁有所有類型的存取權。您可以新增更多特定的目標存取規則,或編輯預設規則。本節的其餘部分介紹實體目標存取規則的語法,您必須理解此語法以編寫自己的規則。
目標規則的語法如下:
resourceType.resourceVariant.operation.access.principalType=principals
表 7–4 中有這些元素的描述:
表 7–4 實體目標存取控制規則的元素
元件 |
說明 |
---|---|
resourceType |
可以是 queue 或 topic。 |
resourceVariant |
某一個實體目標名稱;或所有的實體目標 (*),表示所有佇列或所有主題。 |
operation |
可以是 produce、consume 或 browse。 |
access |
可以是 allow 或 deny。 |
principalType |
可以是 user 或 group。 |
可以將存取權賦予一個或多個使用者和 (或) 一個或多個群組。
以下範例說明了不同種類的實體目標存取控制規則:
允許所有使用者將訊息傳送至任何佇列目標。
queue.*.produce.allow.user=*
拒絕群組 user 的任何成員訂閱主題 Admissions。
topic.Admissions.consume.deny.group=user
ACL 特性檔案最後部分的存取規則,可以指定代理程式將為哪些使用者和群組自動建立實體目標。
當使用者在並不存在的實體目標上建立產生器或用戶時,如果已啟用代理程式的自動建立特性,則代理程式將會建立此目標。
依預設,任何使用者或群組均有權讓代理程式自動建立實體目標。此權限由以下規則指定:
queue.create.allow.user=* topic.create.allow.user=*
您可以編輯 ACL 檔案以限制此類型的存取權。
實體目標自動建立存取規則的一般語法如下:
resourceType.create.access.principalType=principals
其中 resourceType 為 queue 或 topic。
例如,以下規則可讓代理程式為所有使用者 (除 Snoopy 之外) 自動建立主題目標。
topic.create.allow.user=* topic.create.deny.user=Snoopy
請注意,實體目標自動建立規則的效果必須與實體目標存取規則的效果一致。例如,如果您 1) 變更目標存取規則,以禁止任何使用者將訊息傳送至目標,但是 2) 啟用目標的自動建立功能,如果此目標不存在,則代理程式將會建立此實體目標,但不會將訊息傳送至此目標。