我有一个用例,我需要创建一个用户并授予他仅在现有队列上发布/订阅的权限,这是一个示例:
- 虚拟主机“mainvhost”(对于所有用户都相同)
- 在虚拟主机内,我有 A-foo 和 Q-bar 队列
- 用户“foo”只能发布/订阅到 Q-foo
- 用户“bar”只能发布/订阅到Q-bar
我没有办法设置这样的用户管理策略,我发现的唯一方法是为每个用户创建一个虚拟主机,这样,用户将在自己的虚拟主机中拥有完全访问权限,但有一个很大的缺点:我有一个消费者应用程序订阅所有队列并等待用户输入,如果每个用户都有自己的虚拟主机,那么我需要每个虚拟主机有 1 个消费者,因为我没有办法使用与rabbitmq 的相同连接从多个虚拟主机进行消费。
澄清一点:您应该发布到交换器,并订阅队列。话虽这么说,您可能需要一个“ex-foo”和“ex-bar”来进行交换……基本上每个用户一个。可以用不同的方式来完成,但这会起作用。
添加权限时,可以使用正则表达式来设置允许用户执行的操作。
例如,使用rabbitmqctl 命令行 https://www.rabbitmq.com/man/rabbitmqctl.1.man.html要设置权限,您可以这样做:
rabbitmqctl set_permissions -p /myvhost tonyg "^tonyg-.*" ".*" ".*"
此命令指示 RabbitMQ 代理向名为 tonyg 的用户授予对名为 /myvhost 的虚拟主机的访问权限,并对名称以“tonyg-”开头的所有资源具有配置权限,并对所有资源具有写入和读取权限。
注意,三个“引号”中的权限顺序是:配置、写入、读取。
在您的情况下,您需要像这样设置权限:
- 虚拟主机:主虚拟主机
- 用户: foo
- 配置: ””
- 写:“^[ex-foo|Q-foo].*”
- 读:“^[ex-foo|Q-foo].*”
这将授予权限foo
用户可以读取和写入任何以以下开头的交换器或队列ex-foo
or Q-foo
您也许可以摆脱更严格的限制,例如
- 写:“^ex-foo.*”
- 读:“^Q-foo.*”
我不确定通过交换发布时是否需要对队列的写入权限。我还没有必要在安全性中设置这种粒度级别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)