MongoDB4.0集羣添加用戶認證

MongoDB單機搭建
MongoDB集羣搭建
MongoDB集羣添加驗證

今天主要介紹的是給集羣加上用戶的驗證

主機 角色
10.0.86.220 主節點
10.0.86.210 從節點
10.0.86.240 仲裁節點

這裏對配置文件進行一下說明:

MongoDB服務支持命令行配置參數和配置文件兩種啓動方式, 爲便於管理, 推薦使用配置文件進行服務參數的配置. 自Mongo2.6版起, 官方推薦使用YAML格式的配置參數: MongoDB官方YAML配置文件參數說明; 舊版配置文件格式依然可用但不建議使用: .MongoDB官方舊版配置文件參數說明
我這裏用的是舊版的格式,有興趣也可以嘗試yaml格式,
下面是本集羣使用的配置文件mongod.conf:

port=27017 #端口 
dbpath= /usr/local/sdb/mongodb-linux-x86_64-4.0.9/db #數據庫存文件存放目錄 
logpath= /usr/local/sdb/mongodb-linux-x86_64-4.0.9/mongodb.log #日誌文件存放路徑 
logappend=true #使用追加的方式寫日誌 
fork=true #不以守護程序的方式啓用,即不在後臺運行 
replSet=sdb #Replica Set的名字 集羣名稱 
maxConns=100 #最大同時連接數 
> #auth=true #啓用驗證
> #keyFile=/usr/local/sdb/mongodb-linux-x86_64-4.0.9/access.key
journal=true #每次寫入會記錄一條操作日誌(通過journal可以重新構造出寫入的數據)。 
#即使宕機,啓動時wiredtiger會先將數據恢復到最近一次的checkpoint點,然後重放後續的journal日誌來恢復。 
storageEngine=wiredTiger #存儲引擎有mmapv1、wiretiger、mongorocks 
bind_ip = 10.0.86.220 #這樣就可外部訪問了,例如從win10中去連虛擬機中的MongoDB

和以前的配置一樣,只是加了auth和keyFile的屬性,暫時先註釋掉

確定你集羣正常啓動的狀態,現在開始添加集羣用戶

集羣配置完成後, 仍然在主節點的mongo控制檯中添加三個用戶:數據庫管理員, 集羣管理員和訪問特定數據庫的用戶.
在一個節點執行就可以

在bin目錄下
./mongo 10.0.86.220     #進入mongo控制檯
> use admin                #使用內置的admin庫
> db.createUser({user:"admin",pwd:"admin",roles:[{role:"readWriteAnyDatabase",db:"admin"},
{role:"dbAdminAnyDatabase",db:"admin"},{role:"userAdminAnyDatabase",db:"admin"}]})

> db.createUser(            #創建集羣管理員
{
user:"cluster",
pwd:"cluster",
roles:[{role:"clusterAdmin",db:"admin"},{role:"clusterManager",db:"admin"},{role:"clusterMonitor",db:"admin"}]
}
)
> use testdb                 #切換到testdb數據庫,不用事先創建
> db.createUser(             #創建特定庫的特定用戶
{
user:"test",
pwd:"test",
roles:[{role:"readWrite",db:"testdb"},{role:"dbAdmin",db:"testdb"},{role:"userAdmin",db:"testdb"}]
}
)
> use admin
> db.system.users.find()     #查看創建的用戶

  • MongoDB的用戶和數據庫是綁定的, 必須指定某個用戶歸屬於哪個數據庫, 即在roles字段的每個role中指定db字段.

  • 數據庫管理員通常需要具有讀寫,管理任意數據庫和管理任意用戶的role, 後續可以登錄此用戶進行數據庫和用戶的增刪改查.

  • 集羣管理員通常需要具有集羣管理和集羣監控的role, 只有集羣管理員可以關閉集羣.

  • 普通用戶根據用途不同可以對特定或者多個數據庫擁有各種不同的role, 本例中的test用戶既可以讀寫testdb庫, 同時也是testdb庫的管理員.

  • 主節點上添加的用戶應該能夠在從節點上查詢到(需要先鍵入rs.slaveOk()命令).

開啓用戶認證

用戶添加完成後需要關閉所有節點(先關閉仲裁和從節點, 再關閉主節點, 避免主節點切換)

生成keyFile(keyFile的用途是作爲所有mongod後臺進程允許加入集羣的憑證, 所有集羣中的節點共用一個keyFile, 避免其他mongod加入集羣):

在一個節點執行
 openssl rand -base64 756 > /mgrs/conf/access.key              #生成keyFile, keyFile的長度必須在6-1024個字符之間
chmod 400 /mgrs/conf/access.key              #keyFile文件權限爲只讀
scp /usr/local/sdb/access.key [email protected]:/usr/local/sdb          #用scp將keyFile複製到其他服務器
 scp/usr/local/sdb/access.key [email protected]:/usr/local/sdb

取消三個節點上的auth和keyFile的註釋:
依次啓動主節點, 從節點和仲裁節點
在配置文件中修改:

spring:
  data:
    mongodb:
      uri: mongodb://test:[email protected]:27017,10.0.86.210:27017/testdb?replicaSet=sdb&slaveOk=true&readPreference=secondaryPreferred
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章