rabbitmq中,vhost提供了资源隔离机制。同时,通过为用户设置vhost粒度的权限,可以实现丰富的权限控制功能。

vhost

在rabbitmq中,可以创建被称为虚拟主机(vhost)的虚拟消费服务器。每个vhost逻辑上是一个独立的消息服务器,拥有自己独立的交换器、队列和绑定等资源。

vhost提供了隔离机制,使得用户可以在同一套rabbitmq服务器上创建多个vhost,并对不同对应用使用不同对vhost,不同的vhost之间相互隔离,这在业务复杂的大型应用中会比较有用。

RabbitMQ默认创建了名称为"/"的vhost,这也是大多数情况下默认使用的vhost,应用程序在此vhost中声明交换器、队列和绑定,供业务使用。

通过rabbitmqctl,可以方便的查看、创建和删除vhost。

查看vhost

rabbitmqctl list_vhosts可以查看所有创建的vhost。

$ rabbitmqctl list_vhosts
Listing vhosts ...
/

创建vhost

rabbitmqctl add_vhost {vhost}

$ rabbitmqctl add_vhost myVhost
Adding vhost "myVhost" ..
$ rabbitmqctl list_vhosts
Listing vhosts ...
/
myVhost

删除vhost

rabbitmqctl delete_vhost {vhost}

$ rabbitmqctl delete_vhost myVhost
Deleting vhost "myVhost" ...

用户管理

创建用户

rabbitmqctl add_user {username} {password}

$ add_user swaf swaf123
Adding user "swaf" ...

查看用户

rabbitmqctl list_users

$ rabbitmqctl list_users
Listing users ...
swaf []
guest [administrator] //[]中为用户角色

修改用户密码

rabbitmqctl change_password {username} {password}

$ rabbitmqctl change_password swaf swaf456
Changing password for user "swaf" ...

验证用户

rabbitmqctl authenticate_user {username} {password}

$ rabbitmqctl authenticate_user swaf swaf456
Authenticating user "swaf" ...
Success
$ rabbitmqctl authenticate_user swaf jaf
Authenticating user "swaf" ...
Error: failed to authenticate user "swaf"
user 'swaf' - invalid credentials

删除用户

rabbitmqctl delete_user {username}

$ rabbitmqctl delete_user swaf
Deleting user "swaf" ...

权限控制

在RabbitMQ中,权限控制是以vhost为单位的。权限控制可以设置用户对某(几)个vhost内资源的访问权限。

授权

为用户授权的命令为格式为: rabbitmqctl set_permissions [-p vhost] {user} {conf}{write}{read}

其中

  • -p 为可选项,指定vhost;
  • user指定用户;
  • {conf}{write}{read}分别指定用户可以在哪些资源上做配置、读、和写的权限。它们都是一个正则表达式,如果资源名称与指定的正则匹配,则用户对该资源有对

    应对操作权限。需要说明对是{conf}是指可以对队列、交换器等做创建、删除之类等管理操作,{write}是指可以发布消息,{read}是指可以消费消息。
# 创建一个vhost和user
$ rabbitmqctl add_vhost vh1
Adding vhost "vh1" ... $ rabbitmqctl add_user u1 upass
Adding user "u1" ... rabbitmqctl list_vhosts
Listing vhosts ...
vh1
/ $ rabbitmqctl list_users
Listing users ...
guest [administrator]
u1 [] # 授予用户权限
#1 授予用户u1对vh1上所有资源对可配置、可读、可写权限
$ rabbitmqctl set_permissions -p vh1 u1 ".*" ".*" ".*"
Setting permissions for user "u1" in vhost "vh1" ... #2 用户u1对vh1上以error开头对资源有配置权限;对vh1上以log结尾对资源有写权限;对vh1上所有资源有读权限
$ rabbitmqctl set_permissions -p vh1 u1 "^error.*" ".*log$" ".*"
Setting permissions for user "u1" in vhost "vh1" ...

查看权限

有个两个命令可以查看用户权限,分别从vhost视角和user视角查看权限。

  • rabbitmqctl list_permissions [-p vhost] 查看vhost上对权限
  • rabbitmqctl list_user_permissions {username} 查看用户对权限
$ rabbitmqctl list_permissions -p vh1
Listing permissions for vhost "vh1" ...
u1 ^error.* .*log$ .* $ rabbitmqctl list_user_permissions u1
Listing permissions for user "u1" ...
vh1 ^error.* .*log$ .*

清除权限

与授权相同,清除用户权限也是以vhost为单位对,即一次性清除用户在某个vhost上设置对所有权限。

清除权限命令为: rabbitmqctl clear_permissions [-p vhost] {username}

$ rabbitmqctl clear_permissions -p vh1 u1
Clearing permissions for user "u1" in vhost "vh1" ...
$ rabbitmqctl list_user_permissions u1
Listing permissions for user "u1" ... $

RabbitMQ(2) vhost、用户和权限的更多相关文章

  1. RabbitMQ的Vhost,Exchange,Queue原理分析

    Vhost分析 RabbitMQ的Vhost主要是用来划分不同业务模块.不同业务模块之间没有信息交互. Vhost之间相互完全隔离,不同Vhost之间无法共享Exchange和Queue.因此Vhos ...

  2. (十三)RabbitMQ消息队列-VirtualHost与权限管理

    原文:(十三)RabbitMQ消息队列-VirtualHost与权限管理 VirtualHost 像mysql有数据库的概念并且可以指定用户对库和表等操作的权限.那RabbitMQ呢?RabbitMQ ...

  3. windows 安装 RabbitMQ 并添加用户 – 畅玩Coding

    原文:windows 安装 RabbitMQ 并添加用户 – 畅玩Coding 1.RabbitMQ 使用 Eralng,所以需要先安装 Eralng 下载: http://www.erlang.or ...

  4. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  5. Oracle创建用户设置权限

    (转:http://www.cnblogs.com/yangy608/archive/2011/08/22/2148893.html) create user TEST identified by & ...

  6. 使用Navicat在oracle XE上新建表空间、用户及权限赋予

    参考资料: 烂泥:使用Navicat for Oracle新建表空间.用户及权限赋予 - 烂泥行天下 - 51CTO技术博客http://ilanni.blog.51cto.com/526870/12 ...

  7. AD域-让共享目录只显示用户有权限访问的文件夹

    问题: 在AD域中,我们一般都会用到共享,如果有很多部门,我们可能还会按部门.职位配置权限.比如CSD,IT,PA等,但文件夹一多,用户看着就头大,而且用户没权限访问的文件夹误点击进去还会提示无权限访 ...

  8. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10

    今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求 ...

  9. Linux学习笔记1_用户和权限

    自从我大微软终于放下身段,决定给开源社区一个迟来的拥抱,追随多年的拥趸们像是突然得到了女神的垂青,各种茫然失措.痛哭流涕.欢欣鼓舞,纷纷唱了起来:“等了好久终于等到今天,梦了好久终于把梦实现……”唱完 ...

随机推荐

  1. 【android】来电悬浮窗

    先看下效果图 说下思路: 1:监听来电广播 2:根据来电号码,和本地数据库做匹配,有记录的,则提取出头像.名字.职位,生成悬浮窗 3:监听来电广播,如果当前行为是空闲的(没有任何通话行为),则删除掉悬 ...

  2. javaWeb 使用线程池+队列解决"订单并发"问题

    解决方式:使用线程池+队列 项目基于Spring,如果不用spring需要自己把 ThreadPoolManager.java 改成单例模式 1.写一个Controller(Spring mvc) / ...

  3. java: -source 1.6 中不支持 switch 中存在字符串

    最近在使用IDEA进行单个文件编译的时候给我报错,如题. 解决办法:将 Modules --->Sources ---> Language level 改为 7.0就ok了.

  4. hTML5 多图上传预览

    <p> <label>请选择一个文件:</label> <input type="file" id="file" mu ...

  5. oracle在cmd下通过命令导入导出数据

    1.首先在cmd下切换到oracle的客户端的exp.exe所在的bin目录下,例如 D:\oracle\product\10.2.0\client_2\BIN 数据导出:导出的数据库名称是在tnsn ...

  6. JS正则表达式从入门到入土(7)—— 分组

    分组 在使用正则的时候,有时候会想要匹配一串字符串连续出现多次的情况,比如:我想匹配字符串Byron连续出现3次的情况. 有些人会直接写: Byron{3} 但是,这种情况仅仅会匹配Byro加上三个n ...

  7. ashx 方法模板

    ; ); //查询字符串拼接 string searchparams = DTRequest.GetQueryString("jsonstring"); fooddetail mo ...

  8. [Linux 005]——IO重定向

    通常在 Shell 中执行命令的时候,我们会在输入命令的下方看到执行结果,操作系统默认将命令的执行结果输出到显示器上.当然,我们也可以手动的指定输出路径,或者输入路径,这就是 I/O 重定向. 1.标 ...

  9. C#的switch case注意

    参数可以是 switch 语句中的 参数必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型. 所以用string也可以,6666

  10. Jackson 框架JSON、XML、List、Map直接相互转换

    博客分类: json   参考:http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html 在其基础上做了稍微调整 详情见附件 jacks ...