Linux系统下mongosh命令行指定数据库并完成身份验证的方法及认证失败问题排查
解决MongoDB直接连接目标数据库时的认证失败问题
我太懂这种明明逻辑上应该行却卡壳的感觉了——你的用户权限配置没问题,就是连接时的认证逻辑没搞对,导致每次都得绕个弯切换数据库。
问题根源
你的mongoAdmin用户是在admin数据库下创建的,当你执行mongosh -u mongoAdmin -p '<password>' mongodb://127.0.0.1/db-name时,MongoDB会默认尝试在db-name数据库里查找并验证这个用户,但该用户只存在于admin库,自然就会报认证失败。
正确的连接命令
你只需要在连接时明确指定认证数据库,就能直接进入目标数据库,有两种简单的实现方式:
方式一:用命令行参数指定认证库
mongosh -u mongoAdmin -p '<password>' --authenticationDatabase admin mongodb://127.0.0.1/db-name
方式二:在连接字符串里加authSource参数
mongosh "mongodb://mongoAdmin:<password>@127.0.0.1/db-name?authSource=admin"
这两种方式都会让MongoDB先去admin数据库验证你的用户身份,验证通过后自动切换到db-name,不用再手动敲use db-name。
额外小提示
你的mongoAdmin角色是userAdminAnyDatabase,这个角色主要用来管理所有数据库的用户,但本身没有读写数据库数据的权限。如果之后需要操作db-name里的数据,记得给用户补加对应权限,比如:
use admin db.grantRolesToUser("mongoAdmin", [{ role: "readWriteAnyDatabase", db: "admin" }])
内容的提问来源于stack exchange,提问作者One Guy Hacking
相关产品推荐
相关产品推荐

