文档菜单
文档首页
/
MongoDB 手册
/ / / / /

自动加密

本页内容

  • 加密的读写操作是如何工作的
  • 加密写入
  • 加密读取
  • 启用自动客户端字段级加密
  • 服务器端字段级加密强制执行

MongoDB 支持在客户端字段级加密的情况下,自动加密读取和写入操作中的字段。您可以使用以下方式执行自动加密:mongosh 以及官方 MongoDB 驱动程序。有关支持 CSFLE 的官方兼容驱动程序的完整列表,请参阅驱动程序兼容性。客户端字段级加密驱动程序兼容性.

以下图表展示了客户端应用程序和驱动程序如何写入和读取字段级加密数据。

对于写操作,驱动程序在写入 MongoDB 数据库之前会加密字段值。

以下图表展示了客户端应用程序和驱动程序执行字段级加密数据写操作所采取的步骤。

Diagram that shows the data flow for a write of field-level encrypted data

对于读取操作,驱动程序在发出读取操作之前加密查询中的字段值。

对于返回加密字段的读取操作,驱动程序自动解密加密值,前提是驱动程序配置了访问用于加密这些值的客户主密钥(CMK)和数据加密密钥(DEK)。

以下图显示了客户端应用程序和驱动程序查询和解密字段级加密数据的步骤。

Diagram that shows the data flow for querying and reading field-level encrypted data

要启用自动加密,请在客户端的 MongoClient 实例中指定自动加密设置。

以下代码片段显示了如何在 mongosh 和 MongoDB 驱动程序中创建启用自动加密的客户端。

var autoEncryptionOpts =
{
"keyVaultNamespace" : "<database>.<collection>",
"kmsProviders" : { ... },
"schemaMap" : { ... }
}
cluster = Mongo(
"<Your Connection String>",
autoEncryptionOpts
);

提示

环境变量

如果可能,请考虑将 kmsProviders 中提供的凭据定义为环境变量,然后使用 mongosh--eval 选项将它们传递给。这最大限度地减少了凭据泄露到日志中的风险。

var clientSettings = MongoClientSettings.FromConnectionString(_connectionString);
var autoEncryptionOptions = new AutoEncryptionOptions(
keyVaultNamespace: keyVaultNamespace,
kmsProviders: kmsProviders,
schemaMap: schemaMap,
extraOptions: extraOptions);
clientSettings.AutoEncryptionOptions = autoEncryptionOptions;
var client = new MongoClient(clientSettings);
autoEncryptionOpts := options.AutoEncryption().
SetKmsProviders(provider.Credentials()).
SetKeyVaultNamespace(keyVaultNamespace).
SetSchemaMap(schemaMap).
SetExtraOptions(extraOptions)
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOpts))
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("mongodb://127.0.0.1:27017"))
.autoEncryptionSettings(AutoEncryptionSettings.builder()
.keyVaultNamespace(keyVaultNamespace)
.kmsProviders(kmsProviders)
.schemaMap(schemaMap)
.extraOptions(extraOptions)
.build())
.build();
MongoClient mongoClient = MongoClients.create(clientSettings);
const secureClient = new MongoClient(connectionString, {
monitorCommands: true,
autoEncryption: {
keyVaultNamespace,
kmsProviders,
schemaMap: patientSchema,
extraOptions: extraOptions,
},
});
fle_opts = AutoEncryptionOpts(
kms_providers,
key_vault_namespace,
schema_map=patient_schema,
**extra_options
)
client = MongoClient(connection_string, auto_encryption_opts=fle_opts)

有关 CSFLE 特定的 MongoClient 设置的更多信息,请参阅 CSFLE 的 MongoClient 选项。

MongoDB支持使用模式验证来强制执行集合中特定字段的加密。执行自动客户端字段级加密的客户端根据数据库连接配置具有特定的行为。

  • 如果连接autoEncryptionOpts schemaMap对象包含指定集合的键,则客户端使用该对象执行自动字段级加密并忽略远程模式。至少,本地规则必须加密远程模式标记为需要加密的字段。

  • 如果连接autoEncryptionOpts schemaMap对象不包含指定集合的键,则客户端下载集合的服务器端远程模式并使用它来执行自动字段级加密。

    重要

    行为考虑因素

    autoEncryptionOpts不包含指定集合的键时

    • 客户端信任服务器具有关于自动字段级加密的有效模式。

    • 客户端仅使用远程模式执行自动CSFLE。客户端不执行模式中指定的其他验证规则。

有关如何设置服务器端CSFLE执行的说明,请参阅CSFLE服务器端模式执行。

返回

基础知识