引言
在物联网(IoT)领域,MQTT(Message Queuing Telemetry Transport)协议因其轻量级和高效性而广受欢迎。然而,随着物联网设备的增多,安全性和权限管理成为不可忽视的问题。EMQ X作为一个高性能的MQTT消息服务器,提供了丰富的认证和权限管理功能。本文将详细介绍如何使用EMQ X的认证模块与MySQL数据库集成,实现MQTT用户的权限管理。
EMQ X与MySQL集成概述
EMQ X支持多种认证方式,其中包括基于数据库的认证。通过集成MySQL数据库,可以实现对MQTT客户端连接的认证和访问控制。具体来说,EMQ X的emqx-auth-mysql
插件允许我们使用MySQL存储用户信息和权限数据,从而在客户端连接时进行验证和授权。
环境准备
- 在Ubuntu上,可以通过以下命令安装EMQ X:
sudo apt update sudo apt install emqx
- 安装完成后,启动EMQ X服务:
sudo systemctl start emqx
- 安装MySQL服务器:
sudo apt install mysql-server
- 安装完成后,启动MySQL服务并进行初始配置:
sudo systemctl start mysql sudo mysql_secure_installation
安装EMQ X:
安装MySQL:
配置MySQL数据库
- 登录MySQL数据库:
sudo mysql -u root -p
- 创建数据库和用户表:
CREATE DATABASE mqtt_auth; USE mqtt_auth; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, is_superuser BOOLEAN NOT NULL DEFAULT FALSE );
- 插入一些测试用户:
INSERT INTO users (username, password, is_superuser) VALUES ('user1', 'password1', FALSE); INSERT INTO users (username, password, is_superuser) VALUES ('admin', 'adminpass', TRUE);
创建数据库和用户表:
插入初始用户数据:
配置EMQ X认证模块
- 通过EMQ X命令行工具安装插件:
emqx_ctl plugins install emqx-auth-mysql
- 编辑插件配置文件
/etc/emqx/plugins/emqx_auth_mysql.conf
:auth.mysql.server = 127.0.0.1:3306 auth.mysql.username = root auth.mysql.password = your_mysql_password auth.mysql.database = mqtt_auth auth.mysql.query = SELECT password FROM users WHERE username = '%u'
- 通过命令行启用插件:
emqx_ctl plugins enable emqx-auth-mysql
安装emqx-auth-mysql
插件:
配置插件连接到MySQL数据库:
启用插件:
实现权限管理
- 在MySQL数据库中创建权限表:
CREATE TABLE acls ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL, topic VARCHAR(255) NOT NULL, action VARCHAR(10) NOT NULL, permission INT NOT NULL );
- 插入一些测试权限数据:
INSERT INTO acls (username, topic, action, permission) VALUES ('user1', 'sensor/#', 'subscribe', 1); INSERT INTO acls (username, topic, action, permission) VALUES ('admin', '#', 'publish', 2);
- 编辑插件配置文件,添加权限查询配置:
auth.mysql.acl_query = SELECT action, permission FROM acls WHERE username = '%u' AND topic = '%t'
创建权限表:
插入权限数据:
配置EMQ X权限查询:
测试认证和权限管理
- 使用正确的用户名和密码连接:
mosquitto_sub -h localhost -u user1 -P password1 -t sensor/temperature
- 使用错误的用户名或密码连接:
mosquitto_sub -h localhost -u user1 -P wrongpassword -t sensor/temperature
- 尝试订阅未授权的主题:
mosquitto_sub -h localhost -u user1 -P password1 -t unauthorized/topic
- 尝试发布未授权的主题:
mosquitto_pub -h localhost -u user1 -P password1 -t unauthorized/topic -m "test"
使用MQTT客户端进行连接测试:
测试权限控制:
总结
通过集成EMQ X的emqx-auth-mysql
插件和MySQL数据库,可以有效地实现对MQTT用户的认证和权限管理。本文详细介绍了环境准备、数据库配置、插件配置以及测试方法,帮助读者快速搭建一个安全可靠的MQTT服务。在实际应用中,还可以根据需求进一步扩展和优化权限管理策略,确保物联网系统的安全性和可靠性。
参考文献
- EMQ X官方文档:EMQ X Documentation
- MySQL官方文档:MySQL Documentation
- MQTT协议规范:MQTT Protocol Specification