注意!!!一定要给 MongoDB 初始化管理员账号,并开启 MongoDB 的安全认证。

不同于 MySQL 的账号密码管理,MongoDB 的账号密码是基于特定数据库的,而不是整个 MongoDB 系统。

也就是说,创建的每个账号密码,只能访问操作一个数据库。

创建管理员账号:

  1. # 连接 MongoDB
  2. $ bin/mongo
  3. # 切换到 admin 库
  4. > use admin;
  5. # 创建管理员账号
  6. > db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
  • user :账号。
  • pwd :密码。
  • role :角色。
  • db:所属数据库。

在 MongoDB 中,用户是基于角色(role)授权。内置角色如下:

内建的角色

  • 数据库用户角色 :read、readWrite
  • 数据库管理角色 :dbAdmin、dbOwner、userAdmin
  • 集群管理角色 :clusterAdmin、clusterManager、clusterMonitor、hostManager
  • 备份恢复角色 :backup、restore
  • 所有数据库角色 :readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  • 超级用户角色 :root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner、userAdmin、userAdminAnyDatabase)

角色说明:

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

开启安全认证

编辑 mongodb.conf 配置文件,增加 auth=true 配置项。

重启

  1. # 查找 MongoDB 进程,并关闭它
  2. $ ps -ef | grep mongodb
  3. $ kill 2382 # 假设我们找到的 MongoDB 进程号为 2382 。
  4. # 启动 MongoDB 进程
  5. $ bin/mongod -f mongodb.conf

认证

  1. # 连接 MongoDB
  2. $ bin/mongo
  3. # 切换到 admin 库
  4. > use admin;
  5. # 查看 collection 列表,此时会报错
  6. > show collections;
  7. Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus
  8. # 认证
  9. > db.auth('useradmin', 'adminpassword');
  10. # 查看 collection 列表,此时正常
  11. > show collections;


查看已存在的用户

  1. db.system.users.find()

删除用户

  1. db.system.users.remove({user:”simpleUser”})