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 AutoEncrypter es un objeto que encapsula el comportamiento del cifrado automático. Controla todos los recursos asociados con el cifrado automático, incluyendo el manejador libmongocrypt, el objeto cliente del almacén de claves, el objeto cliente mongocryptd y la entrada/salida 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.

Resumen de constantes colapsar

DEFAULT_EXTRA_OPTIONS =

Esta constante es parte de una API privada. Deberías evitar usar esta constante si es posible, ya que podría ser retirada o cambiada 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',
  mongocryptd_spawn_args: [ '--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 es parte de una API privada. Se debe evitar el uso de este método 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 (encriptada)

Opciones Hash (options):

  • cliente (Mongo::cliente)

    Un cliente se conectó a la colección cifrada.

  • cliente de Key Vault (Mongo::cliente | nil)

    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 (string)

    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. Estos se configuran con valores por defecto si no se pasa ninguna opción.

  • :kms_providers (encriptada)

    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_options (encriptada)

    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)

    mapea 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, desactiva 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 se require de una librería compartida para "crypt". Si es 'true', se producirá un error si libmongocrypt no puede cargar una librería crypt_shared.

Aumenta:

  • (ArgumentError)

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



87
88
89
90
91
92
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
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 87

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::gestionar.Nuevo(
    Cripta::KMS::credenciales.Nuevo(@options[:kms_providers]),
    Cripta::KMS::validación.validate_tls_options(@options[kms_tls_options]),
    schema_map: @options[Mapa de esquema],
    schema_map_path: @options[:schema_map_path],
    encrypted_fields_map: @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],
    disable_crypt_shared_lib_search: @options[:extra_options][:disable_crypt_shared_lib_search]
  )

  @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,
      mongocryptd_options: @mongocryptd_options
    )
  rescate StandardError
    begin
      @mongocryptd_client&.Cerrar
    rescate StandardError => e
      log_warn("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 StandardError
  si @key_vault_client && @key_vault_client != opciones[cliente] &&
     @key_vault_client.clúster != opciones[cliente].clúster
    begin
      @key_vault_client.Cerrar
    rescate StandardError => e
      log_warn("Error al cerrar el cliente del almacén de claves en el constructor del auto cifrador: #{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
    begin
      @metadata_client.Cerrar
    rescate StandardError => e
      log_warn("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 atributo de instancias

#key_vault_clientObject (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.



30
31
32
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 30

def key_vault_client
  @key_vault_client
end

#metadata_clientObjeto (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.



30
31
32
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 30

def 
  @metadata_client
end

#mongocryptd_clientObjeto (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.



30
31
32
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 30

def mongocryptd_client
  @mongocryptd_client
end

#opcionesObjeto (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.



30
31
32
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 30

def opciones
  @options
end

Detalles del método de instancia

#cerrarverdadero

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Cierra los recursos creados por el AutoEncrypter.

Devuelve:

  • (cierto)

    Siempre verdadero.



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 208

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
    @key_vault_client.Cerrar
  end

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

  true
end

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

Este método es parte de una API privada. Se debe evitar el uso de este método 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.



197
198
199
200
201
202
203
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 197

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 es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Encripta un comando de base de datos.

Parámetros:

  • database_name (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.



183
184
185
186
187
188
189
190
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 183

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

#cifrado?booleano

Este método es parte de una API privada. Se debe evitar el uso de este método 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.



172
173
174
# Archivo 'lib/mongo/crypt/auto_encrypter.rb', línea 172

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