EMQ開啟mysql認證


規定通過mqtt_user表格驗證過的用戶才能連接EMQ服務器,我們需要開啟mysql插件認證。EMQ2.0自帶mysql插件,下面開始配置。

新建mqtt_user表格

要想控制用戶登錄EMQ,肯定是首先創建一個可管理的用戶表格,規定只有在這個表格中的用戶才能被允許連接EMQ。
按照EMQ官方文檔在你mysql服務器中新建一個mqtt_user的表格(http://www.emqtt.com/docs/v2/guide.html#mysql)

CREATE TABLE `mqtt_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  `salt` varchar(20) DEFAULT NULL,
  `is_superuser` tinyint(1) DEFAULT 0,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

關閉匿名登錄

修改emq.conf(文件在你安裝EMQ目錄的./etc中)

$ vim /emqttd/etc/emq.conf // 編輯emq.conf
mqtt.allow_anonymous = false // 修改為false

配置、加載mysql插件

可以通過兩種方式配置、加載mysql插件

命令行方式

修改emq_auth_mysql.conf(文件在你安裝EMQ目錄的./etc/plugins中)

$ vim /emqttd/etc/plugins/emq_auth_mysql.conf

修改如下配置

auth.mysql.server = MYSQL_SERVER_IP:PORT // mysql服務器地址,例如:127.0.0.1:3306
auth.mysql.username = USERNAME // mysql登錄用戶名
auth.mysql.password = PWD // mysql登錄密碼
auth.mysql.database = DATABASE_NAME // 默認使用庫

加載mysql插件

$ /emqttd/bin/emqttd_ctl plugins load emq_auth_mysql

Web方式

EMQ默認開啟一個web服務器用於可視化管理EMQ服務器(URL:18083),登錄用戶:admin、密碼:public
找到 emq_auth_mysql 插件點擊 配置

填寫用戶名、密碼、ip、端口號、數據庫名稱

然后點擊 確定 -> 啟動

如果開啟mysql插件報錯,請自行查看EMQ日志,或者開啟mysql服務器日志,大概率是mysql服務禁止訪問。如果你是阿里雲ECS,請設置ECS的安全組開啟端口號3306出入網設置,或者檢查服務器防火牆設置。如果依然報錯,請設置mysql配置文件允許賬戶遠程登錄(這個可以上網搜下),如果都沒問題,emq_auth_mysql插件啟動成功,下面我們可以使用EMQ自帶的Dashboard的web頁面(也就是前面提到的URL:18083),找到 Websocket 填寫任意賬號測試能否連接EMQ服務器。

測試發現任意填寫的用戶、密碼還是能連接上啊,我們mqtt_user中並沒有任何用戶記錄,為什么還是能連接上,如果你EMQ服務器是先啟動后配置mysql插件的話確實會出現這種情況,即使你使用重啟命令重啟EMQ服務器還是不行。

$ /emqttd/bin/emqttd restart

你必須先關閉EMQ,再啟動EMQ,mysql插件才會生效(這個官方文檔並沒有說明,大坑啊)。

$ /emqttd/bin/emqttd stop
$ /emqttd/bin/emqttd start

測試

然后我們往mqtt_user中新增一條用戶
username: 'admin' (用戶名)
password: '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4' (密碼'1234'的sha256加密字符)

因為mysql插件中讀取出的密碼會和明文傳遞的密碼的sha256加密字符比較,這個可以通過配置emq_auth_mysql.conf修改。

insert into mqtt_user (`username`, `password`) values ('admin', '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4');

然后測試 OK


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM