RabbitMQ权限控制

一、权限说明

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包含:nonemanagementpolicymakermonitoringadministrator

1none 不能访问 management plugin

2management 用户可以通过AMQP做的任何事情外

列出自己可以通过AMQP登入的virtual hosts  

查看自己的virtual hosts中的queues, exchanges bindings

查看和关闭自己的channels connections

查看有关自己的virtual hosts全局的统计信息,包含其他用户在这些virtual hosts中的活动。

3policymaker management可以做的任何事外加:

查看、创建和删除自己的virtual hosts所属的policiesparameter

4monitoring management可以做的任何事外加:

列出所有virtual hosts,包括他们不能登录的virtual hosts

查看其他用户的connectionschannels

查看节点级别的数据如clusteringmemory使用情况

查看真正的关于所有virtual hosts的全局的统计信息  

5administrator policymakermonitoring可以做的任何事外加:

创建和删除virtual hosts

查看、创建和删除users

查看创建和删除permissions

关闭其他用户的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"

 

原文地址:https://www.cnblogs.com/TimeSay/p/14803530.html