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数据库中可用。超级账号,超级权限