MongoDB开启权限认证

392 阅读2分钟

背景

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

image.png

#再杀掉进程,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内置角色

  1. 数据库用户角色:read、readWrite
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
  4. 备份恢复角色:backup、restore
  5. 所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root

内置角色功能

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

官方文档: 角色