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_USERNAME
与MONGO_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数据库中可用。超级账号,超级权限