像mysql有數據庫的概念並且可以指定用戶對庫和表等操作的權限。那RabbitMQ呢?RabbitMQ也有類似的權限管理。在RabbitMQ中可以虛擬消息服務器VirtualHost,每個VirtualHost相當月一個相對獨立的RabbitMQ服務器,每個VirtualHost之間是相互隔離的。exchange、queue、message不能互通。
在RabbitMQ中無法通過AMQP創建VirtualHost,可以通過以下命令來創建。
rabbitmqctl add_vhost [vhostname]
如上圖在創建完vhost后可以在All Virtual Host標簽看到新建的VirtualHost。
用戶權限管理
通常在權限管理中主要包含三步:
- 新建用戶
- 配置權限
- 配置角色
新建用戶
rabbitmqctl add_user wyt wyt
配置權限
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
其中, 的位置分別用正則表達式來匹配特定的資源,如
'^(amq.gen.*|amq.default)$'
可以匹配server生成的和默認的exchange,’^$’不匹配任何資源
- exchange和queue的declare與delete分別需要exchange和queue上的配置權限
- exchange的bind與unbind需要exchange的讀寫權限
- queue的bind與unbind需要queue寫權限exchange的讀權限 發消息(publish)需exchange的寫權限
- 獲取或清除(get、consume、purge)消息需queue的讀權限
示例:我們賦予superrd在“/”下面的全部資源的配置和讀寫權限。
rabbitmqctl set_permissions -p / superrd ".*" ".*" ".*"
注意”/”代表virtual host為“/”這個“/”和linux里的根目錄是有區別的並不是virtual host為“/”可以訪問所以的virtual host,把這個“/”理解成字符串就行。
配置角色
rabbitmqctl set_user_tags [user] [role]
RabbitMQ中的角色分為如下五類:none、management、policymaker、monitoring、administrator
官方解釋如下:
management User can access the management plugin policymaker User can access the management plugin and manage policies and parameters for the vhosts they have access to. monitoring User can access the management plugin and see all connections and channels as well as node-related information. administrator User can do everything monitoring can do, manage users, vhosts and permissions, close other user’s connections, and manage policies and parameters for all vhosts.
-
none
不能訪問 management plugin -
management
用戶可以通過AMQP做的任何事外加:
列出自己可以通過AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和關閉自己的channels 和 connections
查看有關自己的virtual hosts的“全局”的統計信息,包含其他用戶在這些virtual hosts中的活動。 -
policymaker
management可以做的任何事外加:
查看、創建和刪除自己的virtual hosts所屬的policies和parameters -
monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他們不能登錄的virtual hosts
查看其他用戶的connections和channels
查看節點級別的數據如clustering和memory使用情況
查看真正的關於所有virtual hosts的全局的統計信息 -
administrator
policymaker和monitoring可以做的任何事外加:
創建和刪除virtual hosts
查看、創建和刪除users
查看創建和刪除permissions
關閉其他用戶的connections
如下示例將wyt設置成administrator角色。
rabbitmqctl set_user_tags wyt administrator