在仲裁器上更改 mongo 管理員密碼
我有一個 mongoDB replicaSet,它有 3 個 DB - PRIMARY/SECONDARY + Arbiter。所有 3 個都以相同的方式安裝 - 這意味著它們具有預設密碼的 admin 數據庫。
現在 - 我想更改預設密碼。在小學/中學,它運作良好。
mongo admin -u admin -p <password> --authenticationDatabase=admin db.changeUserPassword("admin",<new password>)
但是 - 在仲裁器中它不起作用(即使在添加
rs.slaveOK()
了 PRIMARY 之後)我越來越:
2016-12-01T00:18:51.408-0800 E QUERY [thread1] Error: Updating user failed: not master : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.updateUser@src/mongo/shell/db.js:1319:15 DB.prototype.changeUserPassword@src/mongo/shell/db.js:1323:9 @(shell):1:1
任何想法如何更改仲裁管理員密碼?
如何登錄仲裁程序?
在 MongoDB 3.4 中,副本集中的仲裁者不會複製任何數據(包括使用者/角色詳細資訊)。這意味著您通常可以通過localhost 異常登錄到仲裁程序,除非已通過設置
enableLocalhostAuthBypass
為false
.您可以投票/觀看一個相關的功能請求:SERVER-5479: Arbiter in authenticated replica set should allow and require login/auth for admin-only operations。
如果仲裁者在添加到副本集之前有使用者數據怎麼辦?
在您的特定情況下,您的仲裁器似乎在
mongod
配置為副本集成員之前已經擁有一些身份驗證數據。這不是預期的(或受支持的)部署,因此為了刪除或更新身份驗證數據,您需要將仲裁器作為獨立伺服器啟動。要刪除任何使用者資訊:
- 停止仲裁程序。
--replSet
在不帶、--keyfile
或選項的不同埠上啟動仲裁器,--auth
以確保在獨立模式下進行更改時副本集的其他成員無法連接到仲裁器。例如:
mongod --dbpath /path/to/data --port 28000 --fork
3. 現在應該禁用身份驗證。使用mongo
shell 刪除admin
數據庫:mongo localhost:28000/admin --eval 'db.dropDatabase()'
- 關閉仲裁器,例如:
mongo localhost:28000/admin --eval 'db.shutdownServer()'
- 使用您的正常配置啟動仲裁器。
您也可以更改密碼(而不是刪除
admin
數據庫),但這可能會令人困惑,因為仲裁程序不應該擁有使用者數據。針對仲裁者進行身份驗證的結果未定義,SERVER-5479 的未來實現不太可能支持仲裁者的預先存在的數據。一旦使用者/角色資訊被複製到仲裁者,數據將被期望是一致的。