远程连接无法认证
发现一个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:
命令行中应该也有这样的参数 查询
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登录了