基于 PostgreSQL 的 EMQ X Auth & ACL

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

本文假设 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 环境安装 mosquittoui

brew install mosquitto加密

2.导入 mqtt.sql 后,手动插入如下两条数据3d

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');cdn

3.修改配置文件blog

禁止匿名访问:ip

.../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

相关文章
相关标签/搜索