一、Mongodb 数据库角色
1.数据库用户角色:
read :提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespaces
readWrite: 包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限.
2.数据库管理角色:
dbOwner:该数据库的所有者,具有该数据库的全部权限。
dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。(参考)
userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。
3.集群管理角色:
clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。
clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能)
clusterMonitor:仅仅监控集群和复制集。
hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。
4.备份恢复角色:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。
5.所有数据库角色:
readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。
readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。
userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
6.超级用户角色:root。
7.内部角色:__system
官方实例:
use products # mongoDB的权限设置是以库为单位的,必选要先选择库
db.createUser(
{ "user" : "accountAdmin01",
"pwd": "cleartext password",
"customData" : { employeeId: 12345 },
"roles" : [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite" ] },
{ w: "majority" , wtimeout: 5000 } ) # readWrite 适用于products库,clusterAdmin与readAnyDatabase角色适用于admin库
前提:
1.开启权限验证 修改mongod.cfg文件
配置:
security: authorization:enabled
创建超级管理员:
use admin;
db.createUser({ user:'admin', pwd:'123456', roles:[{role:'root',db:'admin'}] })
给单个库设置管理员:
use zhw
db.createUser( { user:"zhwadmin", pwd:"123456", roles:[{role:"dbOwner",db:"zhw"}] } )
Mongodb 账户权限配置中常用的命令:
1、show users; #查看当前库下的用户
2、db.dropUser("zhwadmin") #删除用户
3、db.updateUser("admin",{pwd:"password"}); #修改用户密码
4、db.auth("admin","password"); #密码认证
备份:
(1)mongoexport/mongoimport #导入/导出的是JSON格式或者CSV格式 1.跨平台迁移 2.同平台,跨大版本
(2)mongodump/mongorestore #导入/导出的是BSON格式 日常备份恢复使用
备份工具区别:
(1)JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
(2)BSON格式兼容性不好。
(3)JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。
命令参数说明:
mongoexport --help
#参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导出那些列
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
--authenticationDatabase admin:验证库
mongoimport --help
#参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导入那些列
mongodump --help
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
-j, --numParallelCollections= number of collections to dump in parallel (4 by default)
--oplog 备份的同时备份oplog
格式:
mongoexport/mongoimport :
-- 单表备份至json格式
mongoexport -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 -c 集合名称 -o /mongodb/log.json
#注意:备份文件的名字可以自定义,默认导出了JSON格式的数据
-- 单表备份至csv格式
mongoexport -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 -c log --type=csv -f uid,name,age,date -o /mongodb/log.csv
恢复
-- 当csv格式的文件头行,有列名字
mongoimport -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 -c 集合名称 --type=csv --headerline --file /mongodb/log.csv
-- 当csv格式的文件头行,没有列名字 ==>手工添加列名
mongoimport -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 -c 集合名称 --type=csv -f id,name,age,date --file /mongodb/log1.csv
id,name,age,date是log1.csv的列名
mongodump/mongorestore:
-- 全库备份
mongodump -u账号 -p密码 --port 端口--authenticationDatabase admin -o 放置路径(如:/mongodb/backup)
-- 备份某个库
mongodump -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 -o 放置路径(如:/mongodb/backup)
--备份某个库下的某个集合
mongodump -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名-c 集合名称 -o 放置路径(如:/mongodb/backup)
-- 压缩备份
mongodump -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 -o 放置路径(如:/mongodb/backup) --gzip #压缩备份某个整个数据库
-- 恢复某个库
mongorestore -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 备份的路径
--恢复某个库下的某个集合
mongorestore -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 -c 集合 --gzip 存访备份的文件路径
--drop表示恢复的时候把之前的集合drop掉(危险)
mongorestore -u账号 -p密码 --port 端口 --authenticationDatabase admin -d 库名 --drop 存访备份的路径