mongodb 数据库默认启动是开放的,通过 27017 端口就可以直接进去,这样是极其不安全的,所以需要加入 --auth 参数来开启认证

创建 mongodb 角色

首先通过mongod --dbpath ./data开启 mongodb 数据服务,然后使用 admin 数据库

use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
// 控制台输出
Successfully added user:
{
"user": "myUserAdmin",
"roles": [
{
"role": "userAdminAnyDatabase",
"db": "admin"
}
]
}

认证测试

db.auth("myUserAdmin", "abc123");

连接方法

mongo --port 27017 -u myUserAdmin -p abc123 admin

进入 admin 数据库后,输入show collections;

发现报错?

listCollections failed: {
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listCollections: 1.0 }",
"code" : 13
}

原因是我们只创建了用户管理的角色,还没创建数据库对应的权限

分配数据库权限

针对已有的角色分配数据库权限

// 分配admin用户read权限
db.grantRolesToUser("myUserAdmin", [{role: "read", db: 'admin'}])
// 结果
> show collections;
system.indexes
system.users
system.version

取消用户数据库权限

db.revokeRolesFromUser("myUserAdmin", [{role: 'read', db: 'admin'}])

创建数据库角色和权限

// 进入test数据库
use test
// 创建test的管理用户
db.createUser(
{
user: "myTester",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "test" }, // 对test读写权限
{ role: "read", db: "reporting" } ] // 对reporting只有读权限
}
)
// show users 查看新建的用户

查看所有的用户

use admin
db.system.users.find()