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()