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