MongoDB默認是沒有用戶權限驗證的,所以我們需要手動去添加用戶,以便可以更加安全的進行訪問,在沒添加用戶驗證之前,通過mongos進入數據庫時會有如下的警告:

image.png
4.1 首先建立一個擁有添加刪除用戶權限的賬號
db.createUser({
user:"useradmin",
pwd:"123456",
roles: [ { role: "userAdminAnyDatabase",db:"admin"}]
})
db.auth("useradmin","123456")//認證該用戶
這里就添加了一個useradmin這么一個用戶,他可以進行所有數據庫的用戶管理。在添加這個用戶后,我們連接mongodb時仍然不需要進行登錄,這是因為我們未在配置中開啟權限驗證。
4.2.開啟分片集群的權限驗證
4.2.1 首先生成一個添加keyFile文件----->用于認證使用
一個合理的keyFile應該滿足下面的條件:
1.在分片集群環(huán)境中,副本集內成員之間需要用keyFile認證,mongos與配置服務器,副本集之間也要keyFile認證,集群所有mongod和mongos實例使用內容相同的keyFile文件。
2.進行初始化,修改副本集時,都從本地例外登錄進行操作
3.由于啟用了認證,需要建立一個管理員帳號,才能從遠程登錄。建立管理員帳戶,利用管理員賬戶從遠程登錄后,需要建立一個可以操作某個數據庫的用戶,客戶端就用這個用戶訪問數據庫。
4.分片集群中的管理員帳號需要具備配置服務器中admin和config數據庫的讀寫權限,才能進行分片相關操作
5.集群中每個分片有自己的admin數據庫,存儲了集群的各自的證書和訪問權限。如果需要單獨遠程登錄分片,也可以
openssl rand -base64 753
利用上述命令就可以生成一個滿足條件的keyFile(如下圖),然后將生成的code拷入到keyFile.key中:
cat /usr/local/mongodb/key/keyFile.key
#然后要給該文件限定權限,必須是600
chmod 600 /usr/local/mongodb/key/keyFile.key

image.png
4.2.2 在各個分片以及configserver的配置文件中加上如下語句
#開啟權限驗證
auth=true
keyFile=/usr/local/mongodb/key/keyFile.key
4.2.3 在mongos配置文件中添加如下語句:
#指向keyFile
keyFile=/usr/local/mongodb/key/keyFile.key
4.3 啟動程序
首先啟動各個服務器中configserver
sudo mongod -f config.conf
然后啟動各個分片
sudo mongod -f shard1.conf
sudo mongod -f shard2.conf
sudo mongod -f shard3.conf
最后啟動mongos
sudo mongos -f mongos.conf
4.4.利用新組建賬號登錄集群
mongo ip:port/testdb -u username -p password
可以看到已經沒有之前出現的警告了

image.png