在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

如何解决Mongodb 3.2.9开启用户权限认证问题

119次阅读
没有评论

共计 3858 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章给大家分享的是有关如何解决 Mongodb 3.2.9 开启用户权限认证问题的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

一、在老版的 Mongodb(大概 3.0 以前)可以这样开启认证:

1、Linux 环境下 mongo shell 方式认证:

show dbs 
## 看到有如下数据  
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() ## 查找数据  
{  _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 数据库 */ 
$db = $m- melon; 
/* 集合 */ 
$collection = melonco; 
/* 选择数据库里面的集合,相当于表 */ 
$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  使用数据库用户  
/*mongodb 连接 */ 
$m = new Mongo( 192.168.138.35:27017  
/* 选择 comment*/ 
$db = $m- melon; 
/* 连接数据库 */ 
$db- authenticate( melon ,  melon  
/* 选择 t 数据库里面集合,相当于表 */ 
$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 })

不过如果你现在开启认证,仍然会提示 AuthenticationFailed MONGODB-CR credentials missing in the user document

原因是原来创建的用户已经使用了 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  } ] }

解决方式就是删除刚刚创建的用户,重新重建即可:

 db.system.users.remove({user: test});
  use mydb 
 db.createUser({user: test ,pwd: 123456 ,roles:[{role: readWrite ,db: mydb}]})

然后开启认证,重启服务器,用 php 连接,一切 OK

?php 
#1  使用数据库用户认证连接 mongodb 
/*mongodb 连接 */ 
$m = new Mongo( mongodb://test:12345678@localhost:27017/mydb  
/* 选择 melon 数据库 */ 
$db = $m- mydb; 
/* 选择数据库里面的集合 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 开启用户权限认证问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计3858字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 二区国产 | 欧美日韩免费一区二区在线观看 | 白嫩少妇bbw撒尿视频 | 亚洲一区二区在线免费观看 | 精品久久久久久中文字幕女 | 免费无码又爽又刺激网站 | 亚洲国产成人精品无码区99 | 亚洲国产高清人在线 | 女明星黄网站色视频免费国产 | 久久99国产综合精品女同 | 草久在线观看 | 亚洲成色在线综合网站 | 2020年最新国产精品视频免费 | 亚洲国产日韩欧美综合久久 | 国产91对白在线播放 | 精品伊人久久大香线蕉网站 | av网站的免费观看 | 99国精品午夜福利视频不卡 | 看全黄大色黄大片老人做 | 欧美怡红院免费全部视频 | 日日夜夜嗷嗷叫 | 国产福利在线观看一区二区 | 91精品国产91久久久久久麻豆 | 国产乱码精品一区二区三区中文 | 久久久www成人免费无遮挡大片 | 亚洲精品国产第一综合99久久 | 免费a级在线观看播放 | 亚洲综合国产一区二区三区 | 99在线观看视频免费精品9 | 色综合网亚洲精品久久 | 香蕉久久夜色精品国产 | 亚洲色成人网站www永久 | 国产精品熟女高潮视频 | 久久免费99精品国产自在现线 | 天堂亚洲欧美日韩一区二区 | 四虎电影院 | 一区二区三区在线观看免费 | 国产精品久久久久久爽爽爽 | 日本一本在线视频 | 日韩欧美亚洲 | 欧美在线观看网站 |