web-dev-qa-db-ja.com

Mongodb 4.0.5でユーザーパスワードを更新できません(SCRAM-SHA-256を使用するには、未消化のパスワードが必要です)

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

私も pdateUser() を試しましたが、役に立ちませんでした。

何が欠けているのか、「未消化のパスワードが必要」の意味は何ですか?

1
ivanleoncz

基本的に、私は db.updateUser でそれを作りました。

文書には、次のように書かれています。

  • passwordDigestor:string

オプション。サーバーまたはクライアントがパスワードをダイジェストするかどうかを示します。

使用可能な値は次のとおりです。

"server"(デフォルト)サーバーはクライアントから未消化のパスワードを受け取り、そのパスワードをダイジェストします。

「クライアント」(SCRAM-SHA-256と互換性がありません)クライアントはパスワードをダイジェストし、ダイジェストしたパスワードをサーバーに渡します。

バージョン4.0で変更:デフォルト値は "server"です。以前のバージョンでは、デフォルト値は「client」です。

不明な理由により、デフォルトは「クライアント」だったようです。ちなみに、私のMongo Shell Clientはv3.6.3です。

したがって、私はpasswordDigestorserverとして定義しました。ログアウトし、新しいパスワードでログインしました。

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