emqx使用mysql完成用户密码验证和ACL鉴权

前几篇博客用配置文件配置ACL和客户端用户名密码实现安全登录和权限控制,配置繁琐。本文介绍在Linux的CentOS 7环境下,使用Docker运行emqtt服务器,通过MySQL进行统一管理控制,包括配置连接、建表、插入鉴权及账号密码数据等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:前几篇博客介绍的是使用配置文件配置了ACL和客户端用户名密码配置实现生产环境下的安全登录和权限控制,各项配置比较繁琐,修改起来比较麻烦,下面介绍使用mysql进行统一的管理控制。

环境说明:

       1.linux系统下,centos 7环境

       2.使用docker运行emqtt服务器,参照:https://blog.youkuaiyun.com/u011089760/article/details/89892591

       3.进入docker方式,参照:https://blog.youkuaiyun.com/u011089760/article/details/89892591

       4.MySQL版本:5.6+

1)配置mysql连接配置

 

  1. 加载mysql权限插件

如果无法加载,可以通过界面配置的方式进行插件的配置和启动

 

  1. mysql数据库建表

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=utf8;

CREATE TABLE `mqtt_user`

( `id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`username` varchar(100) DEFAULT NULL,

`password` varchar(100) DEFAULT NULL,

`salt` varchar(20) DEFAULT NULL,

`is_superuser` tinyint(1) DEFAULT 0,

`created` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `mqtt_username` (`username`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

  1. 插入ACL鉴权及用户登录账号密码数据数据

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 #'),

    (5,1,'127.0.0.1',NULL,NULL,2,'$SYS/#'),

    (6,1,'127.0.0.1',NULL,NULL,2,'#'),

(7,1,NULL,'dashboard',NULL,1,'$SYS/#');

 

 

如果is_superuser是1的话,acl中的控制将不受限制

如配置遇到问题或其他技术相关,可以留言

### EMQX 中注册设备的方法 在 EMQX 的实际应用中,通常不会直接提供内置的功能来管理设备的注册流程。相反,这种功能可以通过外部认证机制或者插件扩展的方式实现。以下是关于如何在 EMQX完成设备注册的一些方法: #### 方法一:基于用户名/密码的身份验证 EMQX 支持多种身份验证方式,其中一种常见的方式是通过用户密码进行认证。为了确保只有已注册的设备能够连接到 MQTT Broker,可以配置 EMQX 使用数据库或其他存储服务保存设备的凭据。 1. **启用内部数据库认证** 配置文件 `etc/emqx.conf` 或者通过 Web 控制台设置如下参数: ```bash auth.username.enable = true ``` 此外,在内部数据库中手动添加设备账户及其对应的密码[^1]。 2. **使用外部数据库认证** 如果需要更灵活的数据管理更高的性能,可以选择 MySQL、PostgreSQL 等关系型数据库作为后端存储。具体操作包括: - 修改配置文件中的 SQL 查询语句以匹配表结构; - 将设备信息预先录入至指定表格中以便后续校验。 示例代码片段展示如何定义 PostgreSQL 用户名查询模板: ```sql select password from mqtt_user where username = '%u' ``` #### 方法二:借助插件开发自定义逻辑 对于更加复杂的场景需求(比如动态创建新用户),推荐利用官方提供的 Hook 插件框架来自行编写业务处理程序。例如,“emq_auth_http”允许开发者调用 RESTful API 接口完成整个过程;而 “emq_dashboard” 则提供了图形化界面方便管理员在线维护资源对象列表[^3]。 需要注意的是,上述提到的所有方案均依赖于提前准备好的合法凭证集合——即所谓的“预注册”。因此,在正式部署之前务必规划好相应的管理体系并严格执行访问控制策略[^2]。 ```python import requests def register_device(device_id, secret_key): url = "http://your-emqx-server/api/v4/auth" payload = {"username": device_id, "password": secret_key} headers = {'Content-Type': 'application/json'} response = requests.post(url, json=payload, headers=headers) return response.status_code == 200 ``` 以上 Python 函数演示了向支持 HTTP 认证模式下的 EMQX 实例提交新增请求的过程。 问题
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值