跳到主要内容

1 篇博文 含有标签「Develop」

查看所有标签

· 阅读需 2 分钟
xu gao

开发过程中有时会遇到用户名和密码明明是对的 程序里死活都连接不上提示没有权限的问题,根源在配置和mongo的认证机制上。

首先在你连接 MongoDB 前要确定的是你应该认证身份的数据库和你要使用的数据库

参考一下表格获得更好的理解

Connection parametersAuthentication databaseCurrent database
mongo -u user -p pwd --authenticationDatabase admin myDBadminmyDB
mongo -u user -p pwd myDBmyDBmyDB
mongo -u user -p pwd --authenticationDatabase adminadmintest
mongo -u user -p pwd --host localhost:27017admintest
mongo -u user -p pwdadmintest
mongo -u user -p pwd localhost:27017testtest
mongosh -u user -p pwd localhost:27017admintest

URI 方式

Connection stringAuthentication databaseCurrent database
"mongodb://user:pwd@hostname/myDB?authSource=admin"adminmyDB
"mongodb://user:pwd@hostname/myDB"myDBmyDB
"mongodb://user:pwd@hostname?authSource=admin"admintest
"mongodb://user:pwd@hostname"admintest

大多数情况是你没有指定 authSource 同时 要连接的数据库和用户不在一个库里,比如你创建了 admin 用户在 admin 库但是你要连接的是xxDB 导致的。

如上述 比如你填写的 URI 是 mongodb://user:pwd@hostname/myDB 那么就会报错。 修改成 mongodb://user:pwd@hostname/myDB?authSource=admin 就好了,

authSource是用户所在的数据库 /myDB 是你要连接的数据库。 这里背后其实有个逻辑 如果你的用户配置的是 userAdminAnyDatabase 权限一般会创建在 admin 库 这样在连接其他的库的时候必须指定 上述两个参数才可以。