Mongodb atlas X509 身份验证在事务中不起作用
Mongodb atlas X509 auth doesn't work in transaction
使用 X509 证书的 Mongo Atlas 有一个奇怪的问题。
我连接到 Mongo Atlas usign X509 证书没有问题,但是,当我尝试将它用于事务时,我收到用户未通过身份验证的错误。
这是我的代码:
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 的连接之前都经过身份验证。
经过与 atlas 支持的一些讨论和调查。他们确认这是他们共享集群(M0、M2、M5)中的一个错误。我可以确认它不会在 M10+ 中发生。
使用 X509 证书的 Mongo Atlas 有一个奇怪的问题。 我连接到 Mongo Atlas usign X509 证书没有问题,但是,当我尝试将它用于事务时,我收到用户未通过身份验证的错误。 这是我的代码:
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 的连接之前都经过身份验证。
经过与 atlas 支持的一些讨论和调查。他们确认这是他们共享集群(M0、M2、M5)中的一个错误。我可以确认它不会在 M10+ 中发生。