簡體   English   中英

連接到MongoDB時,身份驗證始終失敗

[英]Authentication always failing when connecting to MongoDB

我正在使用node / express node_modules =“mongodb”:“2.0.33”,“mongoose”:“3.8.15”,

mongo shell版本:3.0,和mongo 3.0

我能夠很好地連接到我的mongoDB,但如果我傳入任何身份驗證參數,它將失敗:

connection error: { [MongoError: auth failed] name: 'MongoError', ok: 0, errmsg: 'auth failed', code: 18 }

發生這種情況時,以下內容會顯示在日志中:

2015-06-13T15:10:09.863-0400 I ACCESS [conn8] authenticate db: mydatabase { authenticate: 1, user: "user", nonce: "xxx", key: "xxx" } 2015-06-13T15:10:09.863-0400 I ACCESS [conn8] Failed to authenticate user@mydatabase with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user user@mydatabase

我已經做了很多模式試圖讓它工作。

以下是在適當的數據庫中在mongo shell中執行show users命令時發生的情況:

{
    "_id" : "mydatabase.user",
    "user" : "user",
    "db" : "mydatabase",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "mydatabase"
        }
    ]
}

這是我嘗試連接到這個特定的數據庫,同時傳遞正確的參數:

mongoose.connect('mongodb://user:password@host:port/mydatabase');

為了更好的衡量,我也嘗試傳遞一個選項哈希,而不是通過uri傳遞params:

mongoose.connect('mongodb://host:port/mydatabase',{user: 'user',pass: 'password'});

奇怪的是,這可以從shell完成:

mongo mydatabase -u user -p password

很明顯,憑據是正確的,並且它將它們排列到正確的數據庫,但是與Mongoose的連接有些不起作用......

這是我在創建該用戶時傳入的shell命令:

db.createUser({ 
  user: "user",
  pwd: "password",
  roles: [
    { role: "readWrite", db: "mydatabase" }
  ]
});

我得到了一個成功的消息,我在使用mydatabase集時通過調用show users命令確認

我真的在這里失去了......這里有一些我以前做過的研究還沒有給我成功:

無法驗證進入mongo,“auth失敗”

這個答案表明它不會起作用,因為身份驗證發生在數據庫級別,所以我錯過了我的mongo實例的某種配置選項,但是文檔現在說這樣的級別身份驗證默認是禁用的,而且文檔也是如此答案鏈接是因為已棄用。

MongoDB和Mongoose訪問一個數據庫,同時對另一個數據庫進行身份驗證(NodeJS,Mongoose)

使用舊版本的仍然有addUser的Mongo addUser ,我不明白為什么它會起作用,因為它建議我在文檔中未列出的'auth'選項中添加一個參數:
http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate

http://mongoosejs.com/docs/connections.html

基本上我現在正在嘗試,但沒有工作。

使用mongoose + express.js對用戶進行身份驗證

我嘗試了一些涉及做這種事情的答案,這給了我同樣的錯誤。 此外,我寧願避免使用這類需要+80行代碼進行身份驗證的解決方案。 我只是希望首先獲得基本身份驗證。

您提到您使用的是MongoDB 3.0。 在MongoDB 3.0中,它現在支持多種身份驗證機制。

  1. MongoDB質詢和響應(SCRAM-SHA-1) - 默認為3.0
  2. MongoDB挑戰和響應(MONGODB-CR) - 以前的默認值(<3.0)

如果您在創建新用戶的情況下開始使用新的3.0數據庫,則可以使用SCRAM-SHA-1創建它們。

所以你需要一個能夠進行身份驗證的驅動程序:

http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers

如果您使用現有用戶數據從2.x升級數據庫,他們仍將使用MONGODB-CR,並且必須升級用戶身份驗證數據庫:

http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram

特定於您的特定環境由於正在使用的MongoDB Node.js驅動程序,該版本的Mongoose兼容性似乎不支持3.0(請參閱Mongoose站點上的兼容性頁面 - 抱歉,不能發布超過2個鏈接目前)。

我建議你更新Mongoose。

Mongo v3.0 +:

db字段(角色對象之外)在這里很重要。 這是不可設置的bby傳遞給createUser命令afaict。

設置它的方法是在發出creatUser命令之前鍵入“use”。

除非你這樣做,否則db對象內部角色可能具有正確和預期的值,但auth仍然無效。

暫無
暫無

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

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