授权常见的模式分两种
test
为例,use test
,然后进行相关的授权grantRolesToUser
。新创建用户时,以rsq
用户为例,需要在test
数据库中进行用户的创建,注意rsq
跟其它数据库的用户不通用,如果需要在test2
数据库中给rsq
用户授权,则需要在test2中也创建rsq用户。此时mongo连接串需要指定相对应的数据库才可以登录,否则会报认证失败。admin
数据库中,先对用户进行admin
数据库的权限授权,如dbAdmin
,授权完再给普通数据库授权,这种情况不需要再进入到普通数据库创建用户,用户是全局生效的。此时mongo连接串不需要指定具体的数据库名称也可以登录连接串:mongodb://test:xxxxx@mongo.rsq.cn:27017/?tls=false&authSource=test1
# 新建数据库
use test1# 新建一个测试collection
# 默认一个db中没有collection,show dbs是看不到这个数据库的
db.site.insert({"name":"test1"})# 查看数据库
show dbs# 给新数据库创建用户,密码跟之前保持一致
db.createUser({user: "test",pwd: "xxxxx",roles: [ { role: "dbOwner", db: "test1" } ]})# 如果需要角色授权,则有如下命令
db.runCommand({grantRolesToUser: "test",roles:[{ role: "dbAdminAnyDatabase", db: "admin" }]}
)
连接串:mongodb://test:xxxxx@mongo.rsq.cn:27017/?tls=false
# 需要进入到admin数据库授权多个数据库给同一个用户
use admin# 创建用户
db.createUser({user: "test",pwd: "xxxxx",roles: [{ role: "dbAdmin", db: "admin" },{ role: "dbOwner", db: "test1" },{ role: "dbOwner", db: "test2" },{ role: "dbOwner", db: "test3" }]
})
# 查看db相关权限
db.runCommand({rolesInfo: { role: "readWrite", db: "" },showPrivileges: true}
)# 查询用户
db.getUsers();
show users# 删除用户
db.dropUser('admin')# 修改用户密码
db.updateUser('admin', {pwd: '111111'})# 创建管理员用户,需要使用admin数据库
use admin
db.createUser({user: "test",pwd: "xxxxx",roles: [ { role: "dbAdmin", db: "test" } ]})# 回收用户角色
db.revokeRolesFromUser("test",[{ role: "root", db: "admin" }]
)# 删除数据库
use percepai-cowa3d-corolla-v56tion
db.dropDatabase()