问题标签 [mongodb-csfle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
506 浏览

node.js - MongoDB 客户端字段级别加密 - NodeJS 驱动程序 - 未在本地密钥库的数据密钥文档中创建 keyAltNames 字段

我一直在关注本指南 -如何使用 MongoDB Client-Side Field Level Encryption (CSFLE) with Node.js/来测试 MongoDB CSFLE。

为此,在本地密钥库存储中创建数据密钥的步骤https://developer.mongodb.com/how-to/client-side-field-level-encryption-csfle-mongodb-node/#create- a-data-key-in-mongodb-for-encrypting-and-decrypting-document-fields数据密钥已成功创建,但 keyAltName 未附加到数据密钥的文档中。

我对此进行了多次测试,我的代码没有任何问题,我正在按照指南进行操作。我不明白是什么导致了这个问题。数据键创建成功,但没有 keyAltNames 字段。非常感谢您的帮助。

与数据密钥文档创建相关的代码

结果文件

在此处输入图像描述

包 JSON MongoDB 驱动程序/MongoDB 客户端加密 NPM 包版本

0 投票
2 回答
90 浏览

mongodb - Mongo CSFLE 数据加密密钥一次或批量获取

在 MongoDB 客户端字段级别加密中,当我们加密记录并在密钥库中有多个数据加密密钥(请不要将其与主密钥混淆)时,如果我们在单个查询中获取多条记录,例如 X 记录有 1 个字段使用 Y 个不同的数据加密密钥加密,我想了解驱动程序如何处理这些数据加密密钥的获取。我可以想到下面列出的几种方法来处理它,但想了解确切的行为以最终确定我们的方法。

  1. 它获取 X 条记录并在解密每条记录时调用以获取用于加密该特定记录的数据加密密钥。因此,一起进行 X db 调用以获取密钥。
  2. 与上面相同,但当它获取数据加密密钥时,它会将其存储在内存中,以便在任何其他未重新加密的记录使用相同的数据加密密钥时重复使用。在这种方法中,它会调用 Y db 来获取密钥。
  3. 它获取 X 条记录并列出所有使用的不同键标识符。进行单个数据库调用以获取所有这些不同的数据加密密钥。在这种方法中,它会进行一次 db 调用来获取所有键。
  4. 别的办法。

如果有人知道它是如何实现的,请分享。

TIA

0 投票
1 回答
33 浏览

mongodb - mongodb CSFLE -- 使用动态数据键

我们想使用 mongo 的原生 CSFLE 产品(https://docs.mongodb.com/drivers/security/client-side-field-level-encryption-guide/),但是根据文档,它看起来像数据密钥 ID 应在初始化之前提供MongoClient

在我们的用例中,我们需要动态使用相同的模式,但具有不同的数据键(例如,多租户架构中的每个客户使用不同的数据键)

这个问题的惯用解决方案是什么?

编辑:来自 mongodb 社区论坛的类似问题:https: //www.mongodb.com/community/forums/t/csfle-with-data-key-per-document/113161

谢谢!

0 投票
1 回答
141 浏览

node.js - 如何设置 mongoDB 的新 CSFLE 功能,使用 nodejs 显式加密隐式解密?

我正在尝试将 MongoDB 的客户端归档级别加密功能与社区版一起使用。我对自动加密功能不感兴趣。但是,我们需要根据文档在社区版中也可以使用的自动解密功能。

我们通常在我们的应用程序中使用猫鼬,但我也尝试使用本机 nodejs 驱动程序。这是我用来创建连接的代码。如果我注释掉autoEncryption对象,这可以正常工作。这样做可以让我手动加密,但这样我们也必须手动解密,这有点超出目的。

一些文档建议将带有extraOptions对象的bypassAutoEncryption: true添加到autoEncryption对象。我已经这样做了,如下所示。

我的代码一直在工作,直到生成主密钥、数据密钥并明确加密数据。不幸的是,我无法设置自动解密。要使用 CSFLE 选项配置客户端,必须在选项中传递autoEncryption。但是每当我通过此选项时,我都会收到以下异常

我遵循了以下参考文献中的几乎所有建议。令人惊讶的是,mondodb-nodejs 文档甚至没有提到bypassAutoEncryption。我碰巧偶然发现了 mongodb-c(下面的第 3 点和第 4 点)驱动程序文档,在那里我第一次找到了此类选项的 ant 参考

  1. https://github.com/mongodb/node-mongodb-native/blob/4ecaa37f72040ed8ace6eebc861b43ee9cb32a99/test/spec/client-side-encryption/tests/README.rst
  2. https://github.com/Automattic/mongoose/issues/8167
  3. http://mongocxx.org/mongocxx-v3/client-side-encryption/
  4. https://mongodb.github.io/mongo-csharp-driver/2.11/reference/driver/crud/client_side_encryption/#explicit-encryption-and-auto-decryption

我能够使用自动解密配置 mongoShell,这意味着我的初始设置没有错误。此外,它让我相信也必须有一种方法可以做到这一点。通过代码。

我的堆栈:

  • 节点JS:> 14.7
  • MongoDB:4.4
  • 操作系统:适用于开发的 macOS,产品将在 AmazonLinux2 上
  • 驱动程序:mongoose、native-nodejs、mongodb-client-encryption

文档中没有明确提及。但是根据我的阅读,自动解密不需要企业专用的 mongocryptd 进程。

正如官方mongoDB-c-driver中提到的

虽然自动加密需要 MongoDB 4.2 企业版或 MongoDB 4.2 Atlas 集群,但所有用户都支持自动解密。要配置不自动加密的自动解密,请在 options::auto_encryption 类中设置 bypass_auto_encryption=True。

我相信bypassAutoEncryption选项就是为此目的而设计的。

0 投票
1 回答
87 浏览

c# - 使用 csfle 时超出 mongo 连接

使用 Mongo Atlas M0 免费层。

我最近实现了 mongo 客户端字段级加密 ( csfle)。实施是成功的,但之后问题就开始了。

作为标准文档,要实现csfle,我们必须在创建新的 mongoClient 实例时提供连接设置。设置包括KMS ProviderKeyVaultNamespaceSchemamap

我想为三个不同的集合实现加密,所以我每次都必须创建新的 mongoclient 实例,因为设置参数不同。

我已经成功实现了这一切,但部署后,我开始收到 mongo 连接错误。

此外,我已经开始从 mongo atlas 接收有关连接阈值的警报“您收到此警报电子邮件,因为与您的集群的连接已超过 500,并且接近 M0 集群的连接限制”

我的问题是:

  1. 有没有一种方法可以在使用 csfle 时创建 mongoClient 的单例实例?
  2. 有没有办法在我创建 mongoClient 实例后设置连接设置。我试过但看起来它是一个只读属性。

任何帮助将不胜感激。

0 投票
1 回答
164 浏览

node.js - 无法理解如何安装 libmongocrypt

我正在尝试使用autoEncrypt选项在 NODE.js 中设置 mongo 连接,它当然会尝试在 port 与驱动程序连接27020。我没有libmongocrypt运行服务,因此连接会生成以下错误。

ECONNREFUSED 127.0.0.1:27020

我正在尝试使用bypassAutoEncryption标志实现手动加密。

我知道我们必须使用这个库,但它似乎是一个 C 库,我仍然不知道如何在本地环境中设置 libmongocrypt。

操作系统:Windows 10 MONGO 版本:5.0

任何帮助,将不胜感激!谢谢

0 投票
1 回答
59 浏览

mongodb - MongoDb 'Client Side Field Level Encryption' (CSFLE) 是否支持在数据库中搜索加密字段?

如果我将 MongoDb 配置为使用“客户端字段级加密”(CSFLE),客户端是否可以在数据库集合中搜索加密字段。例如 - 如果我加密 POCO-Class-User 的属性/字段“EmailAddress”,然后想通过该 emailAddressValue 的 Searchstring 搜索该用户。MongoDbServer 是否自动加密 seachValue 并查找它?这种加密是“确定性的”吗?意思是相同的输入总是会导致相同的加密输出吗?谢谢——我使用 MongoDb 和 Atlas MongoDb 的 C# 驱动程序(4.4.10 // 免费层)。