MongoDB:无需日志,如何在线获取连接对应的认证用户?
嘿,这个问题问得很实用!不用翻日志就能拿到连接的认证用户信息完全可行,我给你分享两种靠谱的方法:
方法1:用带参数的
db.currentOp()直接获取 默认的db.currentOp()返回的信息比较精简,不会包含认证用户,但只要加上特定参数,就能让它返回更详细的连接元数据,包括用户身份。
如果你想查看所有活跃连接的用户信息,执行这条命令:
db.currentOp({ "active": true })
要是你只想定位特定的connectionId(比如你提到的38932837),可以精准过滤:
db.currentOp({ "connectionId": 38932837 })
在返回的结果文档里,找到对应连接的条目,里面会有一个user字段,显示的就是这个连接当前的认证用户(比如你的例子里的mark)。
⚠️ 注意:这个功能需要MongoDB 3.2及以上版本支持,而且你得有clusterMonitor这类权限才能查看这些敏感信息。
方法2:查询
system.profile集合(需开启Profiler) 如果你之前开启了数据库的Profiler功能,system.profile集合会记录所有操作的细节,包括每个连接的认证用户。你可以这样查询特定连接的用户:
db.system.profile.find({ "connectionId": 38932837 }) .limit(1) .sort({ "$natural": -1 })
返回的文档里的user字段就是你要找的内容。不过要提醒你,Profiler默认是关闭的,开启它会有一定性能开销,适合临时排查问题时使用,用完记得关闭。
额外小贴士
- 不管用哪种方法,都需要你拥有对应的权限:方法1需要
clusterMonitor,方法2需要read权限访问system.profile集合。 - 如果目标连接还没执行过任何操作,
system.profile里可能没有记录,这时候方法1会更可靠。
内容的提问来源于stack exchange,提问作者JAR.JAR.beans
相关产品推荐
相关产品推荐

