自动加密
MongoDB 支持在客户端字段级加密的情况下,自动加密读取和写入操作中的字段。您可以使用以下方式执行自动加密:mongosh
以及官方 MongoDB 驱动程序。有关支持 CSFLE 的官方兼容驱动程序的完整列表,请参阅驱动程序兼容性。客户端字段级加密驱动程序兼容性.
加密写操作和读操作的工作原理
以下图表展示了客户端应用程序和驱动程序如何写入和读取字段级加密数据。
加密写操作
对于写操作,驱动程序在写入 MongoDB 数据库之前会加密字段值。
以下图表展示了客户端应用程序和驱动程序执行字段级加密数据写操作所采取的步骤。
加密读取
对于读取操作,驱动程序在发出读取操作之前加密查询中的字段值。
对于返回加密字段的读取操作,驱动程序自动解密加密值,前提是驱动程序配置了访问用于加密这些值的客户主密钥(CMK)和数据加密密钥(DEK)。
以下图显示了客户端应用程序和驱动程序查询和解密字段级加密数据的步骤。
启用自动客户端字段级加密
要启用自动加密,请在客户端的 MongoClient
实例中指定自动加密设置。
以下代码片段显示了如何在 mongosh
和 MongoDB 驱动程序中创建启用自动加密的客户端。
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服务器端模式执行。