基于 PostgreSQL 的 EMQ X Auth ACL
emqx-auth-pgsql 它通过检查每个终端接入的 username 和 password 是否与用户指定 的 PostgreSQL 数据库中存储的信息一致来实现对终端的访问控制。其功能逻辑如下:
本文假设 PostgreSQL 已经安装在您的机器上,并且您可以连接到 PostgreSQL 服务器。
emqx-auth-pgsql 提供了 mqtt.sql 文件帮助用户快速建立数据库环境,mqtt.sql 将在 auth.pgsql.database 指定的数据库下创建 mqtt_user 和 mqtt_acl 两张表,并为 mqtt_acl 添加以下默认规则:
以上规则含义可参考: 《基于 MySQL 的 EMQ X Auth & ACL》。
1.Mac 环境安装 mosquitto
brew install mosquitto
2.导入 mqtt.sql 后,手动插入以下两条数据
mqtt=# insert into mqtt_user (id, is_superuser, username, password, salt) values (1, false, 'test', 'password', 'salt'); mqtt=# insert into mqtt_acl (id, allow, ipaddr, username, clientid, access, topic) values (7, 0, NULL, 'test', NULL, 1, 'mytopic');
3.修改配置文件
禁止匿名访问:
.../etc/emqx.conf allow_anonymous = false 配置数据库中密码的加密方式为 plain,既不加密:
.../etc/plugins/emqx_auth_pgsql.conf auth.pgsql.password_hash = plain 配置要访问的数据库以及用户名密码:
.../etc/plugins/emqx_auth_pgsql.conf auth.pgsql.username = root auth.pgsql.password = public auth.pgsql.database = mqtt
4.启动 EMQ X 与 emqx-auth-pgsql
./_rel/emqx/bin/emqx start emqx 3.1 is started successfully! ./_rel/emqx/bin/emqx_ctl plugins load emqx_auth_pgsql
5.测试
a.使用正确的用户名和密码进行连接,并订阅 "topic" 主题
$ mosquitto_sub -p 1883 -u test -P password -t 'topic' -d Client mosqsub|4119-zhouzibode sending CONNECT Client mosqsub|4119-zhouzibode received CONNACK Client mosqsub|4119-zhouzibode sending SUBSCRIBE (Mid: 1, Topic: topic, QoS: 0) Client mosqsub|4119-zh ouzibode received SUBACK Subscribed (mid: 1): 0 现象:连接并订阅成功
b.使用错误的用户名或密码进行连接,并订阅 "topic" 主题
$ mosquitto_sub -p 1883 -u bad_user -P password -t 'topic' -d Client mosqsub|4363-zhouzibode sending CONNECT Client mosqsub|4363-zhouzibode received CONNACK Connection Refused: not authorised. 现象:连接被拒绝
c.使用正确的用户名和密码进行连接,并订阅 "#" 主题
$ mosquitto_sub -p 1883 -u test -P password -t '#' -d Client mosqsub|4392-zhouzibode sending CONNECT Client mosqsub|4392-zhouzibode received CONNACK Client mosqsub|4392-zhouzibode sending SUBSCRIBE (Mid: 1, Topic: #, QoS: 0) Client mosqsub|4392-zhouzibode received SUBACK Subscribed (mid: 1): 128
现象:连接成功,订阅失败,原因码128
d.使用正确的用户名和密码进行连接,并订阅 "mytopic" 主题
$ mosquitto_sub -p 1883 -u test -P password -t 'mytopic' -d Client mosqsub|4428-zhouzibode sending CONNECT Client mosqsub|4428-zhouzibode received CONNACK Client mosqsub|4428-zhouzibode sending SUBSCRIBE (Mid: 1, Topic: mytopic, QoS: 0) Client mosqsub|4428-zhouzibode received SUBACK Subscribed (mid: 1): 128
现象:连接成功,订阅失败,原因码128
转载于:https://juejin.im/post/5cef3ea5f265da1ba84a7475
基于 PostgreSQL 的 EMQ X Auth ACL相关推荐
- 简单介绍基于PostgreSql 别名区分大小写的问题
这篇文章主要介绍了基于PostgreSql 别名区分大小写的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 PostgreSql是区分大小写的 如果别名的大小不一致就会提示错误: ...
- java执行查询postgresql得到中文乱码_Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(上篇)...
关于作者 姚延栋,山东大学本科,中科院软件所研究生.PostgreSQL中文社区委员,致力于Greenplum/PostgreSQL开源数据库产品.社区和生态的发展. 一.数据库内核揭秘 Greenp ...
- PostgreSQL 优势,MySQL 数据库自身的特性并不十分丰富,触发器和存储过程的支持较弱,Greenplum、AWS 的 Redshift 等都是基于 PostgreSQL 开发的...
PostgreSQL 优势 2016-10-20 21:36 686人阅读 评论(0) 收藏 举报 分类: MYSQL数据库(5) PostgreSQL 是一个自由的对象-关系数据库服务器(数据库 ...
- postgresql点云las_基于PostgreSQL数据库的大数据点云存储技术应用研究
基于 PostgreSQL 数据库的大数据点云存储技术应用研究 徐新 [期刊名称] <信息与电脑> [年 ( 卷 ), 期] 2017(000)013 [摘要] 三维激光扫描是一种较为先进 ...
- 基于PostgreSQL的时序数据库TimescaleDB
作者:杭州美创科技有限公司 什么是时序数据库?顾名思义,用于处理按照时间变化顺序的数据的数据库即为时序数据库(time-series database),时序数据库专门优化处理带时间标签的数据,为什么 ...
- [转帖]Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(下篇)
Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(下篇) http://www.postgres.cn/v2/news/viewone/1/454 原作者:姚延栋 创作时间:201 ...
- 基于PostgreSQL的时序数据库TimescaleDB(下)
上一期我们介绍了一些关于时序数据库的概念和发展以及TimescaleDB的功能特性,本期就来介绍如何安装使用TimescaleDB. 一.前期准备: 操作系统环境:CentOS Linux relea ...
- 如何快速搭建基于PostgreSQL的空间数据库(SDE)
如何快速搭建基于PostgreSQL的空间数据库(SDE) 1 安装准备 1.1 ArcGIS平台 ArcGIS Desktop 10.5以及ArcGIS Enterprise 10.5 ...
- Postgres-XL:基于PostgreSQL的开源可扩展数据库集群
2019独角兽企业重金招聘Python工程师标准>>> 最近这一年业界去"IOE"越叫越响,很多传统企业也把去"IOE"计划摆上了桌面.我老是 ...
最新文章
- c 自定义实现string类 clear_基于scala2.13实现自定义的集合类 (下)
- Linux系统资源限制
- windows11推出:win10可免费升级,支持安卓APP,减重40%
- SAP簇表(cluster table)BSEG使用方法
- mysql resulttype_Mysql中结果集(mysql_result)与Traversable
- 网络安全 攻击类型_网络攻击的类型| 网络安全
- [转载] java 枚举Enum源码解析
- ASA下邮件发送经常失败
- jdk1.8源码Thread与Runnable区别
- 计算机职业学校杭州,杭州2021年计算机学校是干什么的
- MATLAB2010激活后无法打开MATLAB的解决方法
- 我要注册一个邮箱,如何注册邮箱正确格式?
- MATLAB系统辨识工具箱学习,详细教程!
- App进行内测麻烦吗?如何进行App内测?
- 枚举子集复杂度 O(n^3) 证明
- Latex/CTeX WinEdt7.0 连续查找替换功能 “如何统计字数”
- ppt转换成H5功能总结
- linux a卡rpm安装方法,A卡安装成功
- 一种高性能无锁队列设计
- 段永平-雪球专刊·段永平投资问答录(上册 商业逻辑篇)(二)