64°

MongoDB 认证机制升级

早上某php开发反映新搭建的 mongodb 副本集连不上,后发现是认证问题导致的。

具体的报错信息如下: 

2019-07-11T10:31:38.142+0800 I ACCESS   [conn1913292]  authenticate db: bch_gn_xxx_com { authenticate: 1, user: "gn_bch_user", nonce: "xxx", key: "xxx" }
2019-07-11T10:31:38.143+0800 I ACCESS   [conn1913292] Failed to authenticate gn_bch_user@bch_gn_xxx_com with mechanism MONGODB-CR: AuthenticationFailed: MONGODB-CR credentials missing in the user document
 

此环境的 mongodb 版本是 3.2 ,mongodb 3.* 有两种认证方式,MONGODB-CR(2.6默认的) 和 SCRAM 。默认使用 SCRAM  ,但开发使用的驱动只支持 MONGODB-CR ,从而导致因认证机制不匹配而拒绝连接。

从 4.0 开始,MongoDB 已经停止对 MONGODB-CR 的支持。所以在升级到4.0之前必须先升级认证机制。
升级也很简单,只有一行命令 (百度给的强制降级到 MONGODB-CR,重新创建账户的方案真是误人子弟)

db.adminCommand({authSchemaUpgrade: 1});


可以在 3.0 到 3.6 任一版本执行。
如果是在分片上执行,需要通过 mongos 执行。默认会下发到所有节点,如果你不想这样,可以先在 mongos 执行 

db.adminCommand(
   {authSchemaUpgrade: 1, upgradeShards: false }
);


然后在每个分片的primary节点重复执行 
 

db.adminCommand({authSchemaUpgrade: 1});

关于php驱动的升级可以参考官网的介绍,如下: 

https://docs.mongodb.com/ecosystem/drivers/php/?spm=a2c4g.11186623.2.16.557e228aQNQpnJ 

 

 

本文由【xxj123gogo】发布于开源中国,原文链接:https://my.oschina.net/xxj123go/blog/3072699

全部评论: 0

    我有话说: