Mongodb

無法在 Mongodb 4.0.5 上更新使用者密碼(使用 SCRAM-SHA-256 需要未消化的密碼)

  • October 23, 2021

我正在嘗試使用 更新使用者的密碼,changeUserPassword()但我只收到以下消息:

錯誤:更新使用者失敗:使用 SCRAM-SHA-256 需要未消化的密碼

> db
mydb
> db.getUsers()
[
   {
       "_id"  : "mydb.mongo",
       "user" : "mongo",
       "db"   : "mydb",
       "roles" : [
           {
           "role" : "dbOwner",
           "db" : "mydb"
           }
       ],
       "mechanisms" : [
           "SCRAM-SHA-1",
           "SCRAM-SHA-256"
       ]
   }
]


> db.changeUserPassword("mongo", "mongo_n3w_p4ss");
2019-05-22T20:58:10.128-0500 E QUERY    [thread1] Error: Updating user failed: Use of SCRAM-SHA-256 requires undigested passwords :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.updateUser@src/mongo/shell/db.js:1487:15
DB.prototype.changeUserPassword@src/mongo/shell/db.js:1491:9
@(shell):1:1
> db.version()
4.0.5

我也試過updateUser(),但沒用。

我錯過了什麼,“需要未消化的密碼”是什麼意思?

基本上,我是用db.updateUser 做到的。

在文件上,它說以下內容:

  • 密碼消化器:字元串

選修的。指示伺服器或客戶端是否消化密碼。

可用值為:

“server”(預設)伺服器從客戶端接收未消化的密碼並消化密碼。

“client”(與 SCRAM-SHA-256 不兼容)客戶端消化密碼並將消化後的密碼傳遞給伺服器。

在 4.0 版更改: 預設值為“伺服器”。在早期版本中,預設值為“client”。

出於未知原因,預設值似乎是“客戶端”。順便說一句,我的 Mongo Shell 客戶端是 v3.6.3。

因此,我只是定義passwordDigestorserver,並且確定。註銷並使用新密碼登錄。

> db.updateUser("mongo", {pwd:"mongo_n3w_p4ss", passwordDigestor:"server"});

安裝與 mongo 伺服器版本相同的 mongo shell 版本為我解決了這個問題。我也收到了版本不匹配 4.0 和 4.4 的錯誤。它應該完全相同。在此處下載 mongo shell/其他包

引用自:https://dba.stackexchange.com/questions/238847