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

in hive-180932 •  2 years ago 

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的数据结构和字段

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!