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 

 

 

转载于:https://my.oschina.net/xxj123go/blog/3072699

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值