mongodb管理學習之keyfile認證
一、keyfile認證
1建立keyfile(祕鑰檔案)
1.1要求
(1)通過金鑰檔案進行身份驗證時,副本集中的每個mongo例項都使用金鑰檔案的內容作為與其他成員進行身份驗證的共享密碼。
只有擁有正確金鑰檔案的Mongod例項才能加入副本集。
(2)金鑰檔案的內容必須在6到1024個字元之間,並且對於副本集的所有成員必須是相同的。
1.2建立
您可以使用您選擇的任何方法生成金鑰檔案。例如,以下操作用於openssl生成用於金鑰檔案。
主要:key的長度必須是6-1024的base64字元,unix下必須相同組許可權,windows下不需要。
1.3更改許可權
chmod 600 ./mongodb.key
2將金鑰檔案複製到每個副本整合員上
將金鑰檔案複製到託管副本整合員的每個伺服器上。確保執行mongod例項的使用者是該檔案的所有者,並且可以訪問金鑰檔案。
scp [email protected]:XXX/mongodb.key /XXX
3登入到mongs 建立使用者
Use admin一定要用admin資料庫
db.createUser({user:"admin",pwd:"admin",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
4關閉分片加副本集的所有成員
5.在每個mongod的配置檔案中新增以下內容:
auth=true
keyFile=XXX/mongodb.key
在每個mongos的配置檔案中新增以下內容:
keyFile=XXX/mongodb.key
5.從新啟動叢集,啟動順序為
配置-->分片-->副本
備註:最好建立一個全域性許可權的賬戶,不然如果忘記了使用者和密碼就不太方便了。
二、附件
1.資料庫角色
針對Mongodb資料庫中的各種角色進行說明
資料庫訪問
角色名稱 |
擁有許可權 |
read |
允許讀取指定資料庫的角色 |
readWrite |
允許讀寫指定資料庫的角色 |
資料庫管理
角色名稱 |
擁有許可權 |
dbAdmin |
允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system.profile |
userAdmin |
允許管理當前資料庫的使用者,如建立使用者、為使用者授權 |
dbOwner |
資料庫擁有者(最高),集合了dbAdmin/userAdmin/readWrite角色許可權 |
叢集管理
角色名稱 |
擁有許可權 |
clusterAdmin |
叢集最高管理員,集合clusterManager/clusterMonitor/hostManager角色許可權 |
clusterManager |
叢集管理角色,允許對分片和副本集叢集執行管理操作,如addShard,resync等 |
clusterMonitor |
叢集監控角色,允許對分片和副本集叢集進行監控,如檢視serverStatus |
hostManager |
節點管理角色,允許監控和管理節點,比如killOp、shutdown操作 |
備份恢復
角色名稱 |
擁有許可權 |
backup |
備份許可權,允許執行mongodump操作 |
restore |
恢復許可權,允許執行mongoresotre操作 |
資料庫通用角色
角色名稱 |
擁有許可權 |
readAnyDatabase |
允許讀取所有資料庫 |
readWriteAnyDatabase |
允許讀寫所有資料庫 |
userAdminAnyDatabase |
允許管理所有資料庫的使用者 |
dbAdminAnyDatabase |
允許管理所有資料庫 |
特殊角色
角色名稱 |
擁有許可權 |
root |
超級管理員,擁有所有許可權 |
__system |
內部角色,用於叢集間節點通訊 |
2.使用者管理
新增使用者
通過mongo shell終端操作,使用者儲存在admin資料庫system.user集合中
新增普通使用者
切換到需要新增使用者的db
use xxxx
執行新增
db.createUser( { user:"username", pwd:"password", roles:[ {role:"read", db:"xxxx"}, {role:"readWrite", db:"test"} ] } ) |
新增超級使用者
切換到admin資料庫
use admin
執行新增
db.createUser( { user:"username", pwd:"password", roles:[ {role:"root", db:"admin"} ] } ) |
刪除使用者
切換到使用者授權的db
use xx
執行刪除操作
db.dropUser("username")
更新使用者
切換到使用者授權的db
use xx
執行更新
欄位會覆蓋原來的內容
db.updateUser("username",{ pwd:"new password", customData:{ "title":"PHP developer" } }) |
更新使用者密碼
use xx
db.changeUserPassword("username","newpassword")
檢視使用者資訊
use admin
db.getUser("username")
刪除使用者
切換到使用者授權的db
use xx
執行刪除操作
db.dropUser("username")
參考資料:
1. https://www.cnblogs.com/wadeyu/p/7928625.html
3. http://www.jb51.net/article/126447.htm