MongoDB 验证登录

1 用户(管理员)管理

添加管理员

use admin; //管理员 只能 添加到 admin 数据库下


db.createUser(
  {
    user: "adminUser",
    pwd: "adminPass",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

添加普通用户

use dbName; //所有数据库下 都可以添加普通用户

db.createUser(
  {
    user: "simpleUser",
    pwd: "simplePass",
    roles: [ { role: "readWrite", db: "foo" },
             { role: "read", db: "bar" } ]
  }
)

过程类似创建管理员账户,只是 role 有所不同

一点需要注意,如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,默认的连接方式依然会有超级权限

角色

  • read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

用户操作

//查找指定用户
db.getUser(username)

//查找全部用户
db.getUsers();
show users;


//修改用户
db.updateUser(
   "<username>",
   {
     roles : [
               { role: "<role>", db: "<database>" } | "<role>",
               ...
             ],
     pwd: "<cleartext password>"
    }
)

//修改用户密码
db.changeUserPassword(username, password)

//删除用户
db.dropUser(username);

2 验证登陆

第一种方式,连接mongoDB服务器后再验证

mongo
db.auth(user, pwd)

第二种方式, 连接的时候指定用户名密码

mongo -u username -p pwd host:port/dbName

启动带访问控制的MongoDB服务器

mongod --auth --config ...

3 MongoDB 安全问题

results matching ""

    No results matching ""