所以我设法让mongodb启动并运行,在管理数据库中添加了一个超级管理员用户,在我的测试表中添加了一个本地管理员用户。我已经开始使用
了mongod --dbpath ./ --auth
但是如果我跑
mongo
从终端,我无法进行任何修改或阅读,但我似乎仍然能够使用
来嗅探数据库use <DBNAME>
如果没有提供用户名和密码,有没有办法可以完全拒绝与mongod实例的连接?
答案 0 :(得分:4)
这里有一个误解,use <dbname>
无论数据库是否存在都会有效,没有信息泄漏,因为它们无法运行show databases
或show collections
来确认某些内容确实存在(因为他们没有足够的权限)。非认证会话并不比原始TCP套接字更好,它看起来更像是因为您使用mongo shell
作为客户端(您也可以运行mongo --nodb
并执行操作但这并不意味着任何事情都受到了损害,在那种情况下甚至没有与数据库的连接)。
因此,您要求的是在建立TCP连接之前拒绝连接的方法。但是,您必须首先在实际进行身份验证之前建立TCP连接(否则,您如何与数据库进行身份验证?),因此在考虑分布式数据库的工作方式时,这确实没有多大意义。
如果您想拒绝除可信IP地址以外的连接并锁定等等,那么这通常是一个好主意,但它是在数据库外部,iptables
或您选择的防火墙中完成的。