如何拒绝未经身份验证的 mongodb 连接

use*_*202 3 authentication connection mongodb

所以我设法让 mongodb 启动并运行,在 admin db 中添加了一个超级管理员用户,在我的测试表中添加了一个本地管理员用户。我已经开始了 mongod

mongod --dbpath ./ --auth
Run Code Online (Sandbox Code Playgroud)

但是,如果我跑

mongo 
Run Code Online (Sandbox Code Playgroud)

从终端,我无法执行任何修改或读取,但我似乎仍然能够使用

use <DBNAME>
Run Code Online (Sandbox Code Playgroud)

如果没有提供用户名和密码,有没有办法完全拒绝连接到 mongod 实例?

Ada*_*ord 5

这里有一个误解,use <dbname>无论数据库是否存在都可以工作,没有信息泄漏,因为它们无法运行show databasesshow collections确认某些东西实际上存在(因为它们没有足够的权限)。未经身份验证的会话并不比原始 TCP 套接字更好,它看起来更像是因为您将其mongo shell用作客户端(您也可以运行mongo --nodb并执行某些操作,但这并不意味着任何事情都会受到损害,在这种情况下没有甚至不是与数据库的连接)。

因此,您要求的是一种在建立 TCP 连接之前拒绝连接的方法。但是,您必须先建立 TCP 连接,然后才能真正进行身份验证(否则您如何与数据库进行身份验证?)

如果您想拒绝来自可信 IP 地址之外的连接并锁定事物等,那么这通常是一个好主意,但它是在数据库之外、在iptables您选择的防火墙中完成的。