从EMQ4向EMQ5升级迁移时,原mysql访问授权表中的$all失效了吗?

有这样一个权限控制需求:每个用户对自己用户名开头的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 的方式实现

非感感谢。
:handshake: