在前面章节介绍了 RabbitMQ 的虚拟机 vhost,下面将继续介绍 RabbitMQ 的权限管理。
在 AMQP 协议中并没有指定权限在 vhost 级别还是在服务器级别实现,实现方式由实现 AMQP 的应用自定义实现。
在 RabbitMQ 中,权限控制则是以 vhost 为单位。当创建一个用户时,用户通常会被指定一个或多个 vhost,并且用户只能访问被指定的 vhost 内的队列、交换器和绑定关系等等。因此,RabbitMQ 中的授权是指在 vhost 级别对用户进行授权。
RabbitMQ 中,使用 rabbitmqcl set_permissions 命令进行授权,命令格式:
rabbitmqcl set_permissions [-p vhost] user conf write read
参数含义如下:
vhost:表示 vhost 名称,可以设置为默认值,即 vhost 为 “/”
user:表示可以访问指定 vhost 的用户名
conf:表示用于匹配用户在哪些资源上拥有可配置权限的正则表达式,可配置指的是队列和交换器的创建及删除之类的操作
write:表示用于匹配用户在哪些资源上拥有可写(指发布消息)权限的正则表达式
read:表示用于匹配用户在哪些资源上拥有可读(指消息有关的操作,如读取消息、清空队列等)权限的正则表达式
(1)授予 hxstrive 用户可访虚拟主机 vhostl,并在所有资源上都具备可配置、可写及可读的权限。示例如下:
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat set_permissions -p vhost1 hxstrive ".*" ".*" ".*" Setting permissions for user "hxstrive" in vhost "vhost1" ...
(2)授予 hxstrive 用户可访问虚拟主机 vhost1。且在以 “queue” 开头的资源上具备可配置权限,并在所有资源上拥有可写、可读的权限。示例如下:
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat set_permissions -p vhost1 hxstrive "^queue.*" ".*" ".*" Setting permissions for user "hxstrive" in vhost "vhost1" ...
上面介绍了怎样对用户授权,这里将介绍怎样清理权限。清理权限也是在 vhost 级别的,清除权限的名为:
rabbitmqctl clear_permissions [-p vhost] user
参数说明:
vhost:表示 vhost 名称,可以设置为默认值,即 vhost 为 “/”
user:表示用户名
例如:清理 hxstrive 用户在 vhost1 上面的所有权限
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl clear_permissions -p vhost1 hxstrive Clearing permissions for user "hxstrive" in vhost "vhost1" ...
RabbitMQ 中提供了 rabbitmqctl list_permissions 和 rabbitmqctl list_user_permissions 两个命令,这些命令用来查询虚拟机或用户的权限。
rabbitmqctl list_permissions 命令用来查看指定虚拟机 vhost 的权限,命令格式如下:
rabbitmqctl list_permissions [-p vhost]
示例:查看 vhost1 虚拟机的权限
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl list_permissions -p vhost1 Listing permissions for vhost "vhost1" ... user configure write read hxstrive .* .* .*
rabbitmqctl list_user_permissions 命令用来查看指定用户的权限,命令格式如下:
rabbitmqctl list_user_permissions username
其中:
username:表示要查看权限的用户名
示例:查看 hxstrive 用户的所有权限
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl list_user_permissions hxstrive Listing permissions for user "hxstrive" ... vhost configure write read vhost2 .* .* .* vhost1 .* .* .* / .* .* .*
上面输出中得知,hxstrive 用户在默认虚拟机 /、vhost1 和 vhost2 中拥有所有资源的配置、写和读的权限。