文档章节

基于 PostgreSQL 的 EMQ X Auth & ACL

EMQX
 EMQX
发布于 08/04 17:05
字数 964
阅读 34
收藏 0

在阅读本教程之前,假定你已经了解 MQTTMQTT 5 以及 EMQ X 的简单知识。

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

本文假设 PostgreSQL 已经安装在您的机器上,并且您可以连接到 PostgreSQL 服务器。

插件配置项说明

配置项 说明
auth.pgsql.server 配置需要连接的 PostgreSQL Server 的 host 与 port,格式为:host[:port],省略后面的 port 时表示使用默认的 5432 端口
auth.pgsql.username 用于登录 PostgreSQL 的用户名
auth.pgsql.password 用于登录 PostgreSQL 的密码
auth.pgsql.database 配置要访问的数据库
auth.pgsql.ssl 配置是否使用 SSL 连接数据库,默认为否
auth.pgsql.auth_query 配置从数据库中查找用户名对应密码的 SQL 语句
auth.pgsql.password_hash 表示存储在数据表中的 encrypted password 使用的加密算法和加盐方式
auth.pgsql.super_query 验证用户是否为超级用户时使用的 SQL 语句 注:超级用户可以发布订阅任何主题
auth.pgsql.acl_query ACL 检查时使用的 SQL 语句

mqtt.sql

``emqx-auth-pgsql提供了mqtt.sql 文件帮助用户快速建立数据库环境,mqtt.sql将在auth.pgsql.database指定的数据库下创建mqtt_usermqtt_acl两张表,并为mqtt_acl` 添加以下默认规则:

mqtt=# select * from mqtt_acl;
 id | allow |  ipaddr   | username  | clientid | access | topic  
----+-------+-----------+-----------+----------+--------+--------
  1 |     1 |           | $all      |          |      2 | #
  2 |     0 |           | $all      |          |      1 | $SYS/#
  3 |     0 |           | $all      |          |      1 | eq #
  4 |     1 | 127.0.0.1 |           |          |      2 | $SYS/#
  5 |     1 | 127.0.0.1 |           |          |      2 | #
  6 |     1 |           | dashboard |          |      1 | $SYS/#
(6 rows)

以上规则含义可参考: 《基于 MySQL 的 EMQ X Auth & ACL》

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


更多信息请访问我们的官网 emqx.io,或关注我们的开源项目 github.com/emqx/emqx ,详细文档请访问 官方文档

© 著作权归作者所有

EMQX
粉丝 4
博文 54
码字总数 71436
作品 0
杭州
私信 提问
【微服务】部署Api网关Kong

Kong 是在客户端和(微)服务间转发 API 通信的 API 网关,通过插件扩展功能。持久化支持Postgresql和Cassandra。鉴于做测试,使用搭建简便的Postgresql作为DB存储。 IP分配 192.168.0.181:...

Tree
2018/01/04
577
0
postgresql数据库连接池pgbouncer

前端时间看了看服务器还有多余的内存,由于数据库和程序都在一个服务器上,就想看看有什么提升并发的方法。试用了下pgbouncer ,记录下。 1.源码安装: wget https://github.com/downloads/...

从前
2013/06/13
4.7K
0
PostgreSQL在Linux上的RPM和源码安装

第一章 引言 此文档主要描述Postgre数据库,基于Red Hat Enterprise Linux Server release 6.5 的操作系统上安装Postgre数据库的文档衍生而来。此文档包括Postgre数据库的多种安装方式。 1....

史蒂夫傲视
06/20
0
0
PGSQL主从+keepalived高可用配置

环境说明: 主机与IP: 192.168.11.177 主库 192.168.11.180 备库 192.168.11.210 VIP 系统: centos7.2 PGSQL9.6主从已安装配置完成(参考我之前的博客) 安装配置: 1、安装配置keepalive...

断臂人
2018/08/10
0
0
pgsql ident鉴权方式实现无密码登录,无需.pgpass

PostgreSQL 命令行 psql,pg_dump等不支持口令参数,也就无法像mysql那样无需人工干预(输入口令)执行备份、恢复数据库的命令。 网上搜索有多种解决办法,比如通过设置PostgreSQL的环境变量...

mark35
2012/05/24
242
0

没有更多内容

加载失败,请刷新页面

加载更多

家庭作业——苗钰婷

2 编写一个程序,发出一声警报,然后打印下面的文本: Startled by the sudden sound, Sally shouted, "By the Great Pumpkin, what was that! #include<stdio.h>int main(){......

OSC_Okruuv
25分钟前
5
0
经典系统设计面试题解析:如何设计TinyURL(一)

原文链接: https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
26分钟前
3
0
2.面向对象设计原则(7条)

开闭原则 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 实现方法 可以通过“抽象约束、封装变化”来实...

Eappo_Geng
29分钟前
7
0
8086汇编基础 debug P命令 一步完成loop循环

    IDE : Masm for Windows 集成实验环境 2015     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   ......

志成就
33分钟前
5
0
使用nodeJS实现前端项目自动化之项目构建和文件合并

本文转载于:专业的前端网站➜使用nodeJS实现前端项目自动化之项目构建和文件合并 前面的话   一般地,我们使用构建工具来完成项目的自动化操作。本文主要介绍如何使用nodeJS来实现简单的项...

前端老手
46分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部