Robomongo0.8.5兼容Mongodb3.x加密认证

Robomongo 是一款很好用的mongodb管理工具,界面简单友好并且开源免费。目前最新版本为0.8.5。

但是最近把mongodb升级到3.x版本后发现这个工具无法进行权限认证并连接数据库了。

最后在官网发现robomongo0.8.5版本不支持mongodb3.x的“SCRAM-SHA-1”加密方法。作者将在0.9.x版本中进行修复。

那么如何让mongodb3.x也能通过robomongo0.8.5进行认证连接呢?

首先,启动服务的时候把“–auth”参数去掉,这样我们就可以在不认证的情况下连接mongodb。

连接上mongodb后,执行以下语句:

1
2
3
// Use MongoDB 2.6 auth schema (default auth mechanism: MONGODB-CR)
use admin;
db.system.version.save({ "_id" : "authSchema""currentVersion" : 3 })

上面命令行的作用就是让mongodb使用“MONGODB-CR”的方法进行加密,而不是使用“SCRAM-SHA-1”的方式。

其中的currentVersion:3为使用“MONGODB-CR”,值为5时使用“SCRAM-SHA-1”。

这样的话,就可以在robomongo0.8.5中使用mongodb3.x了。

官方说明文档

但是这样会有另一个问题,就是之前的加密用户仍然使用的是“SCRAM-SHA-1”进行加密的,这时候需要对已加密的用户修改加密方式并重新生成密码。

下面查找所有用“SCRAM-SHA-1”加密的用户:

1
2
use admin;
db.system.users.find({ "credentials.SCRAM-SHA-1" : { $existstrue}}, { user1db1})

然后把查找到的用户进行密码修改。

1
db.changeUserPassword()

修改密码api点击查看

当然还有一个更加暴力的方法,就是直接干掉所有的用户,然后使用createUser创建新的用户。

创建“admin”管理者,此用户只能是用来管理用户的,不能作为操作数据库。

1
2
3
4
5
6
7
8
use admin             #切换到admin数据库
db.createUser(
  {
    user: "admin",
    pwd: "admin",
    roles: [ { role"userAdminAnyDatabase"db"admin" } ]
  }
)

针对不同的数据库,添加不同的操作者,并且可以给操作者赋值不同的权限,例如:readWrite(读写)、read(读)等。

1
2
3
4
5
6
7
8
9
10
11
use demo             #切换到demo数据库
db.createUser(
 {
   user: "demo",
   pwd: "demo",
   roles: [
      { role"readWrite"db"demo" },
      { role"read"db"demo2" }
   ]
 }
)

修改完成之后,记得加上“–auth”参数并重启服务器。