设为首页 收藏本站
查看: 1144|回复: 0

[经验分享] mongodb3.0远程连接认证失败

[复制链接]

尚未签到

发表于 2018-10-25 11:48:06 | 显示全部楼层 |阅读模式
  最近用到mongodb,在阿里云服务器上面直接
  wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 下载安装包,安装的linux-64bit,version:3.0.6
  安装完成之后,根据网上设置了用户和密码
  dbpath=/usr/mongodb/data
  logpath=/usr/mongodb/logs/mongodb.log
  bind_ip=0.0.0.0
  logappend=true
  port=27017
  fork=true
  auth=false //设置用户之前,先不要设置认证,否则启动后,设置用户需要各种权限,建议用户角色分配好后再改成ture。重启后这样就可以正常使用权限
  
  开始设置好用户直接重启,本地登录认证都ok,远程认证总是失败,网上找了各种资料,都没有进行说明,找了很久,终于发现一篇文章告诉mongodb3.0认证信息需要修改才能进行连接
  修改命令如下,进入shell:
> 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 })
  在修改完成之后再创建用户。下面附带创建数据库用户的shell:
  1 创建一个root用户:
use admin  
db.createUser(
  
    {
  
      user: "root",      pwd: "123456",
  
      roles: [ "root" ]
  
    }
  
)
  2 创建admin用户
use admin  
db.createUser(
  
  {
  
    user: "admin",    pwd: "admin",
  
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  
  }
  
)
  3 创建具体数据库的用户
use test  
db.createUser(
  
  {
  
    user: "test",    pwd: "password",
  
    roles: [ { role: "userAdmin", db: "test" } ]
  
  }
  
)
  最后都要认证一下
db.auth("user", "pwd")  返回1代表成功,0代表失败。
  然后把mongodb.conf文件中的auth=true,再重新启动mongodb。就可以进行远程连接了
  另一种情况,是mongodb的authSchema版本问题,此处参考:
  下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如下:
  (百度上搜到的基本都是老版本的,看到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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626321-1-1.html 上篇帖子: CentOS6安装mongoDB3.2.9 下篇帖子: mongodb 3.2 用户权限管理配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表