下載了最新mongodb3.03版本,當使用--auth 參數命令行開啓mongodb用戶認證時遇到不少問題。
mongod --dbpath db\data --port 27017 --directoryperdb --logpath db\logs\mongodb.log --logappend --auth
最後的參數就是開啓和關閉認證,若是是conf配置文件,應該是auth=true或false
1,首先關閉認證,也就是不帶--auth參數,啓動mongodb
2,使用命令行進入mongodb目錄,輸入mongo命令,默認進入test數據庫
3,use userdb 切換到本身的數據庫,輸入db,顯示userdb
4,建立用戶,角色爲dbOwner,數據庫爲userdb,命令行應該是db.createUser({user:'myuser',pwd:'123456',roles:[{role:'dbOwner',db:'userdb'}]})
5,切換到admin數據庫,use admin,db ,顯示admin,db.shutdownServer()關閉服務器,填上認證參數,啓動mongodb;之前的版本此時使用mongovue就能夠使用myuser登陸到userdb數據庫上了,可是3.0.3版本不行,打開mongodb.log文件發現以下錯誤
authenticate db: userdb { authenticate: 1, nonce: "xxx", user: "myuser", key: "xxx" }
2015-06-02T09:57:18.877+0800 I ACCESS [conn2] Failed to authenticate myuser@userdb with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document
此1-5步驟針對是3.0.3之前版本已經ok,若是是3.0.3,mongodb加入了SCRAM-SHA-1校驗方式,須要第三方工具配合進行驗證,下面給出具體解決辦法:
首先關閉認證,修改system.version文檔裏面的authSchema版本爲3,初始安裝時候應該是5,命令行以下:
> use admin
switched to db admin
> var schema = db.system.version.findOne({"_id" : "authSchema"})
> schema.currentVersion = 3
3
> db.system.version.save(schema)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
不過若是你如今開啓認證,仍然會提示AuthenticationFailed MONGODB-CR credentials missing in the user document
緣由是原來建立的用戶已經使用了SCRAM-SHA-1認證方式
> use admin
switched to db admin
> db.system.users.find()
[...]
{ "_id" : "userdb.myuser", "user" : "myuser", "db" : "userdb", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "XXXXXXXXXXXXXXXXXXXXXXXX", "storedKey" : "XXXXXXXXXXXXXXXXXXXXXXXXXXX", "serverKey" : "XXXXXXXXXXXXXXXXXXXXXXXXXXX" } }, "roles" : [ { "role" : "dbOwner", "db" : "userdb" } ] }
解決方式就是刪除剛剛建立的用戶,從新重建便可:
> use userdb
switched to db userdb
> db.dropUser("myuser")
true
>db.createUser({user:'myuser',pwd:'123456',roles:[{role:'dbOwner',db:'userdb'}]})
而後關閉服務器,開啓認證,重啓服務器,用mongovue鏈接,一切OKvue