Clase: Mongo::Crypt::AutoEncrypter Privado

Hereda:
Objeto
  • Objeto
Mostrar todo
Definido en:
lib/mongo/crypt/auto_encrypter.rb

Overview

Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.

Un AutoEcnrypter es un objeto que encapsula el comportamiento del cifrado automático. Controla todos los recursos asociados con el cifrado automático, incluyendo el identificador libmongocrypt, el objeto cliente de almacén de claves, el objeto cliente mongocryptd y la E/S de cifrado.

El AutoEncrypter se mantiene como una instancia en un Mongo::Cliente. Los objetos de cliente con el mismo hash de auto_encryption_options pueden compartir AutoEncrypters.

Colapso delresumen constante

OPCIONES ADICIONALES PREDETERMINADAS =

Esta constante forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Un hash de valores por defecto para la opción :extra_options

opciones::Redactado.Nuevo({
  mongocryptd_uri: 'mongodb://localhost:27020',
  mongocryptd_bypass_spawn: false,
  mongocryptd_spawn_path: 'mongocryptd',
  argumentos de spawn de mongocryptd: ['--idleShutdownTimeoutSecs=60'],
})

Resumen de atributos de la instancia colapsar

Resumen del método de instancia colapsar

Detalles del constructor

#inicializar(opciones) ⇒ AutoEncrypter

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Configure las opciones relacionadas con el cifrado y las variables de instancia en la clase que incluya este módulo. Llama al mismo método del módulo Mongo::Crypt::Encrypter.

Parámetros:

  • opciones (Hash)

Opciones Hash (options):

  • cliente (Mongo::cliente)

    Un cliente conectado a la colección cifrada.

  • cliente de Key Vault (Mongo::Cliente | nulo)

    Un cliente conectado a la instancia de MongoDB que contiene la bóveda de llaves de cifrado; opcional. Si no se especifica, se usará por defecto la opción :client.

  • :key_vault_namespace (Cadena)

    El namespace del almacén de claves en el formato base de datos.colección.

  • :mapa_de_esquema (Hash | nil)

    El JSONSchema de la(s) colección(s) con campos cifrados. Esta opción es mutuamente excluyente con :schema_map_path.

  • :schema_map_path (String | nil)

    Ruta a un archivo que contiene el esquema JSON de la colección que almacena documentos cifrados automáticamente. Esta opción es mutuamente excluyente con :mapa_de_esquema.

  • :omitir_auto_encriptación (Boolean | nil)

    Cuando es verdadero, desactiva el cifrado automático. Por defecto es false.

  • :extra_options (Hash | nil)

    Opciones relacionadas con la generación de mongocryptd. Se establecen con los valores predeterminados si no se pasa ninguna opción.

  • :proveedores_de_kms (Hash)

    Un hash de información de configuración del Key Management Service. @see Mongo::Crypt::KMS::Credentials para obtener la lista de opciones para cada proveedor compatible. @note Puede que se especifique más de un proveedor de KMS.

  • :kms_tls_opciones (Hash)

    Opciones de TLS para conectarse a los proveedores de KMS. Las claves del hash deben ser nombres de los proveedores de KSM; los valores deben ser hashes de opciones de conexión TLS. Las opciones son equivalentes a las opciones de conexión TLS de Mongo::Client. @see Mongo::Client#initialize para ver la lista de opciones TLS.

  • mapa_de_campos_cifrados (Hash | nil)

    asigna un espacio de nombres de colección a un encryptedFields.

    • Nota: si una colección está presente tanto en encryptedFieldsMap como en schemaMap, se producirá un error.

  • :omitir_análisis_de_consultas (Boolean | nil)

    Cuando es verdadero, deshabilita el análisis automático de los comandos salientes.

  • crypt_shared_lib_path (String | nil)

    Ruta que debe utilizarse para cargar la librería compartida crypt. Proporcionar esta opción anula las rutas de carga por defecto de la librería compartida para libmongocrypt.

  • :crypt_shared_lib_requiere (Boolean | nil)

    Si la librería compartida crypt es necesaria. Si es "verdadero", se generará un error si libmongocrypt no puede cargar una librería crypt_shared.

Aumenta:

  • (ArgumentError)

    Si faltan las opciones requeridas o están formateadas incorrectamente.



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
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 93

def inicializar(opciones)
  Cripta.validate_ffi!
  # Nota que esta llamada podría eventualmente, a través de otras invocaciones de métodos,
  # crear clientes adicionales que deban limpiarse.
  @options = establecer_opciones_predeterminadas(opciones).freeze

  @crypt_handle = Cripta::Manejar.Nuevo(
    Cripta::KMS::credenciales.Nuevo(@options[:proveedores_de_kms]),
    Cripta::KMS::validación.validate_tls_options(@options[:kms_tls_opciones]),
    mapa_de_esquema: @options[:mapa_de_esquema],
    schema_map_path: @options[:schema_map_path],
    mapa de campos cifrados: @options[mapa_de_campos_cifrados],
    bypass_query_analysis: @options[:omitir_análisis_de_consultas],
    crypt_shared_lib_path: @options[:extra_options][crypt_shared_lib_path],
    crypt_shared_lib_required: @options[:extra_options][:crypt_shared_lib_requiere],
  )

  @mongocryptd_options = @options[:extra_options].rebanada(
    mongocryptd_uri,
    :mongocryptd_bypass_spawn,
    ruta_de_ejecucion_mongocryptd,
    argumentos_mongocryptd_spawn
  )
  @mongocryptd_options[:mongocryptd_bypass_spawn] = @options[:omitir_auto_encriptación] ||
    @options[:extra_options][:mongocryptd_bypass_spawn] ||
    @crypt_handle.¿Crypt_shared_lib_available? ||
    @options[:extra_options][:crypt_shared_lib_requiere]

  a menos que @options[:extra_options][:crypt_shared_lib_requiere] || @crypt_handle.¿Crypt_shared_lib_available? || @options[:omitir_análisis_de_consultas]
    @mongocryptd_client = Cliente.Nuevo(
      @options[:extra_options][mongocryptd_uri],
      monitoring_io: @options[cliente].opciones[:monitoring_io],
      populator_io: @options[cliente].opciones[:populator_io],
      server_selection_timeout: 10,
      database: @options[cliente].opciones[:database]
    )
  end

  begin
    @encryption_io = EncryptionIO.Nuevo(
      cliente: @options[cliente],
      mongocryptd_client: @mongocryptd_client,
      key_vault_namespace: @options[:key_vault_namespace],
      key_vault_client: @key_vault_client,
      metadata_client: @metadata_client,
      opciones de mongocryptd: @mongocryptd_options
    )
  rescate
    begin
      @mongocryptd_client&.Cerrar
    rescate => e
      advertencia de registro("Error al cerrar el cliente mongocryptd en el constructor del encriptador automático: #{e.class}: #{e}")
      # Descarta esta excepción para que se genere la excepción original
    end
    propagar
  end
rescate
  si @key_vault_client && @key_vault_client != opciones[cliente] &&
    @key_vault_client.clúster != opciones[cliente].clúster
  entonces
    begin
      @key_vault_client.Cerrar
    rescate => e
      advertencia de registro("Erroral cerrar el cliente del almacén de claves en el constructor del cifrador automático: #{e.class}: #{e}")
      # Descarta esta excepción para que se genere la excepción original
    end
  end

  si @metadata_client && @metadata_client != opciones[cliente] &&
    @metadata_client.clúster != opciones[cliente].clúster
  entonces
    begin
      @metadata_client.Cerrar
    rescate => e
      advertencia de registro("Error al cerrar el cliente de metadatos en el constructor del encriptador automático: #{e.clase}: #{e}")
      # Descarta esta excepción para que se genere la excepción original
    end
  end

  propagar
end

Detalles de los atributos de instancia

#key_vault_clientObject (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



34
35
36
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 34

def key_vault_client
  @key_vault_client
end

#metadata_clientObjeto (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



35
36
37
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 35

def 
  @metadata_client
end

#mongocryptd_clientObjeto (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



33
34
35
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 33

def mongocryptd_client
  @mongocryptd_client
end

#opcionesObjeto (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



36
37
38
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 36

def opciones
  @options
end

Detalles del método de instancia

#cerrarverdadero

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Cierra los recursos creados por el AutoEncrypter.

Devuelve:

  • (cierto)

    Siempre verdadero.



215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 215

def Cerrar
  @mongocryptd_client.Cerrar si @mongocryptd_client

  si @key_vault_client && @key_vault_client != opciones[cliente] &&
    @key_vault_client.clúster != opciones[cliente].clúster
  entonces
    @key_vault_client.Cerrar
  end

  si @metadata_client && @metadata_client != opciones[cliente] &&
    @metadata_client.clúster != opciones[cliente].clúster
  entonces
    @metadata_client.Cerrar
  end

  true
end

#descifrar(comando, timeout_holder) ⇒ BSON::Documento

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Descifrar un comando de base de datos.

Parámetros:

  • Comando (encriptada)

    La orden con campos cifrados.

Devuelve:

  • (BSON::Document)

    El comando descifrado.



204
205
206
207
208
209
210
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 204

def descifrar(Comando, timeout_holder)
  AutoDecryptionContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    Comando
  ).run_state_machine(timeout_holder)
end

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

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Encripta un comando de base de datos.

Parámetros:

  • nombre_de_la_base_de_datos (string)

    El nombre de la base de datos en la que se está ejecutando el comando.

  • Comando (encriptada)

    El comando a ser cifrado.

Devuelve:

  • (BSON::Document)

    El comando cifrado.



190
191
192
193
194
195
196
197
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 190

def cifrado(nombre_de_la_base_de_datos, Comando, timeout_holder)
  AutoEncryptionContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    nombre_de_la_base_de_datos,
    Comando
  ).run_state_machine(timeout_holder)
end

#cifrado?booleano

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Si este encriptador debe realizar el cifrado (devuelve falso si la opción :bypass_auto_encryption está configurada en verdadero).

Devuelve:

  • (booleano)

    Si se debe realizar el cifrado.



179
180
181
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 179

def cifrado?
  !@options[:omitir_auto_encriptación]
end