目的:解决指定用户连接和对主题的发布与订阅权限控制。
实施方案:
2.1、emq服务器默认是可匿名连接,关闭匿名连接 找到/emqttd/etc/emq.conf 配置文件,将mqtt.allow_anonymous = false。
2.2、客户端连接认证,使用emq服务器自带emqx_auth_mysql:MySQL认证/访问控制插件进行认证。具体实现如下:
2.2.1、新建mqtt库,建立mqtt_user表(用户)、mqtt_acl表(权限),用户表是用来指定哪些用户能连接emq服务器,权限表是用来控制用户的行为(哪些用户能对哪些主题进行发布或订阅)。
mqtt_acl表
CREATE TABLE `mqtt_acl` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`allow` int(1) DEFAULT NULL COMMENT '0:否, 1:是,备注:是否允许
`ipaddr` varchar(60) DEFAULT NULL COMMENT 'IpAddress',备注:IP地址
`username` varchar(100) DEFAULT NULL COMMENT 'Username',备注:用户名
`clientid` varchar(100) DEFAULT NULL COMMENT 'ClientId',备注:客户端id
`access` int(2) NOT NULL COMMENT '1:订阅, 2:发布,备注:发布与订阅
`topic` varchar(100) NOT NULL DEFAULT '' COMMENT 'Topic Filter',备注:主题过滤器
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.2.2、找到/emqttd/etc/plugins/emq_auth_mysql.conf 配置文件,修改如下配置:
auth.mysql.server = mysql服务器地址,例如:127.0.0.1:3306
auth.mysql.username = mysql登录用户名
auth.mysql.password = mysql登录密码
auth.mysql.database =连接库
Emq服务器管理插件界面配置 管理->插件->emq_auth_mysql 配置。
2.2.3、配置好后重启emq服务器。
2.2.4、在emq数据库中mqtt_user表添加可连接的客户端用户数据、mqtt_acl表添加哪些用户可以发布或订阅哪些主题的数据。