访问控制客户端授权启动后,未在库中的用户可以连接

1、emqx5.3
2、访问控制中客户端认证开启mysql数据库的password_based认证
3、对应鉴权表中添加一个测试用户
4、使用测试用户连接,密码错误时会提示并且连接不上
5、使用其他表中没有的用户连接,直接可以连接上

按道理说鉴权表中没有的用户不应该可以连接的吧,应该先判定有没有,再判定用户名、密码、客户ID这些。

需要关闭匿名访问吧,不然随便一个不在认证库中的用户名或者空白名都可以。
我们好像也遇到过

可否告知下5.3版本中怎么关闭匿名访问? :joy:之前4.x版本中是在配置文件中修改,5.3的配置文件中找不到对应配置了。

5.0 开始已经移除了允许匿名 allow_anonymous 的配置。所以不需要配置的。

5.0 目前的认证逻辑是,如果没有任何的登陆认证功能开启,那就是允许任何用户链接;如果开启了任何登陆认证器,那只有用户不对都不能登录(包括,密码不对,用户不存在等情况)

所以,从你的现象看,应该是不符合我们预期的。所以需要

  1. 帮忙提供该客户端的追踪日志 日志追踪 (Trace) | EMQX 企业版文档
  2. 关于认证的所有配置

问题得到解决了,应该是我exhook 注册了client.connect相关钩子,虽然啥都没做就返回了,但是这个导致虽然配置了mysql库的登陆认证,可是不在库中的客户端用户依然可以连接,库中用户连接如果密码不对无法连接的情况