MongoDB基础配置手册

基于Docker的建立

创建数据库

docker run -d -p 27017:27017 —name mongo \
  -e MONGO_INITDB_ROOT_USERNAME=root \
  -e MONGO_INITDB_ROOT_PASSWORD=mypassword \
  -e MONGO_INITDB_DATABASE=myfirstdb \
  -v /my/own/datadir:/data/db \
  mongo:4

在使用了MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD后,容器脚本将自动创建一个具有完全权限的账号,并在启动mongod时指定—-auth开启身份验证。

创建备份

建立在Docker中的MongoDB可以使用下面的语句来建立备份:

docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive

访问控制

注意:启动mongod时应使用—auth才会开启访问控制。 如果admin库中没有任何用户的话,即使在其他数据库创建用户,无论是否启用访问控制,默认的连接方式依然会具有超级权限。

客户端可以在连接时进行身份验证:

mongo --port 27017 -u "username" -p "password" --authenticationDatabase "admin"

亦可在连接客户端后进行验证:

mongo --port 27017

use admin
db.auth("username", "password")
// 输出1即认证成功

创建用户

use foo

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

注意:use foo表明用户在foo库中创建,就一定要由foo库验证身份,即用户的信息跟随随数据库。如上述username虽然有bar库的读取权限,但是一定要先在foo库进行身份验证,直接访问会提示验证失败。

角色

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