关于EMQX的MYSQL认证插件使用配置心得

EMQ开源版的MYSQL认证是免费的

重要的事情说三遍EMQX MYSQL认证插件是
免费的
免费的
免费的


1.配置EMQ MYSQL

首先我们要配置emq里的mysql.conf才可以使用MYSQL认证插件
如果是压缩包方法安装的话,就只需要找到我们解压出来的emqx/etc/plugins/emqx_auth_mysql.conf。
在这里插入图片描述
在这里插入图片描述

这里有一份官方给出的MYSQL认证数据库表参考


DROP TABLE IF EXISTS `mqtt_acl`;

CREATE TABLE `mqtt_acl` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `allow` int(1) DEFAULT NULL 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;

LOCK TABLES `mqtt_acl` WRITE;

INSERT INTO `mqtt_acl` (`id`, `allow`, `ipaddr`, `username`, `clientid`, `access`, `topic`)
VALUES
	(1,1,NULL,'$all',NULL,2,'#'),
	(2,0,NULL,'$all',NULL,1,'$SYS/#'),
	(3,0,NULL,'$all',NULL,1,'eq #'),
	(4,1,'127.0.0.1',NULL,NULL,2,'$SYS/#'),
	(5,1,'127.0.0.1',NULL,NULL,2,'#'),
	(6,1,NULL,'dashboard',NULL,1,'$SYS/#');

UNLOCK TABLES;


DROP TABLE IF EXISTS `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=MyISAM DEFAULT CHARSET=utf8mb4;


配置完了之后就可以启动MYSQL认证了,登录18083端口的仪表盘。
在这里插入图片描述
启动成功就说明我们的MYSQL配置成功。
没有成功的原因可能有以下:
1.auth.mysql.username和auth.mysql.password 这两个配置字段前面的#号没去掉。
2.URL地址错误
3.3306数据库端口没有开
4.防火墙 或者云服务器安全组


2.测试连接认证

在数据库的mqtt_user中添加一条数据
在这里插入图片描述
然后我们使用官方的MQTTX工具测试连接
在这里插入图片描述
测试连接
在这里插入图片描述

为什么会这样呢,照常说应该是可以的呀,看回emqx_auth_mysql.conf。

在这里插入图片描述

可以看到这里的密码加密方式是sha256,说明我们连接时候的密码是加密后才与数据库内的password字段的值做匹配

这里我们可以改成plain明文不加密,又或者我们可以把数据库的字段改成sha256加密后的字段

这里我选择改成plain不加密
在这里插入图片描述
重启一下mysql认证插件。

在这里插入图片描述


3.测试ACL权限控制

来到ACL权限控制,使用到数据库mqtt_acl数据表。这里引用官方文档关于表内字段的说明

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


我们想限制一个叫admin的用户只能订阅123/#的主题,应该怎么做呢

1.我们在数据表添加一个数据
在这里插入图片描述
这条数据可以解读为:我们要允许admin用户订阅123/#的主题

连接上之后我们发现 admin用户 可以关注随便一个主题
在这里插入图片描述
这里就是存在误解的地方
ACL认证在遍历时是按照顺序来做遍历的,我这里设置为允许他订阅,实际上相当于没有设置。他的关系图如下。

在这里插入图片描述

我们应该是先把admin用户所有的订阅关上,再打开admin用户的123/#主题订阅权限。

关系图应该是像下图一样
在这里插入图片描述

那么我们在数据表订阅123/#之前添加一个关闭的语句
在这里插入图片描述

这样就完成了admin用户只能订阅123/#的主题的要求

在这里插入图片描述
在这里插入图片描述


**

有遇到问题可以私信,24小时内必回

**

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
EMQ X 支持使用 MySQL 进行认证,具体配置步骤如下: 1. 安装 MySQL 和 Python 的 MySQL 驱动程序 2. 创建 EMQ X 所需的数据库和数据表,可以使用以下 SQL 语句: ```sql CREATE DATABASE emqx_auth; USE emqx_auth; CREATE TABLE mqtt_user ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(100) NOT NULL, password VARCHAR(100) NOT NULL, is_superuser BOOL NOT NULL DEFAULT FALSE, PRIMARY KEY (id), UNIQUE KEY mqtt_user_username_uindex (username) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE mqtt_acl ( id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, allow INT(1) NOT NULL DEFAULT 1, ipaddr VARCHAR(60) NOT NULL DEFAULT '', username VARCHAR(100) NOT NULL, clientid VARCHAR(100) NOT NULL, access INTEGER(2) NOT NULL, topic VARCHAR(256) NOT NULL, PRIMARY KEY (id), KEY mqtt_acl_username_clientid_topic_uindex (username,clientid,topic) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ``` 3. 配置 EMQ X,编辑 emqx.conf 文件,将 auth.acl.auth_mysql 和 auth.user.auth_mysql 配置为 true,同时配置数据库连接信息,例如: ```conf auth.user.auth_mysql = on auth.user.mysql.server = 127.0.0.1:3306 auth.user.mysql.username = root auth.user.mysql.password = root auth.user.mysql.database = emqx_auth auth.user.mysql.pool = 8 auth.acl.auth_mysql = on auth.acl.mysql.server = 127.0.0.1:3306 auth.acl.mysql.username = root auth.acl.mysql.password = root auth.acl.mysql.database = emqx_auth auth.acl.mysql.pool = 8 ``` 4. 重启 EMQ X,使配置生效。 注意:以上配置仅供参考,实际配置应根据具体情况进行调整。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值