MongoDb安全与权限

一、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 存访备份的路径

官方文档:https://docs.mongodb.com/manual/sharding/

社区:https://mongoing.com/archives/docs/mongodb初学者教程/mongodb分片

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章