mongo数据库用户创建及权限授予

本文详细解析MongoDB的内置角色,包括数据库用户角色、管理角色、集群管理角色等,阐述了不同角色的权限范围及如何通过db.createUser()方法创建用户并分配特定角色,同时提供了修改用户密码、权限和删除用户的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础概念:

Built-In Roles(内置角色): 
1.数据库用户角色:read、readWrite; 
2.数据库管理角色:dbAdmin、dbOwner、userAdmin; 
3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 
4.备份恢复角色:backup、restore; 
5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 
6.超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase) 
7.内部角色:__system

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
backup,retore:在进行备份、恢复时可以单独指定的角色,在db.createUser()方法中roles里面的db必须写成是admin库,要不然会 报错
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限
dbOwner:The database owner can perform any administrative action on the database. This role combines the privileges granted by the readWrite, dbAdmin and userAdmin roles.
 

归纳起来就是用户角色分为管理和普通角色,用户管理和表管理,有些只能是admin数据库才能设置的权限。

另外每一个角色都是针对一个数据库来说的,而每一个用户的创建有事再一个数据库底下创建,就是要先use dbname,然后创建用户,而创建的时候可以是别的数据库role 比如:

{
    "_id" : "admin.admin",
    "userId" : UUID("146db95a-31a2-4778-b7c5-24f5b446bf1e"),
    "user" : "admin",
    "db" : "admin",
    "roles" : [
        {
            "role" : "clusterAdmin",
            "db" : "admin"
        },
        {
            "role" : "dbOwner",
            "db" : "admin"
        },
        {
            "role" : "dbAdminAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
{
    "_id" : "admin.user2",
    "userId" : UUID("7c686ffe-09ee-456c-bd15-69026e56b08a"),
    "user" : "user2",
    "db" : "admin",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "pre"
        },
        {
            "role" : "dbOwner",
            "db" : "use2"
        }
    ]
}

例如上面的admin用户有查看权限(所有数据库show collections),却没有其他db的读写权限,下面user2这个用户是创建在admin下面的,该用户对pre数据库和use2数据库分别由读写和所有权限。所以这块要注意人创建在哪个db下,可以操作哪个db。

下面附上一些db的权限密码相关操作:

show dbs          查看数据库
use dbname      进入数据库
show users        查看当前数据库用户权限
创建用户:
db.createUser({user:"usertest",pwd:"passtest",roles:[  {role:"clusterAdmin", db:"admin" }, {role:"readAnyDatabase",db:"admin" }, {role:"readWrite",db:"testDB" } ]})

修改密码:
方法1:db.changeUserPassword("usertest","changepass");
方法2:db.updateUser("usertest",{pwd:"changepass1"});

修改权限
db.updateUser("usertest",{roles:[ {role:"read",db:"testDB"} ]})
注:updateuser它是完全替换之前的值,如果要新增或添加roles而不是代替它 
则使用方法: db.grantRolesToUser() 和 db.revokeRolesFromUser()
db.grantRolesToUser("usertest",[{role:"readWrite",db:"testDB"},{role:"read",db:"testDB"}])     #修改权限
db.revokeRolesFromUser("usertest",[{role:"read", db:"testDB"}])   # 删除权限:

删除用户:db.dropUser('usertest')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值