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. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse 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::Client. Los objetos cliente con el mismo hash 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 predeterminados para la opción :extra_options

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

Colapso delresumen de atributos de instancia

Colapso del resumen del método de instancia

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.

Configura las opciones de cifrado y las variables de instancia en la clase que incluye este módulo. Llama al mismo método en el módulo Mongo::Crypt::Encrypter.

Parámetros:

  • opciones (Hash)

Opciones Hash(opciones):

  • :cliente (Mongo::Cliente)

    Un cliente conectado a la colección cifrada.

  • :cliente de bóveda de claves (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 espacio de nombres del almacén de claves en el formato database.collection.

  • :mapa_de_esquema (Hash | nulo)

    El JSONSchema de las colecciones con campos cifrados. Esta opción es mutuamente excluyente con :schema_map_path.

  • :ruta_del_mapa_del_esquema (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_cifrado_automático (Boolean | nil)

    Si es verdadero, desactiva el cifrado automático. El valor predeterminado es falso.

  • :extra_options (Hash | nulo)

    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 servicio de administración de claves. @see Mongo::Crypt::KMS::Credentials para obtener una lista de opciones para cada proveedor compatible. @note Puede haber más de un proveedor de KMS especificado.

  • :kms_tls_opciones (Hash)

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

  • :mapa de campos cifrados (Hash | nulo)

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

    • Nota: Si hay una colección presente tanto en encryptedFieldsMap como en schemaMap, se generará un error.

  • :análisis de consulta de bypass (Boolean | nil)

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

  • :ruta_de_biblioteca_compartida_crypt (String | nil)

    Ruta que debe usarse para cargar la biblioteca compartida de Crypt. Al usar esta opción, se anulan las rutas de carga predeterminadas de la biblioteca compartida de Crypt para libmongocrypt.

  • :crypt_shared_lib_required (Boolean | nil)

    Si se requiere la biblioteca compartida crypt. Si es 'true', se generará un error si libmongocrypt no puede cargar una biblioteca crypt_shared.

Aumentos:

  • (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!
  # Tenga en cuenta que esta llamada puede eventualmente, a través de otras invocaciones de métodos,
  # crear clientes adicionales que deben limpiarse.
  @opciones = establecer_opciones_predeterminadas(opciones).freeze

  @crypt_handle = Cripta::Manejar.Nuevo(
    Cripta::KMS::Credenciales.Nuevo(@opciones[:proveedores_de_kms]),
    Cripta::KMS::Validaciones.validate_tls_options(@opciones[:kms_tls_opciones]),
    mapa_de_esquema: @opciones[:mapa_de_esquema],
    schema_map_path: @opciones[:ruta_del_mapa_del_esquema],
    mapa de campos cifrados: @opciones[:mapa de campos cifrados],
    análisis de consulta de derivación: @opciones[:análisis de consulta de bypass],
    ruta_de_biblioteca_compartida_de_cripta: @opciones[:extra_options][:ruta_de_biblioteca_compartida_crypt],
    biblioteca compartida de cifrado requerida: @opciones[:extra_options][:crypt_shared_lib_required],
  )

  @mongocryptd_options = @opciones[:extra_options].segmento(
    :mongocryptd_uri,
    :mongocryptd_bypass_spawn,
    :ruta_de_generación_de_mongocryptd,
    :argumentos de generación de mongocryptd
  )
  @mongocryptd_options[:mongocryptd_bypass_spawn] = @opciones[:omitir_cifrado_automático] ||
    @opciones[:extra_options][:mongocryptd_bypass_spawn] ||
    @crypt_handle.¿Crypt_shared_lib_available? ||
    @opciones[:extra_options][:crypt_shared_lib_required]

  a no ser que @opciones[:extra_options][:crypt_shared_lib_required] || @crypt_handle.¿Crypt_shared_lib_available? || @opciones[:análisis de consulta de bypass]
    @mongocryptd_client = Cliente.Nuevo(
      @opciones[:extra_options][:mongocryptd_uri],
      monitoring_io: @opciones[:cliente].opciones[:monitoring_io],
      populator_io: @opciones[:cliente].opciones[:populator_io],
      server_selection_timeout: 10,
      database: @opciones[:cliente].opciones[:database]
    )
  end

  begin
    @encryption_io = EncryptionIO.Nuevo(
      cliente: @opciones[:cliente],
      mongocryptd_client: @mongocryptd_client,
      key_vault_namespace: @opciones[:key_vault_namespace],
      cliente de bóveda de claves: @key_vault_client,
      metadata_client: @metadata_client,
      opciones de mongocryptd: @mongocryptd_options
    )
  rescate
    begin
      @mongocryptd_client&.cerrar
    rescate => e
      advertencia de registro("Erroral cerrar el cliente mongocryptd en el constructor del cifrador automático: #{e.class}: #{e}")
      # Elimine 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}")
      # Elimine 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("Erroral cerrar el cliente de metadatos en el constructor del cifrador automático: #{e.class}: #{e}")
      # Elimine esta excepción para que se genere la excepción original
    end
  end

  propagar
end

Detalles de los atributos de instancia

#key_vault_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.



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

def cliente de bóveda de claves
  @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
  @opciones
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.

Cerrar los recursos creados por AutoEncrypter.

Devuelve:

  • (verdadero) -

    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::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.

Descifrar un comando de base de datos.

Parámetros:

  • Comando (Hash)

    El comando con campos encriptados.

Devuelve:

  • (BSON::Documento)

    El comando descifrado.



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

def desencriptar(Comando, timeout_holder)
  AutoDecryptionContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    Comando
  ).máquina de estado de ejecución(timeout_holder)
end

#cifrar(nombre_de_base_de_datos, comando, contenedor_de_tiempo_de_espera) ⇒ 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.

Encripta un comando de base de datos.

Parámetros:

  • nombre_de_la_base_de_datos (Cadena) -

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

  • Comando (Hash)

    El comando a cifrar.

Devuelve:

  • (BSON::Documento)

    El comando encriptado.



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

def cifrar(nombre_de_la_base_de_datos, Comando, timeout_holder)
  AutoEncryptionContext.Nuevo(
    @crypt_handle,
    @encryption_io,
    nombre_de_la_base_de_datos,
    Comando
  ).máquina de estado de ejecución(timeout_holder)
end

#¿encriptar?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 cifrador debe realizar el cifrado (devuelve falso si la opción :bypass_auto_encryption está establecida en verdadero).

Devuelve:

  • (Booleano)

    Si se debe realizar el cifrado.



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

def ¿cifrar?
  !@opciones[:omitir_cifrado_automático]
end