(百度上搜到的基本都是老版本的,看到db.addUser的就是,請忽略)
Windows下我做了一個bat文件,用來啓動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連接,一切OK
轉載自:http://21jhf.iteye.com/blog/2216103