久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何解決Mongodb 3.2.9開啟用戶權限認證問題

133次閱讀
沒有評論

共計 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 開啟用戶權限認證問題”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計3858字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 山西省| 深水埗区| 永昌县| 临汾市| 荔浦县| 新乡县| 兴山县| 玉溪市| 布拖县| 榆中县| 文登市| 昌江| 江孜县| 榆林市| 九江县| 奉贤区| 兴城市| 定日县| 嵊泗县| 赫章县| 新建县| 且末县| 文登市| 株洲市| 巴里| 海阳市| 社旗县| 清水县| 交口县| 胶州市| 定西市| 杨浦区| 应用必备| 长丰县| 桦川县| 绥滨县| 白朗县| 定陶县| 乾安县| 霸州市| 精河县|