千家信息网

基于MySQL的EMQ X Auth & ACL怎么使用

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要讲解了"基于MySQL的EMQ X Auth & ACL怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"基于MySQL的EMQ X
千家信息网最后更新 2025年01月23日基于MySQL的EMQ X Auth & ACL怎么使用

这篇文章主要讲解了"基于MySQL的EMQ X Auth & ACL怎么使用",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"基于MySQL的EMQ X Auth & ACL怎么使用"吧!

emqx-auth-mysql 它通过检查每个终端接入的 usernamepassword 是否与用户指定 的 MySQL 数据库中存储的信息一致来实现对终端的访问控制。其功能逻辑如下:

本文假设 MySQL 已经安装在您的机器上,并且您可以连接到 MySQL 服务器。注:EMQ X 开源版至 v3.1-beta.2 为止,尚不支持 MySQL 8.0,因此以下内容仅适用于 MySQL 5.7 及以下版本。

$ mysql --versionmysql  Ver 14.14 Distrib 5.7.25, for macos10.14 (x86_64) using  EditLine wrapper

插件配置项说明

mqtt.sql

emqx-auth-mysql 提供了 mqtt.sql 文件帮助用户快速创建数据表以及导入默认数据。mqtt.sql 将会为 mqtt_acl 数据表导入以下默认规则:

mysql> select * from mqtt_acl;+----+-------+-----------+-----------+----------+--------+--------+| id | allow | ipaddr    | username  | clientid | access | topic  |+----+-------+-----------+-----------+----------+--------+--------+|  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/# |+----+-------+-----------+-----------+----------+--------+--------+6 rows in set (0.00 sec)

allow - 1: allow; 0: deny

access - 1: subscribe; 2: publish; 3: publish and subscribe

以上规则分别表示:

  • 允许任何用户发布除以 '$' 字符开头以外的任何主题的消息

  • 拒绝任何用户订阅任何以 "$SYS/" 开头的主题

  • 拒绝任何用户订阅 "#" 主题

  • 允许本机用户发布任何以 "$SYS/" 开头的主题

  • 允许本机用户发布发布除以 '$' 字符开头以外的任何主题的消息

  • 允许 dashboard 用户订阅任何以 "$SYS/" 开头的主题

除此之外,用户可以导入自定义的 ACL 规则。

Auth 与 ACL 功能验证
  1. Mac 环境安装 mosquitto

    brew install mosquitto

  2. 创建数据库,导入数据

    mqtt.sql 路径可根据实际情况自行改动

    mysql> create database mqtt;mysql> use mqtt;mysql> source ./emqx_auth_mysql/mqtt.sqlmysql> insert into mqtt_user (id, is_superuser, username, password, salt)    -> values (1, false, 'test', 'password', 'salt');mysql> insert into mqtt_acl (id, allow, ipaddr, username, clientid, access, topic)    -> values (7, 0, NULL, 'test', NULL, 1, 'mytopic');mysql> exit;


  3. 修改配置文件

    禁止匿名访问:

    ## .../etc/emqx.confallow_anonymous = false


    配置数据库中密码的加密方式为 plain ,即不加密:

    ## .../etc/plugins/emqx_auth_mysql.confauth.mysql.password_hash = plain


    配置要访问的数据库以及用户名密码:

    ## .../etc/plugins/emqx_auth_mysql.confauth.mysql.username = rootauth.mysql.password = publicauth.mysql.database = mqtt


  4. 启动 EMQ X 与 emqx-auth-mysql

    $ ./_rel/emqx/bin/emqx startemqx 3.1 is started successfully!$ ./_rel/emqx/bin/emqx_ctl plugins load emqx_auth_mysql


  5. 测试

    1. 使用正确的用户名和密码进行连接,并订阅 "topic" 主题

      $ mosquitto_sub -p 1883 -u test -P password -t 'topic' -dClient mosqsub|91114-zhouzibod sending CONNECTClient mosqsub|91114-zhouzibod received CONNACKClient mosqsub|91114-zhouzibod sending SUBSCRIBE (Mid: 1, Topic: topic, QoS: 0)Client mosqsub|91114-zhouzibod received SUBACKSubscribed (mid: 1): 0


      现象:连接并订阅成功

    2. 使用错误的用户名或密码进行连接,并订阅 "topic" 主题

      $ mosquitto_sub -p 1883 -u bad_user -P password -t 'topic' -dClient mosqsub|91136-zhouzibod sending CONNECTClient mosqsub|91136-zhouzibod received CONNACKConnection Refused: not authorised.


      现象:连接被拒绝

    3. 使用正确的用户名和密码进行连接,并订阅 "#" 主题

      $ mosquitto_sub -p 1883 -u test -P password -t '#' -dClient mosqsub|11257-zhouzibod sending CONNECTClient mosqsub|11257-zhouzibod received CONNACKClient mosqsub|11257-zhouzibod sending SUBSCRIBE (Mid: 1, Topic: #, QoS: 0)Client mosqsub|11257-zhouzibod received SUBACKSubscribed (mid: 1): 128


      现象:连接成功,订阅失败,原因码128

    4. 使用正确的用户名和密码进行连接,并订阅 "mytopic" 主题

      $ mosquitto_sub -p 1883 -u test -P password -t 'mytopic' -dClient mosqsub|13606-zhouzibod sending CONNECTClient mosqsub|13606-zhouzibod received CONNACKClient mosqsub|13606-zhouzibod sending SUBSCRIBE (Mid: 1, Topic: mytopic, QoS: 0)Client mosqsub|13606-zhouzibod received SUBACKSubscribed (mid: 1): 128


      现象:连接成功,订阅失败,原因码128

感谢各位的阅读,以上就是"基于MySQL的EMQ X Auth & ACL怎么使用"的内容了,经过本文的学习后,相信大家对基于MySQL的EMQ X Auth & ACL怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

用户 主题 订阅 数据 密码 开头 用户名 数据库 现象 配置 成功 内容 规则 学习 功能 原因 字符 情况 数据表 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库关系图 国家安全教育日之网络安全 怎么让数据库列非负数 网络安全主题团课有哪些环节 知乎电子科技大学互联网 2020年王者服务器 qq服务器会存我们的聊天记录吗 统一战线网络安全工作 云服务器1元钱中标 我国数据库技术发展现状 企业零售系统使用的数据库类型 网络安全部职能 学籍管理软件开发 宁河区蓝银草网络技术 麻醉机软件开发 完美世界服务器安全吗 更改游戏服务器列表连接区IP 服务器配置参数要求 淘宝采用的网络安全协议 服务器插上无线网卡启用不了 永擎服务器主板卡在系统初始化 歇羽互联网科技有限公司 武汉财务软件开发流程 微软资深软件开发测试工程师 产品需要了解数据库字段不 汇川的嵌入式软件开发工作好吗 软件开发流程的内控点 数据库管理系统设计报告 游戏技术和数据库有关系吗 廊坊市乐乐虫网络技术有限公司
0