用户管理
安装RabbitMQ后,RabbitMQ默认提供了guest用户,guest具有最高权限,在开发中不建议直接使用,需要为项目创建用户。
通过命令的方式
添加用户
rabbitmqctl add_user username passwd
删除用户
rabbitmqctl delete_user username
修改用户密码
rabbitmqctl change_password username newpasswd
查看用户列表
rabbitmqctl list_users
通过Web的方式
登录RabbitMQ的控制台http://localhost:15672,默认的用户名和密码是guest。添加新用户,用户名admin,密码123456,Tags选择Admin,点击Add user添加成功。
角色管理
在添加用户时,我们选择了Tags,Tags也就是用户角色,它有如下五种:
超级管理员(administrator):可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
监控者(monitoring):可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)。
策略制定者(policymaker):可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息。
普通管理者(management):仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
其他:无法登陆管理控制台,通常就是普通的生产者和消费者。
通过命令的方式
# 设置用户为administrator角色
rabbitmqctl set_user_tags username administrator
通过Web的方式
成功添加了一个用户后,此时发现virtual hosts是 No access。virtual hosts也可以理解为数据库,现在需要为admin用户添加可以访问的virtual hosts。
vhost特性
-
RabbitMQ默认的vhost是“/”,开箱即用。
-
vhost一般以"/"开头。
-
多个vhost是隔离的,多个vhost无法通讯,并且不用担心命名冲突(队列和交换器和绑定),实现了多层分离。
-
创建用户的时候必须指定vhost。
在Admin下的Virtual Hosts中添加一个virtual hosts,点击Add virtual hosts。
当然你也可以使用命令的方式:
创建vhost:
rabbitmqctl add_vhost[vhost_name]
删除vhost:
rabbitmqctl delete_vhost[vhost_name]
查看所有的vhost:
rabbitmqctl list_vhosts
再点击/vhost_test进行用户授权,如下位置
选择刚刚添加的admin用户
点击Set permission,用户授权成功。此时可以退出登录,用admin用户来登录试试,发现登录成功了。
权限管理
用户仅能对其所能访问的virtual hosts中的资源进行操作。这里的资源指的是virtual hosts中的exchanges、queues等,操作包括对资源进行配置、写、读。配置权限可创建、删除、资源并修改资源的行为,写权限可向资源发送消息,读权限从资源获取消息。比如:
- exchange和queue的declare与delete分别需要exchange和queue上的配置权限
- exchange的bind与unbind需要exchange的读写权限
- queue的bind与unbind需要queue写权限exchange的读权限
- 发消息(publish)需exchange的写权限
- 获取或清除(get、consume、purge)消息需queue的读权限
对何种资源具有配置、写、读的权限通过正则表达式来匹配,具体命令如下:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
其中,<conf> <write> <read>的位置分别用正则表达式来匹配特定的资源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和默认的exchange,'^$'不匹配任何资源。需要注意的是RabbitMQ会缓存每个connection或channel的权限验证结果,因此权限发生变化后需要重连才能生效。
示例:
rabbitmqctl set_permissions -p /vhost1 admin '.*' '.*' '.*'
该命令使用户admin具有/vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源。
查看(指定VHostPath)所有用户的权限信息
rabbitmqctl list_permissions [-p VHostPath]
查看指定用户的权限信息
rabbitmqctl list_user_permissions username
清除用户的权限信息
rabbitmqctl clear_permissions [-p VHostPath] username