MongoDB副本集權限重置

背景:某公司線上的一套MongoDB副本集,只知道一個應用庫以及該庫下對應的一個用戶。除此以外,對這套集羣一無所知,他們的需求是要擁有超級用戶權限,方便以後管理。

我雖是一個小渣渣,但以前單位一個很照顧我的老大哥找我幫忙,上吧~雖然我也不怎麼熟,但好歹搭建環境測試尋找一個解決方法還是很快的。於是就接下了。雖然我的方法不一定是最好的,擺出來,讓大夥兒嘲笑一下吧!

環境:MongoDB v2.6.5
副本集、1主(21011端口)、1備(21012端口)、無仲裁
root用戶沒有......
admin用戶沒有......
這套環境說明啥?我關閉實例都得kill......

言歸正傳,要搞嘛,先備份,這個我研究了,有readWrite權限,你就能把已知的dump出來,先保住一部分數據再說。

思路大概是這樣的:
停機是沒得說了,kill也是必須的。因爲我需要無認證登錄,去尋找已存在的最高權限用戶或者新增最高權限用戶。
下面開始我的操作:
1、kill掉主節點

2、修改主節點配置文件,註釋auth、replSet、keyfile

3、重啓21011實例,到admin庫下
db.system.users.find()
通過該命令查詢整個環境都有哪些用戶。
執行該命令後結果如下:
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "MONGODB-CR" : "6c99f422503cdd3df4618ee692a95414" }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
{ "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "MONGODB-CR" : "cc8f69f8ac660f2edd5ddb6df02f45cf" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "aibot.aibot", "user" : "aibot", "db" : "aibot", "credentials" : { "MONGODB-CR" : "84d87445f04823af2701e8ef38796934" }, "roles" : [ { "role" : "readWrite", "db" : "aibot" } ] }

可能存在兩種情況,根據自己的情況而定:
a、如果存在最高權限用戶,如role爲 userAdminAnyDatabaseroot,那麼只需要對密碼進行更改就好了。
更改密碼:
db.changeUserPassword('admin','111111')
db.auth('admin','111111')
db.changeUserPassword('root','111111')
db.auth('root','111111')

b、如果不存最高權限用戶,那麼就在admin下添加這兩個用戶
新增用戶admin和root
db.createUser({user:"admin",pwd:"111111",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
db.auth(‘admin’,’111111’)
db.createUser({user:"root",pwd:"111111",roles:[{role:"root",db:"admin"}]})
db.auth(‘root’,’111111’)

4、更改過密碼或者新增完密碼後,關閉21011實例,更改配置文件,打開auth、replSet、keyfile,再啓懂21011實例

5、21011啓動後可能會分爲兩種狀態:
a、21011已經變爲21012的secondary,這時候,kill掉21012,等待21011升爲primary狀態,再rs.remove掉21012節點。

b、21011啓動就是primary狀態,則直接rs.remove掉21012節點。

6、kill掉21012,刪除21012對應的數據目錄,再創建21012的數據目錄,啓動21012

7、登錄21011,執行rs.add,把21012節點重新加入副本集,等待21012全量同步完數據,變爲secondary狀態。通過rs.status()查看副本集狀態。

8、可以通過21011隨便創建個集合插入一個文檔進行主備同步的測試,發現21012同步成功後,刪除即可。

以上這些步驟,就解決了這個用戶權限的問題,如果在數據量巨大的情況下,備節點可能會同步很久,並且在此期間無法對外提供服務。

歡迎各位大神指證問題,或者將更好的方法分享給我,在此謝過!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章