MongoDB的权限和角色 / 网络研习社#83

in STEEM CN/中文last year

auth.jpg

用户权限管理

mongosh  
user admin // 进入admin

//创建一个超级用户 用户名admin 密码5615 权限root
db.createUser( { user:"root", pwd:"pwd", roles:["root"] })  
eg: db.createUser({user:"admin",pwd:"5615 ",roles:["root"]})   //{ ok: 1 }

//账号授权:用户名 密码。 回车,返回1,认证成功。
db.auth("admin","5615 ") //{ ok: 1 }  对数据库授权,即登录数据库,否则将不能正常操作。
db.system.users.find().pretty()  //查看

//创建一个业务数据库管理员用户
db.createUser({
    user:"jiang001",
    pwd:"123456",
    roles:[
        {role:"readWrite",db:"users"}
    ]
})
db.createUser({
    user:"user001",
    pwd:"123456",
    customData:{
        name:'jim',
        email:'[email protected]',
        age:18,
    },
    roles:[
        {role:"readWrite",db:"db001"},
        {role:"readWrite",db:"db002"},
        'read'// 对其他数据库有只读权限,对db001、db002是读写权限
    ]
})

//创建admin管理员用户   
//并不能直接操作数据库 not authorized on users to execute command
db.createUser({
    user:"jiang002",
    pwd:"1234567",
    roles:[
        {role:"dbAdmin",db:"users"}
    ]
})

//创建admin超级管理员用户
db.createUser(  
  { user: "admin",  
    customData:{description:"superuser"},
    pwd: "admin",  
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  
  }  
) 

说明:
user字段,为新用户的名字;
pwd字段,用户的密码;
cusomData字段,为任意内容,例如可以为用户全名介绍,可省略;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。
超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。
db是指定数据库的名字,admin是管理数据库。
不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。 

数据库用户角色

数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManage;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
内部角色:__system

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusterAdmin:必须在admin数据库中定义,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase:必须在admin数据库中定义,赋予用户所有数据库的读权限
readWriteAnyDatabase:必须在admin数据库中定义,赋予用户所有数据库的读写权限
userAdminAnyDatabase:必须在admin数据库中定义,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:必须在admin数据库中定义,赋予用户所有数据库的dbAdmin权限
root:必须在admin数据库中定义,超级账号,超级权限

和用户管理相关的操作基本都要在admin数据库下运行,要先use admin;
如果在某个单一的数据库下,那只能对当前数据库的权限进行操作;

//查看创建的用户
show users 或 db.system.users.find() 或 db.runCommand({usersInfo:"userName"})

//修改密码
db.changeUserPassword("username", "xxx")

//删除数据库用户
db.dropUser('user001')

数据库最大化安全和最小化用户权限

  1. 数据库运行以权限方式打开, mongod --config /etc/mongod.conf --auth
  2. mongod.conf中设置IP限制, 只允许本机访问,禁止其它远程终端的可能性:
    bindIp: 127.0.0.1
  3. 只创建一个root用户以管理整个数据库,以后台使用。
  4. root用户创建一个普通用户,用于数据库的读写等业务操作。
    db.createUser({ user:"jiang001", pwd:"123456", roles:[ {role:"readWrite",db:"users"} ] })

系列文章

MongoDB的安装与运行
Mongoose操作数据库
Bcrypt给用户系统加密
MongoDB的数据结构和字段

Coin Marketplace

STEEM 0.20
TRX 0.14
JST 0.030
BTC 64870.15
ETH 3489.66
USDT 1.00
SBD 2.54