1. 程式人生 > >mongodb管理學習之keyfile認證

mongodb管理學習之keyfile認證

一、keyfile認證

1建立keyfile(祕鑰檔案)

1.1要求

(1)通過金鑰檔案進行身份驗證時,副本集中的每個mongo例項都使用金鑰檔案的內容作為與其他成員進行身份驗證的共享密碼。

只有擁有正確金鑰檔案的Mongod例項才能加入副本集。

(2)金鑰檔案的內容必須在6到1024個字元之間,並且對於副本集的所有成員必須是相同的。

1.2建立

您可以使用您選擇的任何方法生成金鑰檔案。例如,以下操作用於openssl生成用於金鑰檔案。

主要:key的長度必須是6-1024的base64字元,unix下必須相同組許可權,windows下不需要。

1.3更改許可權

chmod 600 ./mongodb.key

2將金鑰檔案複製到每個副本整合員上

將金鑰檔案複製到託管副本整合員的每個伺服器上。確保執行mongod例項的使用者是該檔案的所有者,並且可以訪問金鑰檔案。

scp [email protected]:XXX/mongodb.key  /XXX

3登入到mongs 建立使用者

Use admin一定要用admin資料庫

db.createUser({user:"admin",pwd:"admin",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

4關閉分片加副本集的所有成員

5.在每個mongod的配置檔案中新增以下內容:

auth=true

keyFile=XXX/mongodb.key

在每個mongos的配置檔案中新增以下內容:

keyFile=XXX/mongodb.key

5.從新啟動叢集,啟動順序為

配置-->分片-->副本

備註:最好建立一個全域性許可權的賬戶,不然如果忘記了使用者和密碼就不太方便了。

二、附件

1.資料庫角色

針對Mongodb資料庫中的各種角色進行說明

資料庫訪問

角色名稱

擁有許可權

read

允許讀取指定資料庫的角色

readWrite

允許讀寫指定資料庫的角色

資料庫管理

角色名稱

擁有許可權

dbAdmin

允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system.profile

userAdmin

允許管理當前資料庫的使用者,如建立使用者、為使用者授權

dbOwner

資料庫擁有者(最高),集合了dbAdmin/userAdmin/readWrite角色許可權

叢集管理

角色名稱

擁有許可權

clusterAdmin

叢集最高管理員,集合clusterManager/clusterMonitor/hostManager角色許可權

clusterManager

叢集管理角色,允許對分片和副本集叢集執行管理操作,如addShard,resync等

clusterMonitor

叢集監控角色,允許對分片和副本集叢集進行監控,如檢視serverStatus

hostManager

節點管理角色,允許監控和管理節點,比如killOp、shutdown操作

備份恢復

角色名稱

擁有許可權

backup

備份許可權,允許執行mongodump操作

restore

恢復許可權,允許執行mongoresotre操作

資料庫通用角色

角色名稱

擁有許可權

readAnyDatabase

允許讀取所有資料庫

readWriteAnyDatabase

允許讀寫所有資料庫

userAdminAnyDatabase

允許管理所有資料庫的使用者

dbAdminAnyDatabase

允許管理所有資料庫

特殊角色

角色名稱

擁有許可權

root

超級管理員,擁有所有許可權

__system

內部角色,用於叢集間節點通訊


2.使用者管理

新增使用者

通過mongo shell終端操作,使用者儲存在admin資料庫system.user集合中

新增普通使用者

切換到需要新增使用者的db

use xxxx

執行新增

db.createUser(

{

user:"username",

pwd:"password",

roles:[

{role:"read", db:"xxxx"},

{role:"readWrite", db:"test"}

]

}

)

新增超級使用者

切換到admin資料庫

use admin

執行新增

db.createUser(

    {

        user:"username",

        pwd:"password",

        roles:[

            {role:"root", db:"admin"}

        ]

    }

)

刪除使用者

切換到使用者授權的db

use xx

執行刪除操作

db.dropUser("username")

更新使用者

切換到使用者授權的db

use xx

執行更新

欄位會覆蓋原來的內容

db.updateUser("username",{

    pwd:"new password",

    customData:{

        "title":"PHP developer"

    }

})

更新使用者密碼

use xx

db.changeUserPassword("username","newpassword")

檢視使用者資訊

use admin

db.getUser("username")

刪除使用者

切換到使用者授權的db

use xx

執行刪除操作

db.dropUser("username")

參考資料:

1. https://www.cnblogs.com/wadeyu/p/7928625.html

3. http://www.jb51.net/article/126447.htm