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
提供資料庫所有物件任何操作的許可權,不能分配給使用者,非常危險