在刚开始看RabbitMq权限的时候,分不清楚角色和权限(permission)的区别和用法,今天把我对它们的理解做一个总结。
角色
也可以理解为权限,但它只是针对管理RabbitMQ的权限,包括vhost、用户、exchange、queue、链接等。举个实际的例子:假设开启了rabbitmq_manage 的插件,通过set_user_tags 就可以赋予某个用户使用rabbitmq_manage的权限。
系统默认有5种角色:none、management、policymaker、monitoring、administrator
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
权限 – permission
主要是set_permissions的使用,这个有点奇葩,先看下命令的格式:
set_permissions [-p vhost] {user} {conf} {write} {read}
首先需要注意以下几点的理解:
- 这里的权限,只是针对一般用户的访问权限,注意和角色的区分。举个例子来说,非管理用户(普通用户),角色设置为none,然后在这里配置conf、write、read的权限。
- conf、write、read采用正则表达式,之前在很多的网络文章中都提到过,但到底是针对什么做正则,网络中的文章提到的很少,我自己实践琢磨出,这里的正则主要是针对exchange和queue。正在表达式可以省略^和$,主要2种特殊的表达式,”:表示完全不匹配(即没有权限)’.*’ :表示匹配所有(即所有权限)