MongoDB默认是不开启权限认证的,开启认证也很简单,在配置文件mongodb.conf里面加入auth = true 或者通过 --auth参数启动

一、具体操作步骤

1.首先开启mongod服务

mongod --port 27017 --dbpath /data/db1

2.连接数据库

mongo --port 27017

3.创建用户

use admin
db.createUser({user: "test", pwd: "123456", roles: [{role: "userAdminAnyDatabase", db: "admin"}] })

4.关闭mongod服务

use admin
db.shutdownServer()

5.这时重新启动mongod服务,添加 --auth 开启权限认证。

mongod --port 27017 --dbpath /data/db1 --auth
  • 如果是用配置文件启动的,则在配置中添加:
security:
  authorization: enabled

6.用户登录数据库

  • 方式一 :在连接服务器的同时进行用户认证
mongo --port 27017 -u "test" -p "123456" --authenticationDatabase "admin"
  • 方式二 :先连接服务器,然后在数据库内认证。
mongo --port 27017
use admin
db.auth("test","123456")

7.使用db.shutdownServer()报错的解决方法

  • 赋予hostManager权限:
db.grantRolesToUser( "admin" , [ { role: "hostManager", db: "admin" } ])

二、配置文件

  • 使用配置文件 启动 mongod -f ./mongodb/mongo.conf
# 数据库路径
dbpath=./mongodb/data
# 日志输出文件路径
logpath=./mongodb/logs/mongo.log
# 错误日志采用追加模式
logappend=true
# 启用日志文件,MongoDB的数据操作将会写入到journal文件夹的文件里
journal=true
# 安静输出,可以过滤掉一些无用的日志信息
quiet=true
# 启用验证
auth=true
# 守护进程
fork=true
# 端口号 默认为27017
port=27017

三、角色具体说明:

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