• 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

  • 相关阅读:
    angular入门--绑定字符串
    mongodb安装与mongo vue的使用
    css3-pointer-events_demo
    面向对象的六大原则
    AutoMapper简明教程(学习笔记)
    jquery cookie的用法
    MVC 异常处理机制
    查询最近修改的脚本
    运行page页面时的事件执行顺序
    游标简单的使用
  • 原文地址:https://www.cnblogs.com/roddy/p/9951836.html
Copyright © 2020-2023  润新知