在 RabbitMQ 中,用户是访问控制(Access Control)的基本单元,且单个用户可以跨越多个 vhost 进行授权。如果用户拥有多个 vhost,可以对每个 vhost 授予不同级别的访问权限,并使用标准的用户名和密码来认证用户。
RabbitMQ 中,使用 rabbitmqctl add_user 命令创建用户,命令格式如下:
rabbitmqctl add_user username password
其中:
username:表示要创建的用户名称
password:表示要创建用户的登录密码
示例:创建名为 demo,密码为 abc124 的用户
# 创建用户 D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat add_user demo abc123 Adding user "demo" ... Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more. # 给用户授权 D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat set_permissions -p vhost1 demo ".*" ".*" ".*" Setting permissions for user "demo" in vhost "vhost1" ... # 查看用户的权限 D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat list_user_permissions demo Listing permissions for user "demo" ... vhost configure write read vhost1 .* .* .*
在 RabbitMQ 中,可以通过 rabbitmqctl delete_user 命令删除存在的用户。命令格式:
rabbitmqctl delete_user username
其中,username 表示要删除的用户名称。
示例:删除 demo 用户
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat delete_user demo Deleting user "demo" ...
在 RabbitMQ 中,可以通过 rabbitmqctl change_password 命令来更改指定用户的密码。命令格式:
rabbitmqctl change_password username newpassword
其中,username 表示要变更密码的用户名称,newpassword 表示要变更的新的密码。
示例:将 demo 用户的密码变更为 123456
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl change_password demo 123456 Changing password for user "demo" ...
在 RabbitMQ 中,可以通过 rabbitmqctl clear_password 清除指定用户的密码,这样用户就不能使用密码进行登录了。命令格式:
rabbitmqctl clear_password username
其中 username 表示要清除密码的用户名。
示例:清除 demo 用户的密码
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat clear_password demo Clearing password for user "demo" ...
在 RabbitMQ 中,可以通过 rabbitmqctl authenticate_user 命令验证用户名和密码是否有效。命令格式:
rabbitmqctl authenticate_user userηame password
其中 username 表示需要被验证的用户名称,password 表示用户密码。
示例:验证用户 demo 的密码是否为 123456
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat authenticate_user demo 123456 Authenticating user "demo" ... Success D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat authenticate_user demo 123450 Authenticating user "demo" ... Error: Error: failed to authenticate user "demo" user 'demo' - invalid credentials
在 RabbitMQ 中,可以通过 rabbitmqctl list_users 命令列出当前的所有用户。每个结果行都包含用户名称,其后紧跟用户的角色(tags)。示例:
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat list_users Listing users ... user tags admin [administrator] demo [] guest [administrator] hxstrive [administrator]
用户的角色分为五种类型:
none:无任何角色。新创建的用户的角色默认为 none
management:可以访问 We 管理页面
policymaker:包含 management 的所有权限,并且可以管理策略(Policy)和参数(Parameter)
monitoring:包含 management 的所有权限,并且可以看到所有连接、信道及节点相关的信息
administrator:代表了最高的权限,类似 Linux 的 root 用户。包含 monitoring 的所有权限,并且可以管理用户、虚拟机、权限、策略、参数等
在 RabbitMQ 中,可以通过 rabbitmqctl set_user_tags username 命令为用户设置角色。命令格式:
rabbitmqctl set user tags username tag...
其中 username 参数表示需要设置角色的用户名称,tag 参数用于设置0个、1个或者多个的角色,设置之后任何之前现有的身份都会被删除。示例如下:
(1)为 demo 用户设置 monitoring 角色
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat set_user_tags demo monitoring Setting tags for user "demo" to [monitoring] ... D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat list_users -q user tags admin [administrator] demo [monitoring] guest [administrator] hxstrive [administrator]
(2)使用 -q 参数静默的为 demo 用户添加 policymaker 角色
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat set_user_tags demo policymaker -q D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat list_users -q user tags admin [administrator] demo [policymaker] guest [administrator] hxstrive [administrator]
(3)清除 demo 用户上面的所有角色
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat set_user_tags demo Setting tags for user "demo" to [] ... D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat list_users -q user tags admin [administrator] demo [] guest [administrator] hxstrive [administrator]
(4)为 demo 用户设置多个角色,分别为 policymaker,monitoring
D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat set_user_tags demo policymaker,monitoring Setting tags for user "demo" to [policymaker,monitoring] ... D:\server\rabbitmq_server-3.9.11\sbin> rabbitmqctl.bat list_users -q user tags admin [administrator] demo [policymaker,monitoring] guest [administrator] hxstrive [administrator]