1. 程式人生 > 實用技巧 >MongoDB 副本集的使用者和許可權一般操作步驟

MongoDB 副本集的使用者和許可權一般操作步驟

步驟總結:

  1. 在主節點上新增超管使用者,副本集會自動同步
  2. 按照仲裁者、副本節點、主節點的先後順序關閉所有節點服務
  3. 建立副本集認證的key檔案,複製到每個服務所在目錄
  4. 修改每個服務的配置檔案,增加引數
  5. 啟動副本集的每個服務
  6. 在主節點上新增普通賬號

前言

對於搭建好的mongodb副本集,為了安全,啟動安全認證,使用賬號密碼登入。
副本集環境使用搭建好的,架構如下:

副本集部署文件地址:https://www.cnblogs.com/sanduzxcvbnm/p/13963585.html

對副本集執行訪問控制需要配置兩個方面 :
1)副本集和共享叢集的各個節點成員之間使用內部身份驗證,可以使用金鑰檔案或x.509證書。金鑰檔案比較簡單,本文使用金鑰檔案,官方推薦如果是測試環境可以使用金鑰檔案,但是正式環境,官方推薦x.509證書。原理就是,叢集中每一個例項彼此連線的時候都檢驗彼此使用的證書的內容是否相同。只有證書相同的例項彼此才可以訪問
2)使用客戶端連線到mongodb叢集時,開啟訪問授權。對於叢集外部的訪問。如通過視覺化客戶端,或者通過程式碼連線的時候,需要開啟授權。

在keyfile身份驗證中,副本集中的每個mongod例項都使用keyfile的內容作為共享密碼,只有具有正確金鑰檔案的mongod或者mongos例項可以連線到副本集。
金鑰檔案的內容必須在6到1024個字元之間,並且在unix/linux系統中檔案所有者必須有對檔案至少有讀的許可權。

關閉已開啟的副本集服務(可選)

增加副本集的安全認證和服務鑑權功能,可以在副本集搭建的時候直接新增,也可以在之前搭建好的副本集服務上新增。

本文使用之前搭建好的副本集服務,因此,先停止之前的叢集服務

停止服務的方式有兩種:快速關閉和標準關閉,下面依次說明:
(1)快速關閉方法(快速,簡單,資料可能會出錯)
目標:通過系統的kill命令直接殺死程序:
依次殺死仲裁者、副本節點、主節點,直到所有成員都離線。建議主節點最後kill,以避免潛在的回滾。
殺完要檢查一下,避免有的沒有殺掉。

#通過程序編號關閉節點
kill -2 54410

【補充】
如果一旦是因為資料損壞,則需要進行如下操作(瞭解):
1)刪除lock檔案:

rm -f /home/mongodb/replica_sets/myrs_27017/data/db/*.lock \
/home/mongodb/replica_sets/myrs_27018/data/db/*.lock \
/home/mongodb/replica_sets/myrs_27019/data/db/mongod.lock \

2 )依次修復資料:

/usr/local/mongodb/bin/mongod --repair --dbpath=/home/mongodb/replica_sets/myrs_27017/data/db
/usr/local/mongodb/bin/mongod --repair --dbpath=/home/mongodb/replica_sets/myrs_27018/data/db
/usr/local/mongodb/bin/mongod --repair --dbpath=/home/mongodb/replica_sets/myrs_27019/data/db

(2)標準的關閉方法(資料不容易出錯,但麻煩):
目標:通過mongo客戶端中的shutdownServer命令來依次關閉各個服務
關閉副本集中的服務,建議依次關閉仲裁節點、副本節點、主節點。主要的操作步驟參考如下:

//客戶端登入服務,注意,這裡通過localhost登入,如果需要遠端登入,必須先登入認證才行。
mongo --port 27017
//告知副本集說本機要下線
rs.stepDown()
//#切換到admin庫
use admin
//關閉服務
db.shutdownServer()

通過主節點新增一個管理員帳號

只需要在主節點上新增使用者,副本集會自動同步。
開啟認證之前,建立超管使用者:myroot,密碼:123456

myrs:PRIMARY> use admin
switched to db admin
myrs:PRIMARY> db.createUser({user:"myroot",pwd:"123456",roles:["root"]})
Successfully added user: { "user" : "myroot", "roles" : [ "root" ] }

詳細操作詳見單例項環境的 新增使用者和許可權 的相關操作。https://www.cnblogs.com/sanduzxcvbnm/p/13963252.html

提示:
該步驟也可以在開啟認證之後,但需要通過localhost登入才允許新增使用者,使用者資料也會自動同步到副本集。
後續再建立其他使用者,都可以使用該超管使用者建立。

建立副本集認證的key檔案

第一步:生成一個key檔案到當前資料夾中。
可以使用任何方法生成金鑰檔案。例如,以下操作使用openssl生成密碼檔案,然後使用chmod來更改檔案許可權,僅為檔案所有者提供讀取許可權

[root@bobohost ~]# openssl rand -base64 90 -out ./mongo.keyfile
[root@bobohost ~]# chmod 400 ./mongo.keyfile
[root@bobohost ~]# ll mongo.keyfile
-r--------. 1 root root 122 8月 14 14:23 mongo.keyfile

提示:
所有副本集節點都必須要用同一份keyfile,一般是在一臺機器上生成,然後拷貝到其他機器上,且必須
有讀的許可權,否則將來會報錯: permissions on /mongodb/replica_sets/myrs_27017/mongo.keyfile are too open
一定要保證金鑰檔案一致,檔案位置隨便。但是為了方便查詢,建議每臺機器都放到一個固定的位置,都放到和配置檔案一起的目錄中。
這裡將該檔案分別拷貝到多個目錄中:

[root@bobohost ~]# cp mongo.keyfile /home/mongodb/replica_sets/myrs_27017
[root@bobohost ~]# cp mongo.keyfile /home/mongodb/replica_sets/myrs_27018
[root@bobohost ~]# cp mongo.keyfile /home/mongodb/replica_sets/myrs_27019

修改配置檔案指定keyfile

分別編輯幾個服務的mongod.conf檔案,新增相關內容:

# vim /home/mongodb/replica_sets/myrs_27017/mongod.conf
security:
  #KeyFile鑑權檔案
  keyFile: /mongodb/replica_sets/myrs_27017/mongo.keyfile
  #開啟認證方式執行
  authorization: enabled

注意每個服務的mongod.conf檔案中mongo.keyfile的路徑不一樣

重新啟動副本集

如果副本集是開啟狀態,則先分別關閉複本集中的每個mongod,從次節點開始。直到副本集的所有成員都離線,包括任何仲裁者。主節點必須是最後一個成員關閉以避免潛在的回滾。

#通過程序編號關閉三個節點
kill -2 54410
kill -2 54361
kill -2 54257

分別啟動副本集節點:

/usr/bin/mongod -f /home/mongodb/replica_sets/myrs_27017/mongod.conf
/usr/bin/mongod -f /home/mongodb/replica_sets/myrs_27018/mongod.conf
/usr/bin/mongod -f /home/mongodb/replica_sets/myrs_27019/mongod.conf

在主節點上新增普通賬號

#先用管理員賬號登入
#切換到admin庫
use admin
#管理員賬號認證
db.auth("myroot","123456")
#切換到要認證的庫
use articledb
#新增普通使用者
db.createUser({user: "bobo", pwd: "123456", roles: ["readWrite"]})

重新連線,使用普通使用者 bobo重新登入,檢視資料。
注意:也要使用rs.status()命令檢視副本集是否健康。