测试都是进行的匿名操作,非安全模式
在数据库中创建的第一个用户应该是具有管理其他用户的权限的用户管理员
创建一个管理员用户
>use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "passwd",
roles: ["userAdminAnyDatabase"]
}
)
重启 mongod 进程
docker stop mymongo && docker rm $_
启动 mongod 带身份认证
docker run --name mymongo -v /mymongo/data:/data/db -d mongo:4 mongod --auth
linux 启动身份认证
sudo bin/mongod --auth --dbpath /data/db
进行身份验证
进入 mongo 容器
docker exec -it mymongo bash
使用参数进行身份验证启动 mongo shell
mongo -u "myUserAdmin" -p "passwd" --authenticationDatabase "admin"
使用 db.auth()进行身份验证
mongo 默认启动mongo shell
>use admin
db.auth("myUserAdmin","passwd")
权限(在那里 + 做什么)
{resource: {db: "test", collection: "" }, actions: ["find","update"] }
角色(一组权限的集合)
默认内置角色:
创建自己定义的角色
###创建一个只能读取demo集合的用户
>use test;
db.createRole(
{
role: "readDemo",
privileges: [
{resource: {db: "test", collection: "demo"}, actions: ["find"]}
],
roles: []
}
)
创建一个只能读取 test 数据库的用户
要以管理员身份登录
mongo -u "myUserAdmin" -p "passwd" --authenticationDatabase "admin"
创建用户
>use test
db.createUser(
{
user: "testReader",
pwd: "passwd",
roles: [ { role: "read",db: "test" } ]
}
)
验证
exit #退出管理员用户
mongo -u "testReader" -p "passwd"
#以新创建用户登录,后面不加参数默认操作test数据库
可 find() 不可以进行更改写入
创建一个只能读取 demo 集合的用户
>use test
db.createUser(
{
user: "demoReader",
pwd: "passwd",
roles: ["readDemo"]
}
)
将数据导出为 json 或 csv 格式文件
需要对数据库有 read 权限
创建执行 mongoexport 的用户
使用 mongo shell 创建用户
使用有用户管理员权限的用户启动 mongo shell
mongo -u "myUserAdmin" -p "passwd" --authenticationDatabase admin
创建一个可读用户
>use admin;
db.createUser(
{
user: "readUser",
pwd: "passwd",
roles: ["readAnyDatabase"]
}
)
退出 mongo shell
mongoexport --db test --collection demo --type=csv --fields name,age --out /opt/backups/demos.csv -u readUser -p passwd --authenticationDatabase admin
fields——导出字段名称(可以导出内嵌文档字段)必须有这个字段
out——导出文件路径
查看导出文件
cat /opt/backups/demos.csv
mongoexport --db test --collection demo --type=json --fields name,balance --out /opt/backups/demo.json -u readUser -p passwd --authenticationDatabase admin
id 文档主键会被默认导出
--fields 选项可选的
mongoexport --db test --collection demo --type=json --out /opt/backups/demo.json -u readUser -p passwd --authenticationDatabase admin
使用查询语句进行筛选
mongoexport --db test --collection demo --type=json --fields name,balance --out /opt/backups/demo.json -u readUser -p passwd --authenticationDatabase admin --query '{ age: { $gte:20} }'
指定 ip 和 port
mongoexport --db test --collection demo --type=json --fields name,balance --out /opt/backups/demo.json -u readUser -p passwd --authenticationDatabase admin --host localhost --port 27017
--limit , --skip , --sort 选项
mongoexport --db test --collection demo --type=json --fields name,balance --out /opt/backups/demo.json -u readUser -p passwd --authenticationDatabase admin --sort '{age: 1}' --limit 3 --skip 1
将数据由 json 或 csv 格式文件导入
需要对数据库有 readWrite 权限
创建执行 mongoexport 的用户
使用 mongo shell 创建用户
使用有用户管理员权限的用户启动 mongo shell
mongo -u "myUserAdmin" -p "passwd" --authenticationDatabase admin
创建一个可读写用户
>use admin;
db.createUser(
{
user: "writeUser",
pwd: "passwd",
roles: ["readWriteAnyDatabase"]
}
)
退出 mongo shell
查看上次导出的文件
cat /opt/backups/demos.csv
###
name,age
zs,22
12,
ww,
qq,12
qq,12
ww,24
导入文件
mongoimport --db test --collection importDemo --type csv --headerline --file /opt/backups/demos.csv -u writeUser -p passwd --authenticationDatabase admin
查看导入文档
mongo -u readUser -p passwd --authenticationDatabase admin --quiet --eval 'db.importDemo.find()'
mongoimport --db test --collection importDemo --type json --file /opt/backups/demos.json -u writeUser -p passwd --authenticationDatabase admin --upsertFiles name,age
mongodump -h localhost:27017 -u root -p root --authenticationDatabase admin -d test -c demo -o /home/xiaohao/ --gzip
-d 备份指定数据库
-c 备份指定集合
-o 指明导出的文件名
-- excludeCollection = demo 除了 demo 集合都进行备份
-q 指定过滤条件
--authenticationDatabase 身份验证
--gzip 对备份进行压缩
mongorestore -h localhost:27017 -u root -p root --authenticationDatabase admin -d test -c demo --drop /home/xaiohao/test/
该部分参考:https://www.cnblogs.com/clsn/p/8244206.html#auto_id_9