簡體   English   中英

MongoDB 用戶身份驗證在 Node.js 腳本中失敗

[英]MongoDB User Authentication Fails In Node.js Script

首先,必要的序言。 我使用的是 MongoDB 4.0.0 和 mongoDB node.js 驅動程序版本 3.1.1。

我正在嘗試在我的 node.js 腳本中對用戶進行身份驗證。 成功獲取到與 admin 數據庫對應的 Db 對象后,我使用 db.command() 執行身份驗證。 我創建了一個命令文檔,即:

cmd = {
authenticate : 1,
user: g.UserName,
pwd: g.PassWord

}

並將此命令文檔傳遞給 db.command()。 當然,上面指定的必需變量已定義,否則代碼將因 ReferenceError 而停止。

當 db.command() 執行我的回調時,回調會顯示一個 MongoError 對象,其中包含以下內容:

{
code: 2,
codeName: "BadValue",
errmsg: "Auth mechanism not specified",
message: "Auth mechanism not specified",
name: "MongoError",
ok: 0
}

因此,通過查閱 MongoDB 4.0 的文檔,我被告知身份驗證機制應指定為“SCRAM”,因此:

cmd = {
authenticate : 1,
user: g.UserName,
pwd: g.PassWord,
mechanism: "SCRAM"
}

當我將修改后的文檔提供給 db.command() 時,回調會顯示一個不同的 MongoError 文檔:

{
code: 2,
codeName: "BadValue",
errmsg: "Unsupported mechanism: SCRAM",
message: "Unsupported mechanism: SCRAM",
name: "MongoError",
ok: 0
}

然后,我通過“show users”命令在 Mongo shell 中檢查為 admin 數據庫返回的數據,其中包含以下文檔:

{
    "_id" : "admin.Calilasseia",
    "user" : "Calilasseia",
    "db" : "admin",
    "roles" : [
            {
                    "role" : "dbOwner",
                    "db" : "admin"
            }
    ],
    "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
    ]
}
{
    "_id" : "admin.SuperUser",
    "user" : "SuperUser",
    "db" : "admin",
    "roles" : [
            {
                    "role" : "userAdminAnyDatabase",
                    "db" : "admin"
            }
    ],
    "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
    ]
}

所以在這一點上,我認為,自然地,指定上述文檔中列出的機制之一將解決問題。 除了當我這樣做時,SAME MongoError 文檔被發送到我的回調。

很簡單,我的問題是,為什么這個 db.command() 調用不起作用? 為什么每次我嘗試在我的 node.js 代碼中驗證用戶時都會看到這個 MongoError 文檔?

首先,文檔明確指出我上面構造的cmd對象的機制屬性是可選的。 從該頁面,我們有:

機制字符串 可選。 指定要使用的身份驗證機制。

有關可用機制,請參閱身份驗證機制。

如果未指定,則使用 isMaster 來確定指定用戶的 SASL 機制。 請參閱 saslSupportedMechs。

然而,當我運行代碼時,我被告知這個條目不是可選的,如上所述。 此外,提供文檔中指定的假定有效條目會返回第二個(煩人的)MongoError 文檔。

對這種奇怪的事態的解釋將是受歡迎的。

當我遇到這個問題時,是“mongo”(mongo shell 實用程序)和 mongo db 服務器之間的版本不匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM