mongodb 数据库默认启动是开放的,通过 27017 端口就可以直接进去,这样是极其不安全的,所以需要加入 --auth
参数来开启认证
创建 mongodb 角色
首先通过mongod --dbpath ./data
开启 mongodb 数据服务,然后使用 admin 数据库
use admindb.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.indexessystem.userssystem.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 admindb.system.users.find()