emq_auth_mysql: MySQL 认证/访问控制插件

本文介绍如何使用EMQ MQTT Broker与MySQL数据库结合,实现用户认证和访问控制。详细展示了MySQL用户表和访问控制表的创建过程,以及如何配置EMQ插件进行鉴权。

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/wangshuminjava/article/details/80579883

emq_auth_mysql: MySQL 认证/访问控制插件

MySQL 认证/访问控制插件,基于 MySQL 库表认证鉴权: https://github.com/emqtt/emq-auth-mysql

MQTT 用户表

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

注解

MySQL 插件可使用系统自有的用户表,通过 ‘authquery’ 配置查询语句。

MQTT 访问控制表

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;

INSERT INTO </span><span class="n">mqtt_acl</span><span class="o" style="color:rgb(102,102,102);"> (</span><span class="n">id</span><span class="o" style="color:rgb(102,102,102);">, </span><span class="n">allow</span><span class="o" style="color:rgb(102,102,102);">, </span><span class="n">ipaddr</span><span class="o" style="color:rgb(102,102,102);">, </span><span class="n">username</span><span class="o" style="color:rgb(102,102,102);">, </span><span class="n">clientid</span><span class="o" style="color:rgb(102,102,102);">, </span><span class="k" style="color:rgb(0,112,32);font-weight:bold;">access</span><span class="o" style="color:rgb(102,102,102);">, </span><span class="n">topic</span><span class="o" style="color:rgb(102,102,102);">)
VALUES
(1,1,NULL,KaTeX parse error: Expected 'EOF', got '#' at position 261: …64,112,160);">'#̲'</span><span c…all’,NULL,1,KaTeX parse error: Expected 'EOF', got '#' at position 5: SYS/#̲'</span><span c…all’,NULL,1,‘eq #’),
(5,1,‘127.0.0.1’,NULL,NULL,2,KaTeX parse error: Expected 'EOF', got '#' at position 5: SYS/#̲'</span><span c…SYS/#’);

配置 MySQL 认证鉴权插件

etc/plugins/emq_auth_mysql.conf:

## Mysql Server
auth.mysql.server = 127.0.0.1:3306

## Mysql Pool Size
auth.mysql.pool = 8

## Mysql Username
## auth.mysql.username =

## Mysql Password
## auth.mysql.password =

## Mysql Database
auth.mysql.database = mqtt

## Variables: %u = username, %c = clientid

## Authentication Query: select password only
auth.mysql.auth_query = select password from mqtt_user where username = ‘%u’ limit 1

## Password hash: plain, md5, sha, sha256, pbkdf2
auth.mysql.password_hash = sha256

## %% Superuser Query
auth.mysql.super_query = select is_superuser from mqtt_user where username = ‘%u’ limit 1

## ACL Query Command
auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = ‘%a’ or username = ‘%u’ or username = ‘$all’ or clientid = ‘%c’

加载 MySQL 认证鉴权插件

./bin/emqttd_ctl plugins load emq_auth_mysql


### 关于 EMQX 使用 MySQL 进行身份验证的配置与实现 EMQX 是一种高性能的消息中间件,支持多种协议(如 MQTT),并提供了灵活的身份验证机制。通过使用 MySQL 数据库作为后端存储来管理用户认证信息,可以增强系统的安全性和可扩展性。 以下是有关如何配置 EMQX 使用 MySQL 的详细说明: #### 1. 准备工作 为了使 EMQX 能够连接到 MySQL 并执行查询操作,需确保以下条件已满足: - 已安装并运行 MySQL 数据库服务[^2]。 - 创建用于存储用户的数据库表结构。例如,创建一个名为 `emqx_auth` 的表,其中包含字段 `username`, `password_hash` 和其他必要的元数据列。 ```sql CREATE TABLE emqx_auth ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password_hash CHAR(64) NOT NULL -- 假设密码被哈希处理成固定长度字符串 ); ``` #### 2. 下载必要插件 如果尚未启用 SQL 认证功能,则需要加载相应的官方插件 `emq_auth_mysql` 或者自定义开发适配器。可以通过命令行工具激活它: ```bash ./bin/emqx_ctl plugins load emq_auth_mysql ``` 此步骤会启动内置的支持模块以便后续参数调整[^3]。 #### 3. 修改配置文件 编辑位于 `$EMQX_HOME/etc/` 目录下的 `emqx.conf` 文件,添加或者修改如下选项以指定目标 RDBMS 实例的位置及其访问凭证: ```properties auth.mysql.server = localhost:3306 # 替换为目标服务器地址及端口号组合形式 auth.mysql.username = root # 登录用户名,默认为 'root' auth.mysql.password = LuckyNumber234 # 对应账户关联的秘密密钥串值 auth.mysql.database = testdb # 所属逻辑单元名称即 schema 名称 auth.mysql.hash_algorithm = sha256 # 可选加密算法类型;这里采用 SHA-256 方式保护敏感资料传输过程中的安全性等级提升措施之一 auth.mysql.auth_query = SELECT password FROM emqx_auth WHERE username = '%u' LIMIT 1; # 动态构建检索语句模板用来匹配请求发起方提交过来的有效负载部分所携带的信息项内容 ``` 上述设置中每条记录都对应特定含义,并且能够相互协作完成整个流程链路闭环设计思路清晰明了易于维护升级迭代周期短等特点突出表现出来[^1]。 #### 4. 测试环境有效性 重启 broker 后即可生效新的策略规则集应用范围覆盖全局默认情况下无需额外干预即可正常运作起来。此时可通过尝试发送带有不同凭据组合的数据包至代理节点上来检验实际效果是否达到预期标准水平线上生产环境中建议进一步优化性能指标监控报警机制等方面综合考量整体解决方案质量高低评判依据更加全面合理科学严谨的态度对待每一次技术决策制定环节当中去实践探索未知领域前沿地带不断突破自我极限追求卓越品质始终是我们不懈努力奋斗方向所在之处! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值