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相关推荐

  1. 简单介绍基于PostgreSql 别名区分大小写的问题

    这篇文章主要介绍了基于PostgreSql 别名区分大小写的问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 PostgreSql是区分大小写的 如果别名的大小不一致就会提示错误: ...

  2. java执行查询postgresql得到中文乱码_Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(上篇)...

    关于作者 姚延栋,山东大学本科,中科院软件所研究生.PostgreSQL中文社区委员,致力于Greenplum/PostgreSQL开源数据库产品.社区和生态的发展. 一.数据库内核揭秘 Greenp ...

  3. PostgreSQL 优势,MySQL 数据库自身的特性并不十分丰富,触发器和存储过程的支持较弱,Greenplum、AWS 的 Redshift 等都是基于 PostgreSQL 开发的...

    PostgreSQL 优势 2016-10-20 21:36 686人阅读 评论(0) 收藏 举报  分类: MYSQL数据库(5)  PostgreSQL 是一个自由的对象-关系数据库服务器(数据库 ...

  4. postgresql点云las_基于PostgreSQL数据库的大数据点云存储技术应用研究

    基于 PostgreSQL 数据库的大数据点云存储技术应用研究 徐新 [期刊名称] <信息与电脑> [年 ( 卷 ), 期] 2017(000)013 [摘要] 三维激光扫描是一种较为先进 ...

  5. 基于PostgreSQL的时序数据库TimescaleDB

    作者:杭州美创科技有限公司 什么是时序数据库?顾名思义,用于处理按照时间变化顺序的数据的数据库即为时序数据库(time-series database),时序数据库专门优化处理带时间标签的数据,为什么 ...

  6. [转帖]Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(下篇)

    Greenplum: 基于PostgreSQL的分布式数据库内核揭秘(下篇) http://www.postgres.cn/v2/news/viewone/1/454 原作者:姚延栋 创作时间:201 ...

  7. 基于PostgreSQL的时序数据库TimescaleDB(下)

    上一期我们介绍了一些关于时序数据库的概念和发展以及TimescaleDB的功能特性,本期就来介绍如何安装使用TimescaleDB. 一.前期准备: 操作系统环境:CentOS Linux relea ...

  8. 如何快速搭建基于PostgreSQL的空间数据库(SDE)

    如何快速搭建基于PostgreSQL的空间数据库(SDE) 1        安装准备 1.1 ArcGIS平台 ArcGIS Desktop 10.5以及ArcGIS Enterprise 10.5 ...

  9. Postgres-XL:基于PostgreSQL的开源可扩展数据库集群

    2019独角兽企业重金招聘Python工程师标准>>> 最近这一年业界去"IOE"越叫越响,很多传统企业也把去"IOE"计划摆上了桌面.我老是 ...

最新文章

  1. c 自定义实现string类 clear_基于scala2.13实现自定义的集合类 (下)
  2. Linux系统资源限制
  3. windows11推出:win10可免费升级,支持安卓APP,减重40%
  4. SAP簇表(cluster table)BSEG使用方法
  5. mysql resulttype_Mysql中结果集(mysql_result)与Traversable
  6. 网络安全 攻击类型_网络攻击的类型| 网络安全
  7. [转载] java 枚举Enum源码解析
  8. ASA下邮件发送经常失败
  9. jdk1.8源码Thread与Runnable区别
  10. 计算机职业学校杭州,杭州2021年计算机学校是干什么的
  11. MATLAB2010激活后无法打开MATLAB的解决方法
  12. 我要注册一个邮箱,如何注册邮箱正确格式?
  13. MATLAB系统辨识工具箱学习,详细教程!
  14. App进行内测麻烦吗?如何进行App内测?
  15. 枚举子集复杂度 O(n^3) 证明
  16. Latex/CTeX WinEdt7.0 连续查找替换功能 “如何统计字数”
  17. ppt转换成H5功能总结
  18. linux a卡rpm安装方法,A卡安装成功
  19. 一种高性能无锁队列设计
  20. 段永平-雪球专刊·段永平投资问答录(上册 商业逻辑篇)(二)

热门文章

  1. java 正则表达式提取html纯文本
  2. 【nginx】【转】Nginx核心进程模型
  3. Node.js摸石头系列目录
  4. 巧用SQL的全局临时表防止用户重复登录
  5. Public权限下的列目录
  6. Elasticsearch--进阶-match全文检索---全文检索引擎ElasticSearch工作笔记011
  7. Elasticsearch--Docker安装ES---全文检索引擎ElasticSearch工作笔记002
  8. Netty工作笔记0055---Unpooled应用实例1
  9. 网站站群相关工具001---WebPlus集群平台
  10. IOS学习笔记06---C语言函数