[英]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實例的某種配置選項,但是文檔現在說這樣的級別身份驗證默認是禁用的,而且文檔也是如此答案鏈接是因為已棄用。
使用舊版本的仍然有addUser
的Mongo addUser
,我不明白為什么它會起作用,因為它建議我在文檔中未列出的'auth'選項中添加一個參數:
http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate
基本上我現在正在嘗試,但沒有工作。
我嘗試了一些涉及做這種事情的答案,這給了我同樣的錯誤。 此外,我寧願避免使用這類需要+80行代碼進行身份驗證的解決方案。 我只是希望首先獲得基本身份驗證。
您提到您使用的是MongoDB 3.0。 在MongoDB 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.