一、權限說明
在rabbitmq中,可以創建被稱為虛擬主機(vhost)的虛擬消費服務器。每個vhost邏輯上是一個獨立的消息服務器,擁有自己獨立的交換器、隊列和綁定等資源。
vhost提供了隔離機制,使得用戶可以在同一套rabbitmq服務器上創建多個vhost,並對不同對應用使用不同對vhost,不同的vhost之間相互隔離,這在業務復雜的大型應用中會比較有用。
二、相關命令
#創建vhost
rabbitmqctl add_vhost {vhost}
#查看vhost
rabbitmqctl list_vhosts
#刪除vhost
rabbitmqctl delete_vhost {vhost}
#創建用戶
rabbitmqctl add_user {username} {password}
#賦予角色
rabbitmqctl set_user_tags {username} {tag}
tag包含:none、management、policymaker、monitoring、administrator
1、none 不能訪問 management plugin
2、management 用戶可以通過AMQP做的任何事情外
l 列出自己可以通過AMQP登入的virtual hosts
l 查看自己的virtual hosts中的queues, exchanges 和 bindings
l 查看和關閉自己的channels 和 connections
l 查看有關自己的virtual hosts的“全局”的統計信息,包含其他用戶在這些virtual hosts中的活動。
3、policymaker management可以做的任何事外加:
l 查看、創建和刪除自己的virtual hosts所屬的policies和parameter
4、monitoring management可以做的任何事外加:
l 列出所有virtual hosts,包括他們不能登錄的virtual hosts
l 查看其他用戶的connections和channels
l 查看節點級別的數據如clustering和memory使用情況
l 查看真正的關於所有virtual hosts的全局的統計信息
5、administrator policymaker和monitoring可以做的任何事外加:
l 創建和刪除virtual hosts
l 查看、創建和刪除users
l 查看創建和刪除permissions
l 關閉其他用戶的connections
#刪除用戶
rabbitmqctl delete_user {username}
#為用戶授權
rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
l -p 為可選項,指定vhost;
l user指定用戶;
l {conf}{write}{read}分別指定用戶可以在哪些資源上做配置、讀、和寫的權限。它們都是一個正則表達式,如果資源名稱與指定的正則匹配,則用戶對該資源有對應操作權限。需要說明{conf}是指可以對隊列、交換器等做創建、刪除之類等管理操作,{write}是指可以發布消息,{read}是指可以消費消息。
7、查看權限
查看vhost權限
rabbitmqctl list_permissions [-p vhost]
查看用戶權限
rabbitmqctl list_user_permissions {username}
8、清除權限
與授權相同,清除用戶權限也是以vhost為單位對,即一次性清除用戶在某個vhost上設置對所有權限。
清除權限命令為: rabbitmqctl clear_permissions [-p vhost] {username}
9、設置topic權限
set_topic_permissions [-p vhost] {username} {exchange} {write} {read}
l vhost:授予用戶訪問權的虛擬主機的名稱,默認為“/”。
l user:目標虛擬主機中的權限適用的用戶的名稱。
l exchange:主題交換授權檢查名稱將應用於。
l write:與發布的消息的路由鍵匹配的正則表達式。
l read:與消費消息的路由鍵匹配的正則表達式。
clear_topic_permissions [-p vhost] {username} [exchange]
list_topic_permissions [-p vhost]
list_user_topic_permissions {username}
用戶可以用哪個交換機 的交換策略(交換機 以某種策略去讀寫)
1、測試用戶是否可以創建exchange 即不設置conf
rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
不配置conf 生產者報錯 發布出去消息
conf為新增刪除等一些權限
2、測試讀寫權限
set_topic_permissions [-p vhost] {username} {exchange} {write} {read}
三、示例:
1、創建/dev_order_vhost虛擬主機的讀權限用戶dev_order_read與寫權限用戶dev_order_write
#創建寫用戶dev_order_write 即生產者用戶
rabbitmqctl add_user dev_order_write password
#創建讀用戶dev_order_read 即消費者用戶
rabbitmqctl add_user dev_order_write password
#創建/dev_order_vhost虛擬主機
rabbitmqctl add_vhost /dev_order_vhos
#賦予讀用戶dev_order_read在/dev_order_vhost虛擬主機讀的權限
rabbitmqctl set_permissions -p /dev_order_vhost dev_order_read ".*" "" ".*"
#賦予寫用戶dev_order_write在/dev_order_vhost虛擬主機寫的權限
rabbitmqctl set_permissions -p /dev_order_vhost dev_order_write ".*" ".*" ""
#賦予用戶A在/dev_order_vhost虛擬主機寫的讀寫權限
rabbitmqctl set_permissions -p /dev_order_vhost A ".*" ".*" ".*"
說明:需要配置conf,並且需要創建exchange queue 並綁定
2、針對topic_per用戶在/vhost虛擬主機中的testexcheange交換機控制只有路由符合pre開頭的才可以生產消費
rabbitmqctl set_topic_permissions -p /vhost topic_per testxchange "^pre" "^pre"