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分片

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