MongoDB认证——从MONGODB-CR升级为SCRAM-SHA-

远程连接无法认证

发现一个MongoDB数据库用Robomongo可以远程连接,但是用命令行不行,无法认证:

$ mongo x.x.x.x(远程数据库IP)/admin
MongoDB shell version: 2.6.10
connecting to: x.x.x.x/admin
> db.auth('username','password')
Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 }
0

发现Robomongo的认证中有一个选项 Mechanism:

《MongoDB认证——从MONGODB-CR升级为SCRAM-SHA-》 Robomongo

命令行中应该也有这样的参数 查询
db.auth()的文档,发现果然如此

db.auth( {
user: <username>,
pwd: <password>,
mechanism: <authentication mechanism>,
digestPassword: <boolean>
} )

但是选择SCRAM-SHA-1却报错:

> db.auth({user:'username',pwd:'password',mechanism:'SCRAM-SHA'})
Error: 2 SCRAM-SHA mechanism support not compiled into client library.
0

突然想起也许是版本问题,果然,本地mongodb是2.6,远程的是3.2。原来用apt-get安装的mongodb并不是最新版,最新版的安装方法在官网可以查到,不再赘述。

按照官网给出的方法,apt-get update时报错,只好另辟蹊径
官网给出了tgz格式的http下载地址,于是用wget下载,并解压。

$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.4.3.tgz
‘mongodb-linux-x86_64-ubuntu1604-3.4.3.tgz’ saved
$ tar zxvf mongodb-linux-x86_64-ubuntu1604-3.4.3.tgz
$ cd mongodb-linux-x86_64-ubuntu1604-3.4.3.tgz

运行解压后bin目录下的mongo

bin/mongo x.x.x.x/admin
>db.auth('username', 'password')
1

果然可以认证成功了
mongod 3.0 以上版本默认使用SCRAM-SHA-1认证,低版本则无法使用。
kill原先的mongod进程,重新运行解压后bin目录下的mongod

bin/mongod --config /etc/mongodb.conf

连接本地数据库,则需要使用原先的MONGODB-CR方式登录
想要升级,只需认证后运行

db.adminCommand({authSchemaUpgrade: 1});

检查一下:

> db.system.users.findOne()
{
        "_id" : "admin.root",
        "user" : "root",
        "db" : "admin",
        "credentials" : {
                "SCRAM-SHA-1" : {...}
        },
...
}

以后就可以使用默认的SCRAM-SHA-1登录了

    原文作者:拔丝圣代
    原文地址: https://www.jianshu.com/p/5adbaa931250
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞