全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-22 8 分钟 ✍️ juanwangdev

用户与权限管理

RabbitMQ 通过用户认证与虚拟主机权限控制实现多租户隔离,生产环境必须为不同业务分配独立账号。

定义

RabbitMQ 权限体系包含两层:用户认证(用户名/密码)与虚拟主机权限(configure/write/read 权限)。用户必须被授权访问特定虚拟主机才能创建队列、发送/消费消息。

命令行操作

创建用户

Bash
# 格式: rabbitmqctl add_user <username> <password>
rabbitmqctl add_user app_user SecurePass123

设置用户角色

Bash
# 可选角色: administrator, monitoring, policymaker, management, 普通用户(空)
rabbitmqctl set_user_tags app_user management

角色说明:

  • administrator:最高权限,可管理所有虚拟主机、用户、策略
  • management:可访问 Web 控制台,仅能查看自己有权访问的资源
  • monitoring:可查看监控指标,无管理权限
  • policymaker:可管理策略和参数
  • 无角色:仅用于业务连接,无法访问控制台

授权虚拟主机权限

Bash
# 格式: rabbitmqctl set_permissions -p <vhost> <user> <configure> <write> <read>
# 授予 app_user 访问 /vhost_app 的完整权限
rabbitmqctl set_permissions -p /vhost_app app_user ".*" ".*" ".*"

权限正则说明:

  • configure:允许创建/删除队列、交换机(正则匹配资源名称)
  • write:允许发布消息
  • read:允许消费消息、查看队列状态

查看用户权限

Bash
# 列出所有用户
rabbitmqctl list_users

# 查看指定用户在虚拟主机上的权限
rabbitmqctl list_permissions -p /vhost_app

# 查看用户有权访问的虚拟主机
rabbitmqctl list_user_permissions app_user

Java 客户端连接示例

Java
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class AuthenticatedConnection {
    private static final String VHOST = "/vhost_app";

    public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setPort(5672);
        // 使用新建的业务账号连接
        factory.setUsername("app_user");
        factory.setPassword("SecurePass123");
        // 指定虚拟主机
        factory.setVirtualHost(VHOST);

        try (Connection connection = factory.newConnection();
             Channel channel = connection.createChannel()) {
            System.out.println("认证成功,已连接到虚拟主机: " + VHOST);

            // 在该虚拟主机下创建队列
            channel.queueDeclare("business_queue", true, false, false, null);
            System.out.println("队列已创建: business_queue");
        }
    }
}

Web 控制台操作

  1. 登录 http://localhost:15672(使用 administrator 角色)
  2. 点击顶部 Admin 标签
  3. 点击 Add a user,填写用户名、密码、角色
  4. 点击用户进入详情页,在 Permissions 区域点击 Set permission
  5. 选择虚拟主机,填写 configure/write/read 正则表达式,点击设置

删除用户与撤销权限

Bash
# 撤销用户在虚拟主机上的权限
rabbitmqctl clear_permissions -p /vhost_app app_user

# 删除用户
rabbitmqctl delete_user app_user

注意事项

guest 用户仅限 localhost 连接,远程访问必须新建用户。

configure/write/read 权限使用正则表达式匹配资源名称,".*" 表示匹配所有资源。

修改权限后需重新连接才能生效,已建立的连接不受影响。

生产环境建议为每个业务分配独立用户和虚拟主机,实现权限最小化。

要点总结

  • 创建用户:rabbitmqctl add_user <username> <password>
  • 设置角色:rabbitmqctl set_user_tags <user> <role>,常用 management 或 administrator
  • 授权虚拟主机:rabbitmqctl set_permissions -p <vhost> <user> ".*" ".*" ".*"
  • Java 连接需设置 setUsernamesetPasswordsetVirtualHost
  • 权限基于虚拟主机隔离,不同虚拟主机用户互不干扰

📝 发现内容有误?点击此处直接编辑

← 上一篇 Web控制台基础操作
下一篇 → 管理插件启用
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库