Mongodb atlas X509 身份验证在事务中不起作用



我在使用X509证书时遇到了一个奇怪的问题。我使用签名X509证书连接到Mongo Atlas没有问题,但是,当我试图将它用于交易时,我得到一个错误,即用户未经过身份验证。这是我的代码:

const mongoOptions = {
authSource: "$external",
useNewUrlParser: true,
useUnifiedTopology: true,
sslCert: credentials,
sslKey: credentials,
authMechanism: "MONGODB-X509"
};
const mongo = new MongoClient(process.env.MONGO_URI, mongoOptions);
const connection = await mongo.connect();
const session = mongo.startSession();
const db = mongo.db(`configs_${configPrefix}`, {});
try {
await session.startTransaction();
await db.collection(collection).updateOne({_id: id}, {$set: jsonData}, {upsert: true, session});
await session.commitTransaction();
} catch (e) {
await session.abortTransaction();
} finally {
await session.endSession();
await connection.close();
}

如果我在updateOne中删除会话,它会工作,如果我添加会话,它会抛出错误。

如果我使用用户名和密码,它在所有情况下都有效。

是否有任何限制或步骤,我错过了?

感谢

在客户端上启用命令监视,记录所有命令,观察每个命令都包含连接id。验证事务下用于命令的连接是否已经过身份验证。

在服务器上启用查询日志记录,并在服务器上重复分析,验证执行crud的每个连接先前已经过身份验证。

经过与图集支持人员的讨论和调查。他们确认这是他们共享集群(M0, M2,M5)中的一个bug。我可以确认M10+不会发生这种情况。

最新更新