类:Mongo::Crypt::Handle Private

继承:
对象
  • 对象
显示全部
定义于:
lib/ Mongo/crypt/ 处理.rb

Overview

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

包装 mongocrypt_t对象的 libmongocrypt 库的处理,允许客户端在该对象上设立选项或执行加密和解密等操作

实例属性摘要折叠

实例方法摘要折叠

构造函数详情

#initialize(kms_providers, kms_tls_options, options = {}) ⇒ Handle

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

创建新的句柄对象并使用选项对其进行初始化

参数:

  • kms_providers ( Crypt:: KMS::Credentials ) —

    KMS提供商的档案。

  • kms_tls_options (哈希) —

    用于连接到 KMS 提供商的 TLS 选项。 哈希键应为 KSM 提供程序名称;值应该是 TLS 连接选项的哈希值。 这些选项相当于 Mongo::Client 的 TLS 连接选项。

  • 选项 (哈希) (默认为: {} ) —

    选项的哈希值。

选项哈希 ( options ):

  • :schema_map (哈希 | nil ) —

    表示存储自动加密文档的集合的JSON schema的哈希值。 此选项与 :schema_map_path 互斥。

  • :schema_map_path ( string | nil ) —

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

  • :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_shared 库。如果为“true”,则当 libmongocrypt 无法加载 crypt_shared 库时,将引发错误。

  • :explicit_encryption_only (Boolean | nil) —

    此处理是否仅用于显式加密。 如果为 true,则指示 libmongocrypt 不要加载 crypt 共享库。

  • :disable_crypt_shared_lib_search (Boolean | nil) —

    如果为 true,则禁止对 crypt_shared 自动进行“$SYSTEM”搜索。当同一进程中的前一个句柄已通过路径覆盖加载库,并且您希望避免 libmongocrypt 在后续“$SYSTEM”搜索时引发冲突加载错误时,请使用此选项。

  • :logger (记录器) —

    将向其发送 libmongocrypt 日志的 Logger 对象

  • :key_expiration_ms ( Integer | nil ) —

    数据加密密钥缓存的生命周期(以毫秒为单位)。值为 0 表示缓存永不过期。当 nil 时,使用 libmongocrypt 的默认60000。

引发:



73
74
75
76
77
78
79
80
81
82
83
84
85
86
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
# File 'lib/ Mongo/crypt/ 处理.rb', line 73

def 初始化(kms_providers, kms_tls_options, 选项 = {})
  # FFI::AutoPointer 使用自定义发布策略来自动释放
  # 当此对象超出作用域时的指针
  @mongocrypt = FFI::AutoPointer.new(
    绑定.mongocrypt_new,
    绑定.方法(:mongocrypt_destroy)
  )
  绑定.kms_ctx_setopt_retry_kms(self, true)
  绑定.setopt_enable_multiple_collinfo(self)
  绑定.setopt_use_need_mongo_collinfo_with_db_state(self)
  @kms_providers = kms_providers
  @kms_tls_options = kms_tls_options

  也许_set_schema_map(选项)

  @encrypted_fields_map = 选项[:encrypted_fields_map]
  set_encrypted_fields_map if @encrypted_fields_map

  @bypass_query_analysis = 选项[:bypass_query_analysis]
  set_bypass_query_analysis if @bypass_query_analysis

  @key_expiration_ms = 选项[:key_expiration_ms]
  set_key_expiration 除非 @key_expiration_ms.nil?

  @crypt_shared_lib_path = 选项[:crypt_shared_lib_path]
  @explicit_encryption_only = 选项[:explicit_encryption_only]
  @disable_crypt_shared_lib_search = 选项[:disable_crypt_shared_lib_search]
  if @crypt_shared_lib_path
    绑定.setopt_set_crypt_shared_lib_path_override(self, @crypt_shared_lib_path)
  elsif !@bypass_query_analysis && !@explicit_encryption_only && !@disable_crypt_shared_lib_search
    绑定.setopt_append_crypt_shared_lib_search_path(self, '$SYSTEM')
  end

  @logger = 选项[:logger]
  set_logger_callback if @logger

  set_crypto_hooks

  绑定.setopt_kms_providers(self, @kms_providers.to_document)

  if @kms_providers.any_on_demand?
    绑定.setopt_use_need_kms_credentials_state(self)
  end

  initialize_mongocrypt

  @crypt_shared_lib_required = !!选项[:crypt_shared_lib_required]
  return 除非 @crypt_shared_lib_required && crypt_shared_lib_version == 0

  提高 mongo::错误::CryptError.new(
    ' 需要 Crypt 共享库,但根据 libmongocrypt 无法加载 '
  )
end

实例属性详细信息

#kms_providers ⇒ Crypt::KMS::Credentials (readonly)

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

返回KMS提供商的凭证。

返回:



29
30
31
# File 'lib/ Mongo/crypt/ 处理.rb', line 29

def kms_providers
  @kms_providers
end

实例方法详细信息

# crypt_shared_lib_available? ⇒布尔

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

返回:

  • (布尔值)


158
159
160
# File 'lib/ Mongo/crypt/ 处理.rb', line 158

def crypt_shared_lib_available?
  crypt_shared_lib_version != 0
end

# crypt_shared_lib_version ⇒对象

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



154
155
156
# File 'lib/ Mongo/crypt/ 处理.rb', line 154

def crypt_shared_lib_version
  绑定.crypt_shared_lib_version(self)
end

# kms_tls_options (提供商) ⇒哈希

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

返回KMS提供商的 TLS 选项。如果未设立TLS 选项,则返回空哈希。命名提供商(例如“kmip:name1”)回退到基本类型选项(例如:kmip)(当未找到精确匹配项时)。

参数:

  • provider ( string ) —

    KMS 提供商名称或命名标识符。

返回:

  • (哈希) —

    用于连接到 KMS 提供商的 TLS 选项。



141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/ Mongo/crypt/ 处理.rb', line 141

def kms_tls_options(provider)
  provider_str = provider.to_s
  base_type = KMS.provider_base_type(provider_str)

  @kms_tls_options.获取(provider_str) do
    @kms_tls_options.获取(provider_str.to_sym) do
      @kms_tls_options.获取(base_type) do
        @kms_tls_options.获取(base_type.to_sym, {})
      end
    end
  end
end

# ref ⇒ FFI::Pointer

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

返回对根本的@mongocrypt对象的引用

返回:

  • ( FFI::Pointer )


130
131
132
# File 'lib/ Mongo/crypt/ 处理.rb', line 130

def ref
  @mongocrypt
end