日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

emq插件开发mysql_EMQ的Mysql插件

發(fā)布時(shí)間:2025/4/5 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 emq插件开发mysql_EMQ的Mysql插件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

EMQ最新版的是EMQX3.x.x版本,一如既往的支持Mysql認(rèn)證,這里專(zhuān)門(mén)對(duì)Mysql認(rèn)證插件做個(gè)研究,寫(xiě)點(diǎn)總結(jié)。本人能力有限,文章不足之處希望及時(shí)反饋以免誤導(dǎo)。

首先我先描述一下我的應(yīng)用場(chǎng)景:我要做一個(gè)后臺(tái),可以給EMQ創(chuàng)建客戶端和客戶端的ACL,從而實(shí)現(xiàn)對(duì)EMQ的終端進(jìn)行控制。所以選擇了EMQ的Mysql插件作為基礎(chǔ)組件。

首先我們看看Mysql插件的基礎(chǔ)文檔:【傳送門(mén)】,然后我們分析一下EMQ的認(rèn)證流程。我們先看一下基礎(chǔ)認(rèn)證配置規(guī)則。

EMQ默認(rèn)有個(gè)acl.conf文件,這個(gè)是第一步被加載進(jìn)EMQ的權(quán)限文件,我們可以再這里配置一下設(shè)備的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}.

我們拿出一個(gè)規(guī)則:【{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.】,這個(gè)表示允許用戶名為dashboard的用戶訂閱系統(tǒng)topic,如果我們需要自定義ACL,只需要按照這個(gè)格式就可以,這里需要注意兩點(diǎn):

Erlang的注釋符不要寫(xiě)錯(cuò)了,是%%,而不是#或//

規(guī)則后面有個(gè)點(diǎn):【.】,這個(gè)不能丟了

配置好了以后可以通過(guò)設(shè)置mqtt客戶端的username來(lái)是實(shí)現(xiàn)授權(quán)。

上面說(shuō)完基礎(chǔ)認(rèn)證想必大家對(duì)權(quán)限配置有一定的了解了,我們繼續(xù)看Mysql的認(rèn)證。

準(zhǔn)備工作:?下載最新版的EMQ,先不要運(yùn)行,解壓以后切換到etc目錄下。?首先,打開(kāi)emqx.conf,關(guān)閉匿名模式,大概在410行的位置處,把【anonymous=true】改成【anonymous=false】;然后配置ACL相關(guān)的一些內(nèi)容:在大約415行處【acl_nomatch = allow】改成【acl_nomatch = deny】;445行的【acl_deny_action=ignore】改為【acl_deny_action=disconnect】。

具體改動(dòng)見(jiàn)下表:

emqx.conf

anonymous

true

acl_nomatch

allow

acl_deny_action

disconnect

然后打開(kāi)acl.conf,把不需要的規(guī)則注釋了即可。

接下來(lái)需要配置一下Mysql的相關(guān)參數(shù):

emq_auth_mysql.conf

auth.mysql.server

數(shù)據(jù)庫(kù)的地址

auth.mysql.pool

連接池大小,默認(rèn)是8

auth.mysql.username

數(shù)據(jù)庫(kù)用戶名

auth.mysql.password

數(shù)據(jù)庫(kù)密碼

auth.mysql.database

數(shù)據(jù)庫(kù)

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'

這里是按照官網(wǎng)的模板直接配置的,但是有時(shí)候,可能需要整合我們自己的業(yè)務(wù)系統(tǒng),所以如果要自定義自己的系統(tǒng),需要注意這幾個(gè)地方:

1. EMQ的mysql插件的那幾個(gè)SQL,select返回字段必須按照給定的格式,例如:

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

其中password是必須要給出的,如果你的用戶密碼叫passwd,需要AS一下取個(gè)別名,這樣EMQ才能識(shí)別到,否則的話會(huì)報(bào)錯(cuò);

2. 關(guān)于SuperUser:SuperUser有權(quán)限訂閱所有topic,一般用作特殊作用比如監(jiān)控用;

3. IP地址為NULL,代表允許任何IP,而不是我們常見(jiàn)的0.0.0.0,如果不對(duì)IP進(jìn)行過(guò)濾,這個(gè)字段全部為空即可。

總結(jié):EMQ的Mysql插件通過(guò)SQL的形式給用戶留了自定義業(yè)務(wù)實(shí)現(xiàn)的接口,熟悉規(guī)則以后還是很好用的。

總結(jié)

以上是生活随笔為你收集整理的emq插件开发mysql_EMQ的Mysql插件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。