暂无图片
MongoDB用户权限的问题---使用超级管理员root用户登录数据库实例的问题
我来答
分享
dong
2020-04-02
MongoDB用户权限的问题---使用超级管理员root用户登录数据库实例的问题

use admin
然后创建了一个root用户,角色是root
db.createUser({ user: “root”, pwd: “root”, roles: [{ role: “root”, db: “admin” }] })
然后又创建了个普通用户
use test
db.createUser({ user: “db”, pwd: “db”, roles: [{ role: “readWrite”, db: “test” }] })
使用客户端工具使用root,root和db,db登录数据库都没有问题。
现在的问题是我想使用超级管理员用户root,登录test,就有问题,这个不太明白。
麻烦大家指导一下

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
张冲

目测是 mongo认证库问题:

1、成功
root@zhc-dba-mysql-test-01:/etc/systemd/system# /opt/mongodb40001/bin/mongo 127.0.0.1:40001/admin -uroot -p’mongodb123!’
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:40001/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { “id” : UUID(“388ae8ac-4563-4b3b-89d3-2ae0d99d7acd”) }
MongoDB server version: 4.2.2
mongos> db
admin
mongos> exit
bye

2、失败
root@zhc-dba-mysql-test-01:/etc/systemd/system# /opt/mongodb40001/bin/mongo 127.0.0.1:40001/test -uroot1 -p’root1’
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:40001/test?compressors=disabled&gssapiServiceName=mongodb
2020-04-02T16:05:00.158+0800 E QUERY [js] Error: Authentication failed. :
connect@src/mongo/shell/mongo.js:341:17
@(connect):2:6
2020-04-02T16:05:00.161+0800 F - [main] exception: connect failed
2020-04-02T16:05:00.161+0800 E - [main] exiting with code 1

3、成功
root@zhc-dba-mysql-test-01:/etc/systemd/system#
root@zhc-dba-mysql-test-01:/etc/systemd/system# /opt/mongodb40001/bin/mongo 127.0.0.1:40001/test -uroot1 -p’root1’ --authenticationDatabase admin
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:40001/test?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { “id” : UUID(“b7050e3b-0044-47a9-bbbb-e19c6e69f3c6”) }
MongoDB server version: 4.2.2
mongos> db
test

正确方式:

方法1:创建用户时,认证库 指定为 连接库
方法2:认证后使用 use 切库
方法3: 连接的时候,即指定连接库,又指定认证库

暂无图片 评论
暂无图片 有用 0
dong

首先感谢指导。
主要是程序需要这么做,使用超级用户连接不定的某个数据库。方法1创建用户时,认证库 指定为 连接库,有些疑惑,麻烦指导一下。是指的db.createUser({ user: “db”, pwd: “db”, roles: [{ role: “readWrite”, db: “test” }] })这种方式吗

暂无图片 评论
暂无图片 有用 0
dong

或者这种方式
db.createUser(
{
user:“admin”,
pwd:“admin”,
roles:[{role:“root”, db:“admin”},{“role”:"readWrite,“db”:“home”}]
}
)

暂无图片 评论
暂无图片 有用 0
张冲

我的理解是:
认证库在创建用户的时候,最好统一指定为admin库
在应用连接时同时指定业务库与认证库(业务库用于切换到指定业务库,认证库用于用户权限认证 -->也就是我列出来的第三种形式)

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏