EMQ最新版的是EMQX3.x.x版本,一如既往的支持Mysql认证,这里专门对Mysql认证插件做个研究,写点总结。本人能力有限,文章不足之处希望及时反馈以免误导。

首先我先描述一下我的应用场景:我要做一个后台,可以给EMQ创建客户端和客户端的ACL,从而实现对EMQ的终端进行控制。所以选择了EMQ的Mysql插件作为基础组件。

首先我们看看Mysql插件的基础文档:【传送门】,然后我们分析一下EMQ的认证流程。我们先看一下基础认证配置规则。

EMQ默认有个acl.conf文件,这个是第一步被加载进EMQ的权限文件,我们可以再这里配置一下设备的ACL:

%%--------------------------------------------------------------------

%%

%% [ACL](http://emqtt.io/docs/v2/config.html#allow-anonymous-and-acl-file)

%%

%% -type who() :: all | binary() |

%% {ipaddr, esockd_access:cidr()} |

%% {client, binary()} |

%% {user, binary()}.

%%

%% -type access() :: subscribe | publish | pubsub.

%%

%% -type topic() :: binary().

%%

%% -type rule() :: {allow, all} |

%% {allow, who(), access(), list(topic())} |

%% {deny, all} |

%% {deny, who(), access(), list(topic())}.

%%

%%--------------------------------------------------------------------

{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.

{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.

{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

{allow, all}.

我们拿出一个规则:【{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.】,这个表示允许用户名为dashboard的用户订阅系统topic,如果我们需要自定义ACL,只需要按照这个格式就可以,这里需要注意两点:

Erlang的注释符不要写错了,是%%,而不是#或//

规则后面有个点:【.】,这个不能丢了

配置好了以后可以通过设置mqtt客户端的username来是实现授权。

上面说完基础认证想必大家对权限配置有一定的了解了,我们继续看Mysql的认证。

准备工作: 下载最新版的EMQ,先不要运行,解压以后切换到etc目录下。 首先,打开emqx.conf,关闭匿名模式,大概在410行的位置处,把【anonymous=true】改成【anonymous=false】;然后配置ACL相关的一些内容:在大约415行处【acl_nomatch = allow】改成【acl_nomatch = deny】;445行的【acl_deny_action=ignore】改为【acl_deny_action=disconnect】。

具体改动见下表:

emqx.conf

anonymous

true

acl_nomatch

allow

acl_deny_action

disconnect

然后打开acl.conf,把不需要的规则注释了即可。

接下来需要配置一下Mysql的相关参数:

emq_auth_mysql.conf

auth.mysql.server

数据库的地址

auth.mysql.pool

连接池大小,默认是8

auth.mysql.username

数据库用户名

auth.mysql.password

数据库密码

auth.mysql.database

数据库

auth.mysql.auth_query

select password from mqttdevice where username = '%u' limit 1

auth.mysql.password_hash

plain

auth.mysql.super_query

auth.mysql.super_query = select is_superuser from mqttdevice  where username = '%u' limit 1

auth.mysql.acl_query

auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = '%a' or username = '%u' or username = '$all' or clientid = '%c'

这里是按照官网的模板直接配置的,但是有时候,可能需要整合我们自己的业务系统,所以如果要自定义自己的系统,需要注意这几个地方:

1. EMQ的mysql插件的那几个SQL,select返回字段必须按照给定的格式,例如:

select password from mqttdevice where username = '%u' limit 1

其中password是必须要给出的,如果你的用户密码叫passwd,需要AS一下取个别名,这样EMQ才能识别到,否则的话会报错;

2. 关于SuperUser:SuperUser有权限订阅所有topic,一般用作特殊作用比如监控用;

3. IP地址为NULL,代表允许任何IP,而不是我们常见的0.0.0.0,如果不对IP进行过滤,这个字段全部为空即可。

总结:EMQ的Mysql插件通过SQL的形式给用户留了自定义业务实现的接口,熟悉规则以后还是很好用的。

emq插件开发mysql_EMQ的Mysql插件相关推荐

  1. emq与mysql_EMQ X 插件持久化系列 (五)MySQL MQTT 数据存储

    本文以在 CentOS 7.2 中的实际例子来说明如何通过 MySQL 来存储相关的 MQTT 数据. MySQL 属于传统的关系型数据库产品,其开放式的架构使得用户的选择性很强,而且随着技术的逐渐成 ...

  2. emq+mysql设置_EMQ--添加mysql认证及mysql插件访问控制

    EMQ-百万级分布式开源物联网MQTT消息服务器. MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿 ...

  3. emq无法启用mysql_EMQ开启mysql认证

    规定通过mqtt_user表格验证过的用户才能连接EMQ服务器,我们需要开启mysql插件认证.EMQ2.0自带mysql插件,下面开始配置. 新建mqtt_user表格 要想控制用户登录EMQ,肯定 ...

  4. emqtt mysql认证_Emqtt -- 05 -- Mysql插件认证及访问控制

    了解了 Clientid 认证后,现在我们再来了解下 Mysql 插件认证以及访问控制,默认关闭了匿名认证 一.创建用户表和控制表 根据官方文档,用户表的名称为:mqtt_user,访问控制表的名称为 ...

  5. 如何添加MySQL插件_如何开发一个自定义的MySQL插件

    MySQL自带了很多插件,比如半同步插件.审计插件.密码验证插件等等,甚至MySQL存储引擎也是以插件方式实现的.MySQL开放的插件接口,为开发者开发自定义插件提供了便利.本文将介绍如何快速开发一个 ...

  6. Emqtt -- 05 -- Mysql插件认证及访问控制

    原文链接:Emqtt – 05 – Mysql插件认证及访问控制 相关文章: Emqtt – 01 – 服务搭建 Emqtt – 02 – 搭建本地项目 Emqtt – 03 – 用户密码认证 Emq ...

  7. 编译ARM平台的 QtEmbedded 的MySQL插件和移植MySQL到ARM开发板

    经过几天的努力,终于交叉编译出了arm平台所需Qt/E的MySQL插件(驱动),其中顺便把MySQL也移植到了mini2410的开发板上. 编译器:arm-linux-gcc(4.3.2) Pc平台: ...

  8. arm qt mysql插件_Ubuntu下编译ARM平台Qt的MySQL插件

    最近需要将一个程序移植到arm平台上,程序调用了MySQL数据库,所以就牵扯到将MySQL数据库移植到ARM平台上面,所以在网上大量查阅资料.在baidu文库发现了一篇文档,是wlzxlc上传的文档名 ...

  9. Wordpress 修改 mysql 插件_史上最详细的WordPress安装教程(三):安装php 5.6及fpm、pdo、mysql等插件...

    ​安装php 5.6 yum -y install epel-release rpm -ivh http://rpms.famillecollet.com/enterprise/remi-releas ...

最新文章

  1. Nature综述:从土壤到临床-微生物次级代谢产物对抗生素耐受性和耐药性的影响...
  2. 程序员面试题精选100题(28)-字符串的排列[算法]
  3. HDUOJ-----4510 小Q系列故事——为什么时光不能倒流
  4. Android百度云推送接入,附完整代码
  5. C# HttpClient设置cookies的两种办法
  6. 连连看外挂消去算法分析
  7. MyBatis学习总结(六)——调用存储过程
  8. JVM分代垃圾回收策略的基础概念
  9. Forefront TMGUAG
  10. python接口自动化发送get请求 详解(一)
  11. .NET 设计规范--.NET约定、惯用法与模式--5.成员设计
  12. 指定locale为en_US
  13. 关于如何写代码和学习代码
  14. 在VMware16中安装 Win10操作系统
  15. Linux shell中21的含义解释 (全网最全,看完就懂)
  16. 常用第三方APP 的url scheme
  17. [转贴]民国记者有多牛:揭黑损人骂街是常事
  18. Calendar类-日历类常用方法(JAVA)
  19. 计算机机箱架硬盘托架是什么,机械硬盘托架 笔记本光驱位硬盘托架到底靠不靠谱?有人说会烧主板,我都害怕了,......
  20. vue3+vite3+vant搭建移动端简易模版

热门文章

  1. 5.2 FIR滤波器的卷积(脉冲响应、频率响应,幅频响应,暂态-搞不清楚的有救了啊)
  2. source insight使用
  3. 惠普z640服务器装系统,顾问文档: HP Z440、Z640 和 Z840 工作站 - 在采用 Broadwell 处理器的系统上安装 HP ZTurbo Quad Pro 后,出现黑屏...
  4. 无记忆多项式数字预失真技术
  5. C++虚成员函数表vtable
  6. kmalloc、vmalloc、malloc、calloc的区别
  7. java发送http连接
  8. Android APP破解利器Frida之反调试对抗
  9. 查询时注意 查询字段传值参数类型,尽量和数据库字段类型一致
  10. 金立又推新机 欧新V908或近期发布 外观设计独到