EMQX的emqx_auth_mongo报错:OP_QUERY is no longer supported

背景

我的目标是想使用 EMQX 官方提供的 emqx_auth_mongo 的设备接入认证/鉴权插件实现对设备的接入限制;一开始服务器上有个 6.0.8MongoDB ,在启动时遇到了一些错误。处理了错误并成功启动 MongoDB 后,开启 EMQXemqx_auth_mongo 插件,并配置 EMQX 拒绝匿名接入,这时候便报出了题中错误:OP_QUERY is no longer supported

2023-12-09-EMQXError.jpg

先说结论:升级 EMQX ,或者降低 MongoDB 版本,这里选择降低 MongoDB 版本。

环境信息

  • EMQX版本:4.3.10
  • MongoDB版本:6.0.8

启动MongoDB遇到的问题

以下记录了刚开始无法启动 MongoDB 时的不同报错信息,以及对应的解决方法。

问题1:/root/db/mongo/WiredTiger.turtle: handle-open: open: Permission denied

权限问题。

chown -R mongod:mongod /root/db/mongo

问题2:Failed to read metadata from /root/db/mongo/storage.bson

权限问题。

chown -R mongod:mongod /root/db/mongo

问题3:Killing all outstanding egress activity.

删除锁定文件。

cd /root/db/mongo
rm -f mongod.lock

问题4:Failed to unlink socket file

删除连接文件。

cd /tmp/
rm mongodb-27017.sock

最后 msg 终于成了:Waiting for connections,启动成功。

EMQX使用emqx_auth_mongo认证时报错

前面启动了 MongoDB ,那么接下来就进行插件的配置: vi ./etc/plugins/emqx_auth_mongo.conf

  • 接入认证
## MongoDB server list.
##
## Value: String
##
## Examples: 127.0.0.1:27017,127.0.0.2:27017...
auth.mongo.server = 127.0.0.1:27777

## MongoDB login user.
##
## Value: String
auth.mongo.username = you

## MongoDB password.
##
## Value: String
auth.mongo.password = guess

## MongoDB AuthSource
##
## Value: String
## Default: mqtt
auth.mongo.auth_source = devicehub

## MongoDB database
##
## Value: String
auth.mongo.database = devicehub

## -------------------------------------------------
## Auth Query
## -------------------------------------------------
## Password hash.
##
## Value: plain | md5 | sha | sha256 | bcrypt
auth.mongo.auth_query.password_hash = plain

## Authentication query.
auth.mongo.auth_query.collection = device

## Password mainly fields
##
## Value:  password | password,salt
auth.mongo.auth_query.password_field = secret

## Authentication Selector.
##
## Variables:
##  - %u: username
##  - %c: clientid
##  - %C: common name of client TLS cert
##  - %d: subject of client TLS cert
##
## auth.mongo.auth_query.selector = {Field}={Placeholder}
auth.mongo.auth_query.selector = username=%u
  • 发布订阅鉴权

## ACL Selector.
##
## Multiple selectors could be combined with '$or'
##   when query acl from mongo.
##
## e.g.
##
## With following 2 selectors configured:
##
## auth.mongo.acl_query.selector.1 = username=%u
## auth.mongo.acl_query.selector.2 = username=$all
##
## And if a client connected using username 'ilyas',
##   then the following mongo command will be used to
##   retrieve acl entries:
##
## db.mqtt_acl.find({$or: [{username: "ilyas"},  {username: "$all"}]});
##
## Variables:
##  - %u: username
##  - %c: clientid
##
## Examples:
##
## auth.mongo.acl_query.selector.1 = username=%u,clientid=%c
## auth.mongo.acl_query.selector.2 = username=$all
## auth.mongo.acl_query.selector.3 = clientid=$all
auth.mongo.acl_query.collection = device_acl
auth.mongo.acl_query.selector = username=%u

最后加载 ./bin/emqx_ctl plugins load emqx_auth_mongo ,如果是修改,则进行 reload./bin/emqx_ctl plugins reload emqx_auth_mongo

  • 关闭EMQX的匿名接入与发布

这时,如果直接通过设备进行接入,使用随意的 usernamepassword ,依然可以成功连接至 EMQXMOTT Broker ,这是因为 EMQX 默认全局下是允许匿名连接的,因此为了实现 MongoDB 插件的认证与鉴权,还需要修改以下 EMQX 的全局配置: vi ./etc/emqx.conf

##--------------------------------------------------------------------
## Authentication/Access Control
##--------------------------------------------------------------------
## Allow anonymous authentication by default if no auth plugins loaded.
## Notice: Disable the option in production deployment!
##
## Value: true | false
allow_anonymous = false

## Allow or deny if no ACL rules matched.
##
## Value: allow | deny
acl_nomatch = deny

完成了以上操作,设备的接入流程才能进入到 MongoDB 中去查询认证信息,但是不幸的是, EMQX 报错了,查看 EMQX 日志: tail -f ./log/emqx.log.1

核心报错信息:OP_QUERY is no longer supported

经过查询,原因是 EMQX 连接 MongoDB 的客户端驱动版本太低。这里选择降低 MongoDB 的版本,接下来安装 MongoDB4.4.26 版。

卸载MongoDB

安装低版本之前,先卸载掉已安装的高版本 MongoDB

yum erase mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools mongodb-org-database-tools-extra

安装低版本MongoDB

  • 下载安装
# 编辑MongoDB安装源
vi /etc/yum.repos.d/mongodb-org-4.4.repo
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc

# 安装MongoDB
yum -y install mongodb-org
  • 远程访问开启认证
    开启远程访问,安全起见,更换了默认端口,强烈要求远程访问时开启认证,并设置高复杂度密码。关于MongoDB基本用法以及用户认证与授权,参考:Ubuntu下安装使用MongoDB

vi /etc/mongod.conf

net:
  port: 27777
  bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
security:  
  authorization: enabled

MongoDB客户端

  • 自带的mongo命令行客户端
    连接方式: mongo --host=your-server-ip --port=your-port

  • Mongo-express

Web版的MongoDB管理工具,通过npm即可安装, 但是我安装时一直报错,然后就放弃了。

npm ERR! Unsupported URL Type “patch:”: patch:mongodb-query-parser

  • Navicat for MongoDB

仅有14天的试用期,不过可以临时下载应个急。

  • NoSQLBooster

一直以来用的都是这款客户端工具。不过使用NoSQLBooster for MongoDB导出数据时,报错:

You are using the free edition of NoSQLBooster for MongoDB and the “Export” feature is disabled. Advanced features are paid-for only. Please consider purchasing a license to support future development. Thank you.

NoSQLBooster for MongoDB本身是提供了30天的试用期的,看如何想办法延长试用期。

  1. 先关闭NoSQLBooster for MongoDB应用。

  2. 鼠标右键,打开文件位置,会进入默认的安装路径:C:\Users\Administrator\AppData\Local\Programs\nosqlbooster4mongo
    看到 resourceslocales 目录,瞬间意识到这是使用使用 ElectronNode.js 编写的跨平台客户端。
    进入 resources 目录,有一个 app.asar ,这是一个类似压缩文件的文件包,里面存放了源代码,我们进行解压。

  3. 安装全局依赖asar:

npm install asar -g

  1. 解包:

asar extract app.asar app

生成了app目录

  1. 在C:\Users\Administrator\AppData\Local\Programs\nosqlbooster4mongo\resources\app\shared目录下,找到lmCore
    修改: lmCore.js ,查找并修改:MAX_TRIAL_DAYS=1000 , TRIAL_DAYS=1000

  2. 重新打包

asar pack app app.asar

  1. 打开NoSQLBooster for MongoDB.exe。

2023-12-09-NoSQLBooster.jpg

小总结

以上记录了使用 EMQXemqx_auth_mongo 插件实现对设备的接入限制时,遇到"OP_QUERY is no longer supported"的错误。为解决这个问题,可以选择升级 EMQX 或者降低 MongoDB 版本。本文选择了降低 MongoDB 版本,安装了 4.4.26 版。此外,文章还提到了一些关于 MongoDB 客户端工具的使用问题。

Reference

  • Ubuntu下安装使用MongoDB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/230842.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AIGC】大语言模型的采样策略--temperature、top-k、top-p等

总结如下: 图片链接 参考 LLM解码-采样策略串讲 LLM大模型解码生成方式总结 LLM探索:GPT类模型的几个常用参数 Top-k, Top-p, Temperature

计算机网络 | I/O模型介绍

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,贝叶斯滤波与Kalman估计、多传感器信息融合,机器学习,人工智能&#xff0c…

爱上 `grep`:小白也能用的命令行超能工具!

1. grep 简介 grep 是一款命令行工具,它的任务是在文件中搜索特定的文本模式。在 Windows 上,我们可以通过安装 Chocolatey 包管理器来安装 grep。 2. 在 Windows 上安装 grep 打开 Windows PowerShell 首先,我们需要确保你已经安装了 Cho…

PGSQL(PostgreSQL)数据库基础篇:PostgreSQL 的 主要优点 、 劣势 、体系结构 、核心功能 、安装教程。

文章目录 PostgreSQL 的 主要优点PostgreSQL 的 应用劣势PostgreSQL 的体系结构PostgreSQL 的核心功能PostgreSQL 的适用场景安装部署 PostgreSQL 的 主要优点 1.维护者是PostgreSQL Global Development Group,首次发布于1989年6月。 2.操作系统支持WINDOWS、Linux…

转换NC或HDF数据时候转出数据无坐标信息的处理方法

有时候我们在转换NC或HDF数据时,有时候会出现没有坐标信息的情况!如下图: 这种情况一般是原始数据将坐标信息存储在说明文件中以便后期做生成坐标信息的处理、或坐标存储的形式比较特殊,造成工具无法读取!这种数据处理…

Emacs之dired模式重新绑定键值v(一百三十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

python-缩进式编码+算术运算符+定义与赋值代码示例

文章目录 一、​缩进式编码二、算术运算符三、定义与赋值关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 一、​…

用C++实现队列顺序结构的基本操作

//队列顺序结构的基本操作: #include"stdio.h" #include"String" #define QueueSize 100 typedef char ElemType; typedef struct { ElemType data[QueueSize]; /*保存队中元素*/int front,rear; /*队头和队尾指针*/ } SqQueue; void Init…

CETN01 - How to Use Cloud Classroom

文章目录 I. Introduction to Cloud ClassroomII. How to Use Cloud Classroom1. Publish Resources2. Conduct Activities3. Class Teaching Reports4. View Experience Values5. Performance in Cloud Classroom I. 云课堂介绍II. 如何使用云课堂1. 发布资源2. 进行活动3. 班…

yolov8使用详解

文章目录 一. 安装yolov81. 通过Pip安装2. 通过Conda安装3. Git克隆源码安装 二. yolov8基本设置三. yolov8模型1. 目标检测2. 实例分割3. 图像分类4. 姿态估计5. 多对象跟踪(1) 可用的追踪器(2) 选择追踪器(3) 持续追踪循环(4) 随时间绘制追踪路径 四. yolov8数据集[1. 检测数…

高效的多维空间点索引算法——GeoHash

一、Geohash 算法简介 GeoHash是空间索引的一种方式,其基本原理是将地球理解为一个二维平面,通过把二维的空间经纬度数据编码为一个字符串,可以把平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码。以GeoHash方…

书籍推荐: 深入理解Go并发编程

一书在手,并发无忧 收到了鸟窝老师历时五载写就的新作「深入理解Go并发编程」 迫不及待开卷阅览,大呼过瘾,最大感触是诚如副标题所言,“从原理到实践,看这本就够了”。 对并发编程优雅简洁的支持,是Go最大的…

从简单到入门,一文掌握jvm底层知识文集。

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

关于我自己搭建了一个完整的 网站 - 从零开始(服务器购买选型,域名备案,wordpress 主题,各种支付插件)

这篇博客主要介绍是如何在华为云上搭建一个 WordPress 网站。我将详细介绍从购买服务器到推广网站的整个过程,包括域名主机的备案。无论您是技术新手还是有一定经验的开发者,这篇文章都能为您提供有价值的指导。 第一步:选择云服务器 我选择…

CART算法Python实现

本文深入探讨了CART(分类与回归树)算法的核心原理、实现方法以及应用场景。文章首先介绍了决策树的基础知识,然后详细解析了CART算法的工作机制,包括特征选择和树的构建。接着,通过Python和PyTorch的实例代码展示了CAR…

期末速成数据库极简版【存储过程】(5)

目录 【7】系统存储过程 【8】用户存储过程——带输出参数的存储过程 创建存储过程 存储过程调用 【9】用户存储过程——不带输出参数的存储过程 【7】系统存储过程 系统存储我们就不做过程讲解用户存储过程会考察一道大题,所以我们把重点放在用户存储过程。…

老年女性认知功能低于男性 |CHARLS CLHLS CFPS公共数据库周报(11.29)

欢迎参加郑老师2023年孟德尔随机化课程即将开始 发表文章后退款!郑老师科研统计课程详情 CHARLS公共数据库 CHARLS数据库简介中国健康与养老追踪调查(China Health and Retirement LongitudinalStudy,CHARLS)是一项持续的纵向调查,旨在调查中…

Java设计模式-工厂模式

目录 一、简单工厂模式 (一)需求 (二)使用传统的方法来完成 (三)传统方法的优缺点 (四)基本介绍 (五)使用简单工厂模式 二、工厂方法模式 &#xff0…

基于 ESP32-S3 的 Walter 开发板

Walter 是一款基于 ESP32-S3 且拥有 5G LTE 连接功能的新型开源开发套件。 近日,比利时公司 DPTechnics BV 推出了一款基于乐鑫 ESP32-S3 且拥有 5G LTE 连接功能的新型开源开发套件。该套件即将在 Crowd Supply 平台上发布,您可以点击此处了解详情。 无…

vm虚拟机固定IP

最近使用vm虚拟机 ,可用了一段时间ip就自动变化,于是去网上看了不少教程,但很多都没用。 1.编辑配置 vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改BOOTPROTO为static加入属性IPADDR,设置你想要设置的ip配置GATEWAY与DNS1 不配置GA…