emq外掛程式開發mysql EMQ的Mysql外掛程式

2021-10-19 16:30:32 字數 2226 閱讀 6854

emq最新版的是emqx3.x.x版本,一如既往的支援mysql認證,這裡專門對mysql認證外掛程式做個研究,寫點總結。本人能力有限,文章不足之處希望及時反饋以免誤導。

首先我先描述一下我的應用場景:我要做乙個後台,可以給emq建立客戶端和客戶端的acl,從而實現對emq的終端進行控制。所以選擇了emq的mysql外掛程式作為基礎元件。

首先我們看看mysql外掛程式的基礎文件:【傳送門】,然後我們分析一下emq的認證流程。我們先看一下基礎認證配置規則。

emq預設有個acl.conf檔案,這個是第一步被載入進emq的許可權檔案,我們可以再這裡配置一下裝置的acl:

%% [acl](

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

%% |

%% |

%% .

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

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

%% -type rule() :: |

%% |

%% |

%% .

, subscribe, ["$sys/#"]}.

, pubsub, ["$sys/#", "#"]}.

]}..

我們拿出乙個規則:【, subscribe, ["$sys/#"]}.】,這個表示允許使用者名為dashboard的使用者訂閱系統topic,如果我們需要自定義acl,只需要按照這個格式就可以,這裡需要注意兩點:

erlang的注釋符不要寫錯了,是%%,而不是#或//

規則後面有個點:【.】,這個不能丟了

配置好了以後可以通過設定mqtt客戶端的username來是實現授權。

上面說完基礎認證想必大家對許可權配置有一定的了解了,我們繼續看mysql的認證。

具體改動見下表:

emqx.conf

anonymous

true

acl_nomatch

allow

acl_deny_action

disconnect

然後開啟acl.conf,把不需要的規則注釋了即可。

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外掛程式開發

官方提供了外掛程式模板 外掛程式模板 按照自己的意願進行命名 修改etc下的config src下的兩個檔案 乙個叫auth 乙個叫acl的要載入到 in start function,ok emqttd access control register mod auth,emq custom plu...

EMQ外掛程式開發mysql實現認證和訪問控制

為了測試外掛程式開發的可行性,選擇了改名emq auth mysql進行驗證,因為官方給出的外掛程式模板並沒有具體邏輯。include下的hrl改名 etc下的conf和priv下的schema是相互照應的,進行改名 src的原始檔與上篇文章改名類似 makefile中 project emq cu...

npm外掛程式開發 Vue外掛程式

vue init webpack npm vue ui,dependencies browserslist 1 last 2 versions not ie 8 devdependencies const path require path const webpack require webpack...