Classe: Mongo::Crypt::AutoEncrypter Private

Herda:
Objeto
  • Objeto
mostrar tudo
Definido em:
build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb

Visão geral

Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.

Um AutoEcnrypter é um objeto que encapsula o comportamento da criptografia automática. Ele controla todos os recursos associados à criptografia automática, incluindo o identificador libmongocrypt, o objeto de cliente do Key Vault, o objeto de cliente objeto e a E/S de criptografia.

O AutoEncrypter é mantido como uma instância em um Mongo::Client. Objetos de cliente com o mesmo auto_encryption_options Hash podem compartilhar AutoEncrypters.

Colapsode resumo constante

DEFAULT_EXTRA_OPTIONS =

Essa constante faz parte de uma API privada. Você deve evitar usar essa constante, se possível, pois ela pode ser removida ou alterada no futuro.

Um hash de valores padrão para a opção :extra_options

Opções::Editado.Novo({
  mongocryptd_uri: 'mongodb://localhost:27020',
  mongocryptd_bypass_spawn: false,
  mongocryptd_spawn_path: 'mongocryptd',
  mongocryptd_spawn_args: ['--idleShutdownTimeoutSecs=60'],
})

Recolhimento do Resumo do atributo de instância

Recolhimento do Resumo do método de instância

Detalhes do construtor

#initialize(opções) ➤ AutoEncrypter

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Configure opções relacionadas à criptografia e variáveis de instância na classe que inclui esse módulo. Chama o mesmo método no módulo Mongo::Crypt::Encrypter.

Parâmetros:

  • opções (Hash)

Hash de opções (opções):

  • :cliente (Mongo::Client)

    Um cliente conectado à coleção criptografada.

  • :key_vault_client (Mongo::Client | nil)

    Um cliente conectado à instância do MongoDB contendo o cofre da chave de criptografia; opcional. Se não for fornecido, o padrão será a opção :client .

  • :key_vault_namespace (string)

    O namespace do cofre de chaves no formato .collection do banco de dados de dados.

  • :schema_map (Hash | nulo)

    O JSONSchema da(s) collection(s) com campos criptografados. Esta opção é mutuamente exclusiva com :schema_map_path.

  • :schema_map_path (string | nil)

    Um caminho para um arquivo contém o JSON schema da coleção que armazena documentos criptografados automaticamente. Esta opção é mutuamente exclusiva com o :schema_map.

  • :bypass_auto_encryption (Boolean | nil)

    Quando verdadeiro, desabilita a criptografia automática. O padrão é falso.

  • :extra_options (Hash | nulo)

    Opções relacionadas à desativação de mongocryptd. Eles são definidos como valores padrão se nenhuma opção for passada.

  • :kms_providers (Hash)

    Um hash de informações de configuração do KMS. @consulte Mongo::Crypt::KMS::Credentials para obter a lista de opções de cada provedor suportado. @note Pode haver mais de um provedor de KMS especificado.

  • :kms_tls_options (Hash)

    Opções de TLS para se conectar a provedores de KMS. As chaves do hash devem ser nomes de provedor KSM; Os valores devem ser hashes de opções de conexão TLS . As opções são equivalentes às opções de conexão TLS do Mongo::Client. @veja Mongo::Client#initialize para obter uma lista de opções de TLS.

  • :encrypted_fields_map (Hash | nulo)

    mapeia um namespace da collection para um encryptionFields.

    • Observação: se uma coleção estiver presente no encryptionFieldsMap e no schemaMap, um erro será gerado.

  • :bypass_query_analysis (Boolean | nil)

    Quando verdadeiro, desativa a análise automática de comandos de saída.

  • :crypt_shared_lib_path (string | nil)

    Caminho que deve ser usado para carregar a biblioteca compartilhada de criptografia. Desde que esta opção substitua os caminhos de carregamento da biblioteca compartilhada de criptografia padrão para libmongocrypt.

  • :crypt_shared_lib_required (Boolean | nil)

    Se a biblioteca compartilhada de criptografia é necessária. Se 'true', um erro será gerado se uma biblioteca crypt_shared não puder ser carregada por libmongocrypt.

Aumenta:

  • (ArgumentError)

    Se as opções necessárias estiverem ausentes ou formatadas incorretamente.



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-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 93

def inicializar(opções)
  Criptografar.validate_ffi!
  # Observe que essa chamada pode eventualmente, por meio de outras invocações de método,
  # cria clientes adicionais que precisam ser limpos.
  @opções = set_default_options(opções).congelar

  @crypt_handle = Criptografar::Lidar.Novo(
    Criptografar::KMS::Credenciais.Novo(@opções[:kms_providers]),
    Criptografar::KMS::Validações.validate_tls_options(@opções[:kms_tls_options]),
    schema_map: @opções[:schema_map],
    schema_map_path: @opções[:schema_map_path],
    encryption_fields_map: @opções[:encrypted_fields_map],
    bypass_query_analysis: @opções[:bypass_query_analysis],
    crypt_shared_lib_path: @opções[:extra_options][:crypt_shared_lib_path],
    crypt_shared_lib_required: @opções[:extra_options][:crypt_shared_lib_required],
  )

  @mongocryptd_options = @opções[:extra_options].fatia(
    :mongocryptd_uri,
    :mongocryptd_bypass_spawn,
    :mongocryptd_spawn_path,
    :mongocryptd_spawn_args
  )
  @mongocryptd_options[:mongocryptd_bypass_spawn] = @opções[:bypass_auto_encryption] ||
    @opções[:extra_options][:mongocryptd_bypass_spawn] ||
    @crypt_handle.crypt_shared_lib_available? ||
    @opções[:extra_options][:crypt_shared_lib_required]

  a menos que @opções[:extra_options][:crypt_shared_lib_required] || @crypt_handle.crypt_shared_lib_available? || @opções[:bypass_query_analysis]
    # Defina o tempo limite de seleção do servidor para 1 para evitar que o cliente espere um
    # longo tempo limite antes de gerar mongocryptd
    @mongocryptd_client = Cliente.Novo(
      @opções[:extra_options][:mongocryptd_uri],
      monitoring_io: @opções[:cliente].opções[:monitoring_io],
      populator_io: @opções[:cliente].opções[:populator_io],
      server_selection_timeout: 10,
      database: @opções[:cliente].opções[:database]
    )
  end

  começar
    @encryption_io = EncryptionIO.Novo(
      cliente: @opções[:cliente],
      mongocryptd_client: @mongocryptd_client,
      key_vault_namespace: @opções[:key_vault_namespace],
      key_vault_client: @key_vault_client,
      metadata_client: @metadata_client,
      mongocryptd_options: @mongocryptd_options
    )
  salvar
    começar
      @mongocryptd_client&.Fechar
    salvar => e
      log_service("Erro ao fechar o cliente mongocryptd no construtor do criptografador automático: #{e.class}: #{e}")
      # Solte esta exceção para que a exceção original seja gerada
    end
    aumentar
  end
salvar
  se @key_vault_client && @key_vault_client != opções[:cliente] &&
    @key_vault_client.cluster != opções[:cliente].cluster
  então
    começar
      @key_vault_client.Fechar
    salvar => e
      log_service("Erro ao fechar o cliente do cofre de chaves no construtor do criptografador automático: #{e.classe}: #{e}")
      # Solte esta exceção para que a exceção original seja gerada
    end
  end

  se @metadata_client && @metadata_client != opções[:cliente] &&
    @metadata_client.cluster != opções[:cliente].cluster
  então
    começar
      @metadata_client.Fechar
    salvar => e
      log_service("Erro ao fechar o cliente de metadados no construtor do criptografador automático: #{e.class}: #{e}")
      # Solte esta exceção para que a exceção original seja gerada
    end
  end

  aumentar
end

Detalhes do atributo da instância

#key_vault_client ➤ Objeto (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.



34
35
36
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 34

def key_vault_client
  @key_vault_client
end

#metadata_clientObjeto (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.



35
36
37
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 35

def 
  @metadata_client
end

#mongocryptd_client ➤ Objeto (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.



33
34
35
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 33

def mongocryptd_client
  @mongocryptd_client
end

#opções Objeto (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.



36
37
38
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 36

def opções
  @opções
end

Detalhes do método de instância

#closetrue

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Feche os recursos criados pelo AutoEncrypter.

Retorna:

  • (verdadeiro)

    Sempre verdadeiro.



217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 217

def Fechar
  @mongocryptd_client.Fechar se @mongocryptd_client

  se @key_vault_client && @key_vault_client != opções[:cliente] &&
    @key_vault_client.cluster != opções[:cliente].cluster
  então
    @key_vault_client.Fechar
  end

  se @metadata_client && @metadata_client != opções[:cliente] &&
    @metadata_client.cluster != opções[:cliente].cluster
  então
    @metadata_client.Fechar
  end

  true
end

#descriptografar(comando) ➤ BSON::Document

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Descriptografar um comando de banco de dados de dados .

Parâmetros:

  • comando (Hash)

    O comando com campos criptografados.

Retorna:

  • (BSON::Document)

    O comando descriptografado.



206
207
208
209
210
211
212
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 206

def Descriptografar(comando)
  AutoDecryptionContext.Novo(
    @crypt_handle,
    @encryption_io,
    comando
  ).run_state_machine
end

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

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Criptografe um comando de banco de dados de dados .

Parâmetros:

  • nome do banco de dados (string)

    O nome do banco de dados no qual o comando está sendo executado.

  • comando (Hash)

    O comando a ser criptografado.

Retorna:

  • (BSON::Document)

    O comando criptografado.



192
193
194
195
196
197
198
199
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 192

def criptografar(nome do banco de dados, comando)
  AutoEncryptionContext.Novo(
    @crypt_handle,
    @encryption_io,
    nome do banco de dados,
    comando
  ).run_state_machine
end

#criptografar?Booleano

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Se esse criptografador deve executar a criptografia (retorna falso se a opção :bypass_auto_encryption estiver definida como true).

Retorna:

  • (Booleano)

    Se a criptografia deve ser executada.



181
182
183
# File 'build/ruby-driver-v2.19/lib/mongo/crypt/auto_encrypter.rb', linha 181

def criptografar?
  !@opções[:bypass_auto_encryption]
end