类:Mongo::Crypt::AutoEncrypter Private

继承:
对象
  • 对象
显示全部
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb

Overview

此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。

AutoEcnrypter 是一个封装自动加密行为的对象。 它控制与自动加密相关的所有资源,包括 libmongocrypt处理、密钥保管库客户端对象、mongocryptd客户端对象和加密I/O。

AutoEncrypter 作为 Mongo::Client 上的实例保留。 具有相同 auto_encryption_options 哈希的客户端对象可以共享 AutoEncrypters。

常量摘要折叠

DEFAULT_EXTRA_OPTIONS =

此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。

:extra_options 选项的默认值的哈希

选项::已编辑.new({
  mongocryptd_uri: 'mongodb://localhost:27020',
  mongocryptd_bypass_spawn: false,
  mongocryptd_spawn_path: 'mongocryptd',
  mongocryptd_spawn_args: [' --idleShutdownTimeoutSecs= 60 '],
})

实例属性摘要折叠

实例方法摘要折叠

构造函数详情

#initialize (options) ⇒ AutoEncrypter

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

在包含此模块的类上设置与加密相关的选项和实例变量。 在 Mongo::Crypt::Encrypter 模块上调用相同的方法。

参数:

  • 选项 哈希

选项哈希 ( options ):

  • :client ( Mongo::Client )

    连接到加密集合的客户端。

  • :key_vault_client ( Mongo::Client | nil )

    连接到包含加密密钥保管库的 MongoDB 实例的客户端;可选。 如果未提供,则默认为 :client 选项。

  • :key_vault_namespace string

    格式数据库中密钥保管库的命名空间。集合。

  • :schema_map 哈希 | nil

    具有加密字段的集合的 JSONSchema。 此选项与 :schema_map_path 互斥。

  • :schema_map_path ( string | nil )

    文件的路径包含存储自动加密文档的集合的JSON schema 。 此选项与 :schema_map 互斥。

  • :bypass_auto_encryption (Boolean | nil)

    如果为 true,则禁用自动加密。 默认为 false。

  • :extra_options 哈希 | nil

    与生成 mongocryptd 相关的选项。 如果没有传入任何选项,这些将被设立为默认值。

  • :kms_providers 哈希

    KMS 配置信息的哈希值。 @see Mongo::Crypt::KMS::Credentials 了解每个受支持提供程序的选项列表。 @note 可能指定了多个 KMS 提供程序。

  • :kms_tls_options 哈希

    用于连接到KMS提供商的 TLS 选项。 哈希键应为 KSM提供商名称;值应该是 TLS 连接选项的哈希值。 这些选项相当于 Mongo::Client 的 TLS 连接选项。 @see Mongo::Client#initialize 以获取 TLS 选项列表。

  • :encrypted_fields_map 哈希 | nil

    将集合命名空间映射到encryptedFields。

    • 注意:如果一个集合同时存在于encryptedFieldsMap 和schemaMap 上,则会引发错误。

  • :bypass_query_analysis (Boolean | nil)

    如果为 true,则会禁用对传出命令的自动分析。

  • :crypt_shared_lib_path ( string | nil )

    用于加载 crypt 共享库的路径。 提供此选项会覆盖 libmongocrypt 的默认 crypt 共享库加载路径。

  • :crypt_shared_lib_required (Boolean | nil)

    是否需要 crypt 共享库。 如果为“true”,则当 libmongocrypt 无法加载 crypt_shared 库时,将引发错误。

引发:

  • ( ArgumentError )

    如果必需的选项丢失或格式不正确。



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第93行

def 初始化(选项)
  Crypt.validate_ffi!
  # 请注意,此调用最终可能会通过其他方法调用,
  # 创建必须清理的其他客户端。
  @options = set_default_options(选项).冻结

  @crypt_handle = Crypt::句柄.new(
    Crypt::KMS::凭证.new(@options[:kms_providers]),
    Crypt::KMS::验证.validate_tls_options(@options[:kms_tls_options]),
    schema_map: @options[:schema_map],
    schema_map_path: @options[:schema_map_path],
    encrypted_fields_map: @options[:encrypted_fields_map],
    bypass_query_analysis: @options[:bypass_query_analysis],
    crypt_shared_lib_path: @options[:extra_options][:crypt_shared_lib_path],
    crypt_shared_lib_required: @options[:extra_options][:crypt_shared_lib_required],
  )

  @mongocryptd_options = @options[:extra_options].slice(
    :mongocryptd_uri,
    :mongocryptd_bypass_spawn,
    :mongocryptd_spawn_path,
    :mongocryptd_spawn_args
  )
  @mongocryptd_options[:mongocryptd_bypass_spawn] = @options[:bypass_auto_encryption] ||
    @options[:extra_options][:mongocryptd_bypass_spawn] ||
    @crypt_handle.crypt_shared_lib_available? ||
    @options[:extra_options][:crypt_shared_lib_required]

  除非 @options[:extra_options][:crypt_shared_lib_required] || @crypt_handle.crypt_shared_lib_available? || @options[:bypass_query_analysis]
    # 将服务器选择超时设置为1 ,以防止客户端等待
    # 生成 mongocryptd 之前的长时间超时
    @mongocryptd_client = 客户.new(
      @options[:extra_options][:mongocryptd_uri],
      Monitoring_io: @options[:client].选项[:monitoring_io],
      Populator_io: @options[:client].选项[:populator_io],
      server_selection_timeout: 10,
      database: @options[:client].选项[:database]
    )
  end

  开始
    @encryption_io = EncryptionIO.new(
      客户端: @options[:client],
      mongocryptd_client: @mongocryptd_client,
      key_vault_namespace: @options[:key_vault_namespace],
      key_vault_client: @key_vault_client,
      metadata_client: @metadata_client,
      mongocryptd_options: @mongocryptd_options
    )
  救援
    开始
      @mongocryptd_client&。关闭
    救援 => e
      log_warn("在自动加密器的构造函数中关闭 mongocryptd 客户端时出错: #{ e . class } : #{ e } ")
      # 删除此异常,以便引发原始异常
    end
    提高
  end
救援
  if @key_vault_client && @key_vault_client != 选项[:client] &&
    @key_vault_client.集群 != 选项[:client].集群
  then
    开始
      @key_vault_client.关闭
    救援 => e
      log_warn("在自动加密器的构造函数中关闭 Key Vault客户端时出错: #{ e . class } : #{ e } ")
      # 删除此异常,以便引发原始异常
    end
  end

  if @metadata_client && @metadata_client != 选项[:client] &&
    @metadata_client.集群 != 选项[:client].集群
  then
    开始
      @metadata_client.关闭
    救援 => e
      log_warn("在自动加密器的构造函数中关闭元数据客户端时出错: #{ e . class } : #{ e } ")
      # 删除此异常,以便引发原始异常
    end
  end

  提高
end

实例属性详细信息

# key_vault_client对象(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。



34
35
36
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第34行

def key_vault_client
  @key_vault_client
end

# metadata_client对象(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。



35
36
37
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第35行

def 
  @metadata_client
end

# mongocryptd_client对象(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。



33
34
35
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第33行

def mongocryptd_client
  @mongocryptd_client
end

# options对象(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。



36
37
38
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第36行

def 选项
  @options
end

实例方法详细信息

# closetrue

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

关闭 AutoEncrypter 创建的资源。

返回:

  • ( true )

    始终为 true。



217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第217行

def 关闭
  @mongocryptd_client.关闭 if @mongocryptd_client

  if @key_vault_client && @key_vault_client != 选项[:client] &&
    @key_vault_client.集群 != 选项[:client].集群
  then
    @key_vault_client.关闭
  end

  if @metadata_client && @metadata_client != 选项[:client] &&
    @metadata_client.集群 != 选项[:client].集群
  then
    @metadata_client.关闭
  end

  true
end

#解密(命令) ⇒ BSON::Document

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

解密数据库命令。

参数:

  • 命令 (哈希)

    带有加密字段的命令。

返回:

  • ( BSON::Document )

    解密的命令。



206
207
208
209
210
211
212
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第206行

def 解密(命令)
  AutoDecryptionContext.new(
    @crypt_handle,
    @encryption_io,
    命令
  ).run_state_machine
end

# encrypt (database_name, command) ⇒ BSON::Document

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

加密数据库命令。

参数:

  • database_name ( string )

    正在运行该命令的数据库的名称。

  • 命令 (哈希)

    要加密的命令。

返回:

  • ( BSON::Document )

    加密的命令。



192
193
194
195
196
197
198
199
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第192行

def 加密(database_name, 命令)
  AutoEncryptionContext.new(
    @crypt_handle,
    @encryption_io,
    database_name,
    命令
  ).run_state_machine
end

# encrypt?布尔

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

此加密器是否应执行加密(如果 :bypass_auto_encryption 选项设立为 true,则返回 false)。

返回:

  • ( Boolean )

    是否执行加密。



181
182
183
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/auto_encrypter.rb', 第181行

def 加密?
  !@options[:bypass_auto_encryption]
end