背景
MongoDB安装之后,默认是无需用户名称跟密码就能直接连接,这会有一定的安全隐患,需要开启登录认证。
创建超级管理员root
账号
首先,查看当前有无用户
#进入mongodb shell
mongo
#查看当前所有数据库
show dbs
#进入amdin数据库
use admin
# 查看当前有无管理员
show users
其次,创建root
账号作为超级管理员,在admin
数据库上面
#创建账号
db.createUser({user: 'root', pwd: 'root',roles: ['root']})
启用登录认证
修改数据库配置文件mongodb.conf
,设置auth=true
。一般是在/usr/lib/mongodb
路径在,假如不是,可以使用whereis mongodb.conf
命令查找。
#进入目录
cd /usr/lib/mongodb
#修改配置,设置`auth=true`
vim ./mongodb.conf
重启数据库,使修改生效
#先查看进程
ps aux | grep mongodb
#再杀掉进程,8827是上面查到的进程
kill -2 8827
#最后重启数据库
cd /usr/lib/mongodb/bin
mongod -f ../mongodb.conf
为其他数据库创建用户
当前的root
账号不能用来连接其他数据库,但是可以管理其他数据。
#登录数据库
mongo
#使用root认证
db.auth('root', 'root')
#认证之后,进入其他数据库,比如`logs`数据库
use logs
#为logs创建账户
#注意:需要设置`readWrite`才能有读写权限
db.createUser({user: 'admin', pwd: 'admin',roles: ['dbAdmin', 'readWrite']})
创建完之后就可以使用admin
账号连接logs
数据库了,且具有读写权限。
MongoDB内置角色
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复角色:backup、restore
- 所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
内置角色功能
- read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
官方文档: 角色