RabbitMQ管理(1)——多租户与权限

每一个RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host),简称为vhost。每一个vhost本质上是一个独立的小型RabbitMQ服务器,拥有自己独立的队列、交换器以及绑定关系等待,并且它拥有自己独立的权限。vhost就像是虚拟机与物理服务器一样,它们在各个实例间提供逻辑上的分离,允许你为不同程序安全保密地运行数据,它既能将同一个RabbitMQ的中众多客户区分开,又可以避免队列和交换器等命令冲突。vhost之间是绝对隔离的,你无法将vhost1中的交换器与vhost2中的队列进行绑定,这样既保证了安全性,又可以确保可移植性。如果在使用RabbitMQ达到一定规模的时候,建议用户对业务功能、场景进行归类区分,并为之分配独立的vhost。

vhost是AMQP概念的基础,客户端在连接的时候必须制定一个vhost。RabbitMQ默认已创建的vhost为“/”,如果不需要多个vhost或者对vhost的概念不是很理解,那么就用这个默认的vhost也是非常合理的,使用默认的用户名guest和密码guest就可以访问它。但是为了安全以及方便,建议重新建立一个新的用户来访问它。

可以使用rabbitmqctl add_vhost {vhost}命令创建一个新的vhost,大括号里的参数表示vhost的名称。示例如下:

[root@node1 ~]# rabbitmqctl add_vhost vhost1
Creating vhost "vhost1"
 ```
可以使用rabbitmqctl list_vhosts [vhostinfoitem...]来罗列当前vhost的相关信息。目前vhostinfoitem的取值有2个:

  1. name:表示vhost的名称。
  2. tracing:表示是否使用了RabbitMQ的trace功能。有关trace功能,详细可以参考10.1章节。

示例如下:
 ```
[root@node1 ~]# rabbitmqctl list_vhosts name tracing
Listing vhosts
vhost1      false
/       false
[root@node1 ~]# rabbitmqctl trace_on
Starting tracing for vhost "/"
[root@node1 ~]# rabbitmqctl list_vhosts name tracing
Listing vhosts
vhost1      false
/       true

对应的删除的vhost的命令是:rabbitmqctl delete_vhost {vhost},其中大括号里面的参数表示vhost的名称。删除一个vhost同时也会删除其下所有的队列、交换器、绑定关系、用户权限、参数以及策略等信息。示例如下:

[root@node1 ~]# rabbitmqctl delete_vhost vhost1
Deleting vhost "vhost1"
[root@node1 ~]# rabbitmqctl list_vhosts
Listing vhosts

AMQP协议中并没有指定权限在vhost级别还是在服务器端级别实现,由具体的应用自定义。在RabbitMQ中,权限控制则是以vhost为单位的。当创建一个用户时,用户通常会被指派给至少一个vhost,并且只能访问被指派vhost内的队列、交换器以及绑定关系。因此,RabbitMQ中的授予权限是指在vhost级别对用户而言的权限授予。

相关的授予权限命令为:rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}。其中各个参数的含义为:

  1. vhost:授予用户访问权限的vhost名称,可以缺省,即vhost为”/”。
  2. user:可以访问指定vhost的用户名称。
  3. conf:一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。
  4. write:一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。
  5. read:一个用于匹配用户在哪些资源上有用可读权限的正则表达式。

注:可配置指的是队列和交换器的创建以及删除之类的操作;可写指的是发布消息;可读指与消息有关的操作,包括读取消息以及清空整个队列等。

授予用户root可访问虚拟主机vhost1,并在所有资源上都具备可配置、可写以及可读的权限。示例如下:

[root@node1 ~]# rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost1"

授予用户root可访问虚拟主机vhost2,在以“queue”开头的资源上具备可配置权限,并在所有资源上拥有可写、可读的权限,示例如下:

[root@node1 ~]# rabbitmqctl set_permissions -p vhost2 root "^queue.*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost2"

清除权限也是在vhost级别对用户而言的清除权限。清除权限的命令为:rabbitmqctl clear_permissions [-p vhost] {username}。其中vhost用于设置禁止用户访问的虚拟主机的名称,默认为“/”;username表示禁止访问特定虚拟主机的用户名称。示例如下:

[root@node1 ~]# rabbitmqctl clear_permissions -p vhost1 root
Clearing permissions for user "root" in vhost "vhost1"

在RabbitMQ中有两个shell命令可以列举权限信息。第一个命令是:rabbitmqctl list_permissions [-p vhost],用来显示虚拟主机上的权限;第二个命令是:rabbitmqctl list_user_permissions {username},用来显示用户的权限。示例如下:

[root@node1 ~]# rabbitmqctl list_permissions -p vhost1
Listing permissions in vhost "vhost1"
root .*      .*      .*
[root@node1 ~]# rabbitmqctl list_user_permissions root
Listing permissions for user "root"
/       .*      .*      .*
vhost1      .*      .*      .*

细心的读者可能会注意到本章节中用到的所有命令都是rabbitmqctl工具的扩展命令,rabbitmqctl工具是用来管理RabbitMQ中间件的命令行工具,它通过连接各个RabbitMQ节点来执行所有操作。如果有节点没有运行,将会显示诊断信息、不能到达,或因不匹配的Erlang cookie(有关Erlang cookie的细节可以参考7.1章节)而拒绝连接。rabbitmqctl工具的标准语法如下:

rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]

[-n node]
默认节点是”rabbit@hostname”,此处的hostname是主机名称。在一个名为”node.hidden.com”的主机上, RabbitMQ Erlang node 的节点名称通常是rabbit@node (除非RABBITMQ_NODENAME参数在启动时设置了非默认值)。 hostname -s 的输出通常是”@” 标志后的东西。
[-q]
使用-q标志来启用quiet模式,这样可以屏蔽一些消息的输出。 默认不开启quiet模式。
[-t timeout]
操作超时时间(秒为单位)。只适用于“list”类型的命令。 默认是无穷大。
下面来演示下[-q]和[-t timeout]参数的用法和效果:

[root@node1 ~]# rabbitmqctl list_vhosts
Listing vhosts
/
[root@node1 ~]# rabbitmqctl list_vhosts -q
/
[root@node1 ~]# rabbitmqctl list_vhosts -q -t 1
/
[root@node1 ~]# rabbitmqctl list_vhosts -q -t 0
Error: {timeout,0.0}
时间: 2024-09-19 09:24:58

RabbitMQ管理(1)——多租户与权限的相关文章

RabbitMQ管理(3)——Web端管理

前面讲述的都是使用rabbitmqctl工具来管理RabbitMQ,有些时候你是否会觉得这种方式是不是不太友好?而且为能够运行rabbitmqctl工具,当前的用户需要拥有访问Erlang cookie的权限,由于服务器可能是以guest或者rabbit用户身份来运行的,因此你需要获得这些文件的访问权限,这样就引申出来一些权限管理的问题. RabbitMQ的开发团队也考虑到了这种情况,并且开发了RabbitMQ management插件.RabbitMQ management插件同样是由Erla

从分布式管理到多租户实现,企业级大数据系统如何利用开源生态构建?

大数据系统的应用领域 首先回顾一下历史. 从中我们可以看到一些趋势,在大数据生态发展的过程中,大数据系统的管理系统,大数据系统的安全,易用性,机器学习不断的补充到生态系统中来并不断完善. 早期是 Google 一家独有.2003 GFS paper 发表的时候,Google 的集群规模就达到上千台,遥遥领先. 之后是大家都知道的历史,Doug Cutting 在为他的 lucene 分布式化的时候看到了 Google 的这篇论文,并把它实现出来,后来被 Yahoo 收编,得到一个机会和环境把 H

公司管理名下多个子公司权限设计

问题描述 公司管理名下多个子公司权限设计 一个公司有多个子公司,想实现 一个超级管理员 可以分配所有公司的权限 ,然后一个系统管理员 可以 分配当前自己子公司的 权限 然后 还有一个当前部门管理员 可以分配当前部门的权限!他们相当于一个 树形的管理关系 如图: 这样的一个概念 (http://img.ask.csdn.net/upload/201509/27/1443324339_593833.png) 麻烦有好的思路 给一个 解决方案 权限管理设计权限管理设计(一)权限管理设计一 解决方案二:

springBoot+springSecurity 数据库动态管理用户、角色、权限

  使用spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器, 并分别实现Acce

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装       (5):前台Jquery easyUI实现   (6):EF上下文实例管理    (7):DBSession的封装   (8):DBSession线程内唯一       (9):

RabbitMQ管理(2)——用户管理

在RabbitMQ中,用户是访问控制(Access Control)的基本单元,且单个用户可以跨越多个vhost进行授权.针对一至多个vhost,用户可以被赋予不同级别的访问权限,并使用标准的用户名和密码来认证用户. 创建用户的命令为:rabbitmqctl add_user {username} {password}.其中username表示要创建的用户名称:password表示创建用户登录的密码.具体创建一个用户名为root.密码为root123的用户: [root@node1 ~]# ra

RabbitMQ管理(4)——应用管理

本文主要阐述应用与集群相关的一些操作管理命令,包括关闭.重置.开启服务,还有建立集群的一些信息.有关集群搭建更多的信息可以参考RabbitMQ的安装及集群搭建方法. rabbitmqctl stop [pid_file] 用于停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用.如果指定了pid_file,还需要等待指定进程的结束.其中pid_file是通过调用rabbitmq-server启动RabbitMQ服务时创建的,默认情况下存放于Mnesia目录中,可以通过RABBI

联想乐檬K3手机权限怎么管理 乐檬K3手机权限管理方法

这个应用管理权限手机自带了,我们只要按下面的来操作就可以了. 1.我们打开手机之后我们点击"乐安全"之后找到"隐私保护"然后打开进入 2.之后我们找到"应用权限管理"打开进入,细节如下图所示 3.然后我们点击 管理中我们可以看到很多权限,这些权限都是应用常提项 如图所示 4.然后我们可以找到下面的 一项或多项,将其全部取消 具体如下图所示 好了到了这里关于乐檬K3管理权限就介绍完了,希望文章可以帮助到各位朋友的哦.

RabbitMQ管理(5)——集群管理

rabbitmqctl join_cluster {cluster_node} [–ram] 将节点加入指定集群中.在这个命令执行前需要停止RabbitMQ应用并重置节点.更多详细内容请参考RabbitMQ安装. rabbitmqctl cluster_status 显示集群的状态.更多详细内容请参考RabbitMQ安装. rabbitmqctl change_cluster_node_type {disc|ram} 修改集群节点的类型.在这个命令执行前需要停止RabbitMQ应用.更多详细内容