共計 3858 個字符,預計需要花費 10 分鐘才能閱讀完成。
這篇文章給大家分享的是有關如何解決 Mongodb 3.2.9 開啟用戶權限認證問題的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
一、在老版的 Mongodb(大概 3.0 以前)可以這樣開啟認證:
1、Linux 環(huán)境下 mongo shell 方式認證:
show dbs
## 看到有如下數(shù)據(jù)
admin (empty)
comment 0.203125GB
dbtest (empty)
foo 0.203125GB
local (empty)
test 0.203125GB
use admin
switched to db admin
db.addUser(admin , 12345678) ## 添加用戶
Mon Nov 5 23:40:00 [FileAllocator] allocating new datafile /data/db/admin.ns, filling with zeroes...
{
user : admin ,
readOnly : false,
pwd : 89e41c6c28d88d42c21fe501d82969ea ,
_id : ObjectId(5097ddd00342c63efff3fbfb)
}
## 之后運行
showdbs
Mon Nov 5 23:45:13 uncaught exception: listDatabases failed:{ errmsg : need to login , ok : 0 } ## 提示需要登錄
添加 --auth 啟動
./mongod -auth
./mongo
use admin
switched to db admin
db.auth(admin , 12345678) ## 用添加的賬戶密碼查看
Mon Nov 5 23:49:32 [conn56] authenticate db: admin { authenticate: 1, nonce: 304f5242601fafa4 , user: admin , key: 58260df384b1146466efca5c90a5ff05 }
1
#1 說明登錄成功
show dbs
admin 0.203125GB
comment 0.203125GB
dbtest (empty)
foo 0.203125GB
local (empty)
test 0.203125GB
use admin
switched to db admin
show collections;
system.indexes
system.users
db.system.users.find() ## 查找數(shù)據(jù)
{ _id : ObjectId( 5097ddd00342c63efff3fbfb), user : admin , readOnly : false, pwd : 89e41c6c28d88d42c21fe501d82969ea }
2、php 代碼連接認證:
?php
##1 使用超級用戶連接 mongodb
/*mongodb 連接 */
$m = new Mongo( mongodb://admin:12345678@192.168.138.35:27017
/* 選擇 melon 數(shù)據(jù)庫 */
$db = $m- melon;
/* 集合 */
$collection = melonco;
/* 選擇數(shù)據(jù)庫里面的集合,相當于表 */
$collection = $db- $collection;
$array = array( name = melon , age = 24 , sex = Male , birth = array( year = 1988 , month = 07 , day = 13
$collection- insert($array);
$cursor = $collection- find();
foreach ($cursor as $id = $value) {
echo $id: var_dump($value); echo br
}
###2 使用數(shù)據(jù)庫用戶
/*mongodb 連接 */
$m = new Mongo( 192.168.138.35:27017
/* 選擇 comment*/
$db = $m- melon;
/* 連接數(shù)據(jù)庫 */
$db- authenticate( melon , melon
/* 選擇 t 數(shù)據(jù)庫里面集合,相當于表 */
$collection = $db- melonco;
$array = array( name = melon_son , age = 0 , sex = Male , birth = array( year = 201X , month = 07 , day = 13
$collection- insert($array);
$cursor = $collection- find();
foreach ($cursor as $id = $value) {
echo $id: var_dump($value); echo br
}
二、在 3.0 版之后的 Mongodb,shell 中依舊可以使用上述方法驗證,但是 php 認證一直失敗,日志中會報錯(Failed to authenticate myuser@userdb with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document),原來新版的 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 })
不過如果你現(xiàn)在開啟認證,仍然會提示 AuthenticationFailed MONGODB-CR credentials missing in the user document
原因是原來創(chuàng)建的用戶已經使用了 SCRAM-SHA- 1 認證方式
use admin
db.auth(root , 123456)
db.system.users.find()
{ _id : admin.root , user : root , db : admin , credentials : { SCRAM-SHA-1 : { iterationCount : 10000, salt : XoI5LXvuqvxhlmuY6qkJIw== , storedKey : VAT7ZVMw2kFDepQQ6/E0ZGA5UgM= , serverKey : TebHOXdmY6IHzEE1rW1Onwowuy8= } }, roles : [ { role : userAdminAnyDatabase , db : admin } ] }
{ _id : mydb.test , user : test , db : mydb , credentials : { MONGODB-CR : c8ef9e7ab00406e84cfa807ec082f59e }, roles : [ { role : readWrite , db : mydb } ] }
解決方式就是刪除剛剛創(chuàng)建的用戶,重新重建即可:
db.system.users.remove({user: test});
use mydb
db.createUser({user: test ,pwd: 123456 ,roles:[{role: readWrite ,db: mydb}]})
然后開啟認證,重啟服務器,用 php 連接,一切 OK
?php
#1 使用數(shù)據(jù)庫用戶認證連接 mongodb
/*mongodb 連接 */
$m = new Mongo( mongodb://test:12345678@localhost:27017/mydb
/* 選擇 melon 數(shù)據(jù)庫 */
$db = $m- mydb;
/* 選擇數(shù)據(jù)庫里面的集合 stu,相當于表 */
$collection = $db-
$array = array( name = melon , age = 24 , sex = Male , birth = array( year = 1988 , month = 07 , day = 13
$collection- insert($array);
$cursor = $collection- find();
foreach ($cursor as $id = $value) {
echo $id: var_dump($value); echo br
}
感謝各位的閱讀!關于“如何解決 Mongodb 3.2.9 開啟用戶權限認證問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!