1. 程式人生 > >MongoDb分片叢集認證

MongoDb分片叢集認證

本文主要基於已經搭建好的未認證叢集,結合上篇Mongodb副本集分片叢集模式環境部署(https://www.cnblogs.com/woxingwoxue/p/9875878.html), MongoDb分片叢集認證幾個主要流程

1.在分片叢集環境中,副本集內成員之間需要用keyFile認證,mongos與配置伺服器,副本集之間也要keyFile認證,叢集所有mongod和mongos例項使用內容相同的keyFile檔案
(1)在其中一臺機器上生成keyfile

openssl rand -base64 753  > keyfile
sudo chmod 400 keyfile

(2)將keyfile放置在<path-to-keyfilie>路徑

2.建立管理員賬號,賦所有許可權(admin和config資料庫)

use admin
db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}) #root所有許可權
db.auth("admin","123456")

use config
db.createUser({user: "admin",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}) #root所有許可權
db.auth("admin","123456")

3.關閉所有mongod、mongos、configsvr,編輯配置檔案,重新啟動每臺伺服器每個例項



為每一個mongod、mongos、配置伺服器的例項其中的配置檔案新增認證屬性或者在啟動例項時新增--authorization、--keyFile選項

[[email protected] ~]$ vi services/configsvr/mongod.conf
#mongod.conf 新增以下配置
security:
    authorization: enabled  #若啟動例項報錯,可刪除該行
    keyFile: /home/mongo/services/keyfile
[[email protected] ~]$ ./mongod -f services/configsvr/mongod.conf 

其他例項如下

[[email protected] ~]$ vi services/shard1/mongod.conf

#mongod.conf 新增以下配置
security:
    authorization: enabled  #若啟動例項報錯,可刪除該行
    keyFile: /home/mongo/services/keyfile
    
[[email protected] ~]$ ./mongod -f services/shard1/mongod.conf

[[email protected] ~]$ vi services/shard2/mongod.conf

#mongod.conf 新增以下配置
security:
    authorization: enabled  #若啟動例項報錯,可刪除該行
    keyFile: /home/mongo/services/keyfile
    
[[email protected] ~]$ ./mongod -f services/shard2/mongod.conf

[[email protected] ~]$ vi services/shard3/mongod.conf

#mongod.conf 新增以下配置
security:
    authorization: enabled  #若啟動例項報錯,可刪除該行
    keyFile: /home/mongo/services/keyfile
    
[[email protected] ~]$ ./mongod -f services/shard3/mongod.conf

[[email protected] ~]$ vi services/mongos/mongos.conf

#mongod.conf 新增以下配置
security:
    authorization: enabled  #若啟動例項報錯,可刪除該行
    keyFile: /home/mongo/services/keyfile
    
[[email protected] ~]$ ./mongos -f services/mongos/mongos.conf

4.admin連線mongo叢集

[[email protected] ~]$ ./mongo 172.16.0.192:27017/admin -u admin -p 123456

5.為指定資料庫新增訪問使用者,本文為testShard資料庫

use testShard
db.createUser(
    {
        user:"test",
        pwd:"test",
        roles:[
            {role:"readWrite", db:"testShard"} #讀寫許可權
        ]
    }
)
db.auth("test","test")

6.test訪問mongo叢集,只有testShard的資料讀寫許可權

[[email protected] ~]$ ./mongo 172.16.0.192:27017/testShard -u test -p test
MongoDB shell version v4.0.3
connecting to: mongodb://172.16.0.192:27017/testShard
Implicit session: session { "id" : UUID("e0f8bf3f-83d7-432c-ba4c-c063d865380e") }
MongoDB server version: 4.0.3

 

使用者和角色方法
詳細參見官方文件:
https://docs.mongodb.com/manual/reference/method/#role-management

檢視角色資訊
use admin
db.getRole("rolename",{showPrivileges:true})

刪除角色
use admin
db.dropRole("rolename")

系統內建使用者角色
大部分內建的角色對所有資料庫共用,少部分僅對admin生效

資料庫使用者類

read
非系統集合有查詢許可權

readWrite
非系統集合有查詢和修改許可權

資料庫管理類

dbAdmin
資料庫管理相關,比如索引管理,schema管理,統計收集等,不包括使用者和角色管理

dbOwner
提供資料庫管理,讀寫許可權,使用者和角色管理相關功能

userAdmin
提供資料庫使用者和角色管理相關功能

叢集管理類

clusterAdmin
提供最大叢集管理許可權

clusterManager
提供叢集管理和監控許可權

clusterMonitor
提供對監控工具只讀許可權

hostManager
提供監控和管理severs許可權

備份和恢復類

backup
提供資料庫備份許可權
restore
提供資料恢復許可權

All-Database類

readAnyDatabase
提供讀取所有資料庫的許可權除了local和config資料庫之外

readWriteAnyDatabase
和readAnyDatabase一樣,除了增加了寫許可權

userAdminAnyDatabase
管理使用者所有資料庫許可權,單個數據庫許可權和userAdmin角色一樣

dbAdminAnyDatabase
提供所有使用者管理許可權,除了local,config


超級使用者類

root
資料庫所有許可權

內部角色

__system
提供資料庫所有物件任何操作的許可權,不能分配給使用者,非常危險