EMQ客户端连接认证的配置教程
1、MySQL 认证是较为常用到的EMQ认证方式,其可存储大量数据,方便与外部设备管理系统集成。所使用的插件为emqx_auth_mysql注:emqx_auth_mysql 插件同时包含 ACL 功能,可通过注释禁用。

3、在所配置的数据库中(auth.mysql.database项),创建mqtt_user表CREATE TABLE `mqtt_user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL, `password` varchar(100) DEFAULT NULL, `salt` varchar(35) DEFAULT NULL, `is_superuser` tinyint(1) DEFAULT 0, `created` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `mqtt_username` (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

6、在数据库中添加ACL 规则表CREATE TABLE `mqtt_acl` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `allow` int(1) DEFAULT 1 COMMENT '0: deny, 1: allow', `ipaddr` varchar(60) DEFAULT NULL COMMENT 'IpAddress', `username` varchar(100) DEFAULT NULL COMMENT 'Username', `clientid` varchar(100) DEFAULT NULL COMMENT 'ClientId', `access` int(2) NOT NULL COMMENT '1: subscribe, 2: publish, 3: pubsub', `topic` varchar(100) NOT NULL DEFAULT '' COMMENT 'Topic Filter', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
7、ACL表配置的示例数据:

8、ACL规则表字段说明:allow:禁止(0),允许(1)ipaddr:设置 IP 地址username:连接客户端的用户名,此处的值如果设置为$all表示该规则适用于所有的用户clientid:连接客户端的 Client IDaccess:允许的操作:订阅(1),发布(2),订阅发布都可以(3)topic:控制的主题,可以使用通配符,并且可以在主题中加入占位符来匹配客户端信息,例如t/%c则在匹配时主题将会替换为当前客户端的 Client ID%u:用户名%c:Client ID