有这样一个权限控制需求:每个用户对自己用户名开头的topic都具有pub和sub的权限。比如:
用户user001对 user001/#
的主题都有pub和sub的权限,但不能访问别的主题 ;
用户user005对 user005/#
的主题都有pub和sub的权限,但不能访问别的主题 ;
基于以上需求,在EMQX4时,在数据库中插入一条记录,就能解决
allow username access topic
1 $all 3 %u/#
但是在EMQX5的表里,我们尝试这样设置,但是无效
username permission action topic
$all allow all ${username}/#
请问如何在EMQX5中满足此种需求,望答复!感谢
数据库中插入:
+----------+-------------+---------+-----------------+
| username | permission | action | topic |
+----------+-------------+---------+-----------------+
| $all | allow | all | ${username}/# |
+----------+-------------+---------+-----------------+
需要相应地改变 sql 模板中的 when 语句为
SELECT ... FROM ... WHEN username = $all
此外,这个需求可以通过 authz file 简单实现:
任意用户名(通过正则匹配 ^.*$
) 均可以订阅以它自己用户名开头的主题 ${username}/#
,并 deny 其他所有 sub/pub 的 authz 请求。
{allow, {username, {re, "^.*$"}}, all, ["${username}/#"]}.
{deny, all}.
1 个赞
改变 sql 模板中的 when 语句为
SELECT action, permission, topic FROM mqtt_acl where username = $all
点击更新后,状态一直是“连接中”,而且权限不可用了。另外在客户端授权配置–MySQL–设置页的SQL的输入框里,可以填多条sql语句吗?多条间用什么符号隔开。如果只能填一条,会不会影响其它username不是$all的用户配置呢?
最终按照提供的 authz file 的方式实现
非感感谢。