MongoDB安全认证之用户、角色相关操作
MongoDB 默认是没有账号的,可以直接连接,⽆须身份验证。这就导致任何用户只要可能进入MongoDB数据库就可以对该数据库进行任意操作——在实际项⽬中这样的后果不堪设想,肯定是要权限验证的。
官网Security — MongoDB Manual提供了安装方面的详细介绍。本文主要关注用户、角色相关操作,具体就是:
一、用户相关操作
1、切换到admin数据库对⽤户的添加
use admin;
db.createUser(userDocument):⽤于创建 MongoDB 登录⽤户以及分配权限的⽅法
db.createUser(
{
user: "账号", //创建的⽤户名称,如 admin、 root 等
pwd: "密码", //⽤户登录的密码
roles: [ //为⽤户分配的⻆⾊,不同的⻆⾊拥有不同的权限,参数是数组,可以同时设置多个
{ role: "⻆⾊", db: "安全认证的数据库" }, //⻆⾊, MonngoDB 已经约定好的⻆⾊,不同的⻆⾊对应不同的权限 后⾯会对role做详细解释
{ role: "⻆⾊", db: "安全认证的数据库" } //数据库实例名称,如 MongoDB 4.0.2 默认⾃带的有 admin、 local、 config、 test 等,即为哪个数据库实例设置⽤户
]
})
2、修改密码
db.changeUserPassword( 'root' , 'rootNew' );
3、⽤户添加⻆⾊
db.grantRolesToUser( '⽤户名' , [{ role: '⻆⾊名' , db: '数据库名'}])
4、以auth ⽅向启动mongod
./bin/mongod -f conf/mongo.conf --auth (也可以在mongo.conf 中添加security的配置)
5、验证⽤户
db.auth("账号","密码")
6、删除⽤户
db.dropUser("⽤户名")
二、角色相关操作
在createUser就使用到了roles,角色分为MongoDB内置角色和用户自定义角色。用户可以根据需要添加角色:
内置角色有:
read:允许⽤户读取指定数据库
readWrite:允许⽤户读写指定数据库
dbAdmin:允许⽤户在指定数据库中执⾏管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许⽤户向system.users集合写⼊,可以找指定数据库⾥创建、删除和管理⽤户
clusterAdmin:只在admin数据库中可⽤,赋予⽤户所有分⽚和复制集相关函数的管理权限
readAnyDatabase:只在admin数据库中可⽤,赋予⽤户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可⽤,赋予⽤户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可⽤,赋予⽤户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可⽤,赋予⽤户所有数据库的dbAdmin权限
root:只在admin数据库中可⽤。超级账号,超级权限
dbOwner:库拥有者权限,即readWrite、 dbAdmin、 userAdmin⻆⾊的合体
具体角色内容可参考官网Built-In Roles — MongoDB Manual中对内置角色进行的详细的说明,同时对不同角色也进行了分类,如下:
对于用于自定义角色可以参考官网User-Defined Roles — MongoDB Manual进行操作。MongoDB提供了用户自定义角色的接口,如db.createRole()
等,具体方法参见mongosh Methods — MongoDB Manual。