说明
本文介绍 使用EMQX作为 MQTT Server时,如何连接多个数据源(认证链)进行设备认证。
为了使用方便,均使用 docker 启动 EMQX ,并且在启动时配置参数自动进行数据连接。
介绍了 EMQX 中各种环境变量在 docker compose 中的写法。
MySQL认证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| version: '3' services: emqx: image: emqx/emqx:4.3.5 container_name: docker_emqx ports: - "18083:18083" - "1883:1883" - "4369:4369" - "8883:8883" - "8085:8084" - "8081:8081" - "8083:8083" volumes: - /home/yxin/Documents/emqx/emqx-cert:/opt/emqx/etc/certs - /home/yxin/Documents/emqx/emqx.conf:/opt/emqx/etc/emqx.conf restart: always environment: - "EMQX_ALLOW_ANONYMOUS=false" - "EMQX_ACL_NOMATCH=deny" - "EMQX_AUTH__MYSQL__SERVER=172.16.33.51:3306" - "EMQX_AUTH__MYSQL__POOL=8" - "EMQX_AUTH__MYSQL__USERNAME=root" - "EMQX_AUTH__MYSQL__PASSWORD=MeRootSSSS" - "EMQX_AUTH__MYSQL__DATABASE=mlic" - "EMQX_AUTH__MYSQL__AUTH__MYSQL__QUERY_TIMEOUT=5" - "EMQX_AUTH__MYSQL__AUTH_QUERY=select password from mqtt_user where username = '%u' union all select password from mqtt_user2 where username = '%u' limit 1" - "EMQX_LOADED_PLUGINS=emqx_recon | emqx_retainer | emqx_rule_engine | emqx_management | emqx_dashboard | emqx_auth_mysql"
|
其中
1
| select password from mqtt_user where username = '%u' union all select password from mqtt_user2 where username = '%u' limit 1"
|
经测试可用,可在多表中进行设备认证。
PostgreSQL认证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| version: '3' services: emqx: image: emqx/emqx:4.4.15 container_name: docker_emqx ports: - "18083:18083" - "1888:1883" - "4369:4369" - "8883:8883" restart: always environment: - "EMQX_ALLOW_ANONYMOUS=false" - "EMQX_ACL_NOMATCH=deny" - "EMQX_AUTH__PGSQL__SERVER=172.16.33.58:5432" - "EMQX_AUTH__PGSQL__POOL=8" - "EMQX_AUTH__PGSQL__USERNAME=postgres" - "EMQX_AUTH__PGSQL__PASSWORD=PgSQLmmmmmm" - "EMQX_AUTH__PGSQL__DATABASE=timescale" - "EMQX_LOADED_PLUGINS=emqx_recon | emqx_retainer | emqx_rule_engine | emqx_management | emqx_dashboard | emqx_auth_pgsql"
|
认证链
可同时使用 MySQL以及Postgresql认证。其中有一个认证通过即认证通过,不过如果两个数据库中有相同用户名,密码不同,当一个认证失败后就会返回认证失败。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| version: '3' services: emqx: image: emqx/emqx:4.4.15 container_name: docker_emqx_auth ports: - "18085:18083" - "1889:1883" restart: always environment: - "EMQX_ALLOW_ANONYMOUS=false" - "EMQX_ACL_NOMATCH=deny" - "EMQX_AUTH__PGSQL__SERVER=172.16.33.58:5432" - "EMQX_AUTH__PGSQL__POOL=8" - "EMQX_AUTH__PGSQL__USERNAME=postgres" - "EMQX_AUTH__PGSQL__PASSWORD=JDDDDDDDDt" - "EMQX_AUTH__PGSQL__DATABASE=timescale" - "EMQX_AUTH__MYSQL__SERVER=172.16.33.62:3306" - "EMQX_AUTH__MYSQL__POOL=8" - "EMQX_AUTH__MYSQL__USERNAME=root" - "EMQX_AUTH__MYSQL__PASSWORD=MVVVVVVVVne" - "EMQX_AUTH__MYSQL__DATABASE=iform" - "EMQX_AUTH__MYSQL__AUTH__MYSQL__QUERY_TIMEOUT=5" - "EMQX_LOADED_PLUGINS=emqx_recon | emqx_retainer | emqx_rule_engine | emqx_management | emqx_dashboard | emqx_auth_pgsql | emqx_auth_mysql"
|