MongoDB 认证机制升级
早上某php开发反映新搭建的 mongodb 副本集连不上,后发现是认证问题导致的。
具体的报错信息如下:
1 | 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" } |
此环境的 mongodb 版本是 3.2 ,mongodb 3.* 有两种认证方式,MONGODB-CR(2.6默认的) 和 SCRAM 。默认使用 SCRAM ,但开发使用的驱动只支持 MONGODB-CR ,从而导致因认证机制不匹配而拒绝连接。
从 4.0 开始,MongoDB 已经停止对 MONGODB-CR 的支持。所以在升级到4.0之前必须先升级认证机制。
升级也很简单,只有一行命令 (百度给的强制降级到 MONGODB-CR,重新创建账户的方案真是误人子弟)
1 | db.adminCommand({authSchemaUpgrade: 1}); |
可以在 3.0 到 3.6 任一版本执行。
如果是在分片上执行,需要通过 mongos 执行。默认会下发到所有节点,如果你不想这样,可以先在 mongos 执行
1 | db.adminCommand( |
然后在每个分片的primary节点重复执行
1 | db.adminCommand({authSchemaUpgrade: 1}); |
关于php驱动的升级可以参考官网的介绍,如下:
https://docs.mongodb.com/ecosystem/drivers/php/?spm=a2c4g.11186623.2.16.557e228aQNQpnJ
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ASKDBA!
评论