类:Mongo::Crypt::EncryptionIO Private

继承:
对象
  • 对象
显示全部
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb

Overview

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

一个类,用于实现驱动程序和 MongoDB 服务器或 mongocryptd 之间的 I/O 方法。

常量摘要折叠

SOCKET_TIMEOUT =

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

用于 TLS 套接字连接、读取和写入的超时时间。 规范中没有规定具体的超时时间。 有关此超时时间的讨论和更新,请参阅规范 - 1394 。

10

实例方法摘要折叠

构造函数详情

#initialize (client: nil, mongocryptd_client: nil, key_vault_namespace:, key_vault_client:, metadata_client:, mongocryptd_options: {}) ⇒ EncryptionIO

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

注意:

用于自动加密时,所有参数均为必填项。 用于显式加密时,仅需要 key_vault_namespace 和 key_vault_client 参数。

注意:

该类要求 key_vault_client 和 key_vault_namespace 选项不为零且格式正确。

创建一个新的 EncryptionIO 对象,其中包含有关如何连接到密钥保管库的信息。

参数:

  • 客户端 ( Mongo::Client ) (默认为: nil

    用于连接到存储加密文档的集合的客户端,默认值为 nil。

  • mongocryptd_client ( Mongo::Client ) (默认为: nil

    连接到 mongocryptd 的客户端,默认为 nil。

  • key_vault_client ( Mongo::Client )

    客户端已连接到密钥保管库集合。

  • metadata_client ( Mongo::Client | nil )

    用于获取集合元数据的客户端。

  • key_vault_namespace ( string )

    格式为 db_name.collection_name 的密钥保管库命名空间。

  • mongocryptd_options 哈希 (默认为: {}

    与 mongocryptd 相关的选项。

选项哈希 ( mongocryptd_options: ):

  • :mongocryptd_bypass_spawn 布尔值
  • :mongocryptd_spawn_path string
  • :mongocryptd_spawn_args ( Array<String> )


57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第57行

def 初始化(
  客户端: nil, mongocryptd_client: nil, key_vault_namespace:,
  key_vault_client:, metadata_client:, mongocryptd_options: {}
)
  validate_key_vault_client!(key_vault_client)
  validate_key_vault_namespace!(key_vault_namespace)

  @client = 客户端
  @mongocryptd_client = mongocryptd_client
  @key_vault_db_name, @key_vault_collection_name = key_vault_namespace.拆分('  ')
  @key_vault_client = key_vault_client
  @metadata_client = 
  @options = mongocryptd_options
end

实例方法详细信息

# add_key_alt_name ( ID , key_alt_name) ⇒对象

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

将 key_alt_name 添加到具有给定 ID 的密钥保管库集合中密钥文档的 key_alt_names 数组。



163
164
165
166
167
168
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第163行

def add_key_alt_name(id, key_alt_name)
  key_vault_collection.find_one_and_update(
    { _id: id },
    { ' $addToSet ' => { keyAltNames: key_alt_name } },
  )
end

# collection_info (db_name, filter) ⇒哈希

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

获取与提供的筛选器匹配的集合的集合信息

参数:

  • 筛选器 哈希

返回:

  • (哈希)

    集合信息



96
97
98
99
100
101
102
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第96行

def collection_info(db_name, 筛选器)
  除非 @metadata_client
    提高 ArgumentError, ' collection_info 要求将 metadata_client 传递给构造函数,但事实并非如此'
  end

  @metadata_client.请使用(db_name).database.list_collections(过滤器: 筛选器, deserialize_as_bson: true).first
end

# delete_key ( ID ) ⇒对象

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

从密钥保管库集合中删除具有给定 ID 的密钥文档。



172
173
174
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第172行

def delete_key(id)
  key_vault_collection.delete_one(_id: id)
end

# feed_kms (kms_context, tls_options) ⇒对象

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

获取有关远程 KMS 加密密钥的信息并将其提供给 KmsContext 对象

参数:

  • kms_context ( Mongo::Crypt::KmsContext )

    与一个远程 KMS 数据密钥对应的 KmsContext 对象。 包含有关建立 TLS 连接的端点以及要在该连接上发送的消息的信息。

  • tls_options。 (哈希)

    用于连接到 KMS 提供商的 TLS 选项。 选项与 Mongo::Client 的选项相同。



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第139行

def feed_kms(kms_context, tls_options)
  with_ssl_socket(kms_context.端点, tls_options) do |ssl_socket|
    超时.超时(SOCKET_TIMEOUT, 错误::SocketTimeoutError,
      '套接字写入操作超时'
    ) do
      ssl_socket.syswrite(kms_context.message)
    end

    bytes_needed = kms_context.bytes_needed
    while bytes_needed > 0 do
      字节 = 超时.超时(SOCKET_TIMEOUT, 错误::SocketTimeoutError,
        '套接字读取操作超时'
      ) do
        ssl_socket.sysread(bytes_needed)
      end

      kms_context.提要(字节)
      bytes_needed = kms_context.bytes_needed
    end
  end
end

# find_keys (filter) ⇒ Array<BSON::Document>

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

使用提供的筛选器查询密钥保管库集合中的密钥

参数:

  • 筛选器 哈希

返回:

  • ( Array<BSON::Document> )

    查询结果



78
79
80
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第78行

def find_keys(筛选器)
  key_vault_collection.find(筛选器).to_a
end

# get_key ( ID ) ⇒对象

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

查找具有给定 ID 的单个密钥文档。



177
178
179
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第177行

def get_key(id)
  key_vault_collection.find(_id: id).first
end

# get_key_by_alt_name (key_alt_name) ⇒对象

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

返回密钥保管库集合中具有给定 key_alt_name 的密钥文档。



183
184
185
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第183行

def get_key_by_alt_name(key_alt_name)
  key_vault_collection.find(keyAltNames: key_alt_name).first
end

# get_keys对象

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

查找密钥保管库集合中的所有文档。



188
189
190
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第188行

def get_keys
  key_vault_collection.find
end

# insert_data_key (document) ⇒ Mongo::Operation::Insert::Result

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

将文档插入密钥保管库集合

参数:

  • 文档 哈希

返回:



87
88
89
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第87行

def insert_data_key(文档)
  key_vault_collection.insert_one(文档)
end

#mark_command (cmd) ⇒哈希

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

将命令发送到 mongocryptd 以标记意图加密标记

参数:

  • cmd 哈希

返回:

  • (哈希)

    标记的命令



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第109行

def mark_command(cmd)
  除非 @mongocryptd_client
    提高 ArgumentError, ' mark_command 要求将 mongocryptd_client 传递给构造函数,但事实并非如此'
  end

  # 确保来自 mongocryptd 的响应使用 { mode: :bson } 进行反序列化
  # 以防止在命令中丢失类型信息
  选项 = { execution_options: { deserialize_as_bson: true } }

  开始
    响应 = @mongocryptd_client.database.命令(cmd, 选项)
  救援 错误::NoServerAvailable => e
    提高 e if @options[:mongocryptd_bypass_spawn]

    spawn_mongocryptd
    响应 = @mongocryptd_client.database.命令(cmd, 选项)
  end

  return 响应.first
end

# remove_key_alt_name ( ID , key_alt_name) ⇒对象

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

从具有给定 ID 的密钥保管库集合中的密钥文档的 key_alt_names 数组中删除 key_alt_name。



194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第194行

def remove_key_alt_name(id, key_alt_name)
  key_vault_collection.find_one_and_update(
    { _id: id },
    [
      {
        ' $set ' => {
          keyAltNames: {
            ' $cond ' => [
              { '$eq' => [ ' $keyAltNames ', [ key_alt_name ] ] },
              ' $$REMOVE ',
              {
                ' $filter ' => {
                  输入: ' $keyAltNames ',
                  条件: { '$ne' =>  [ ' $$this ', key_alt_name ] }
                }
              }
            ]
          }
        }
      }
    ]
  )
end

# update_data_keys (updates) ⇒ BulkWrite::Result

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

使用批量写入将给定请求应用于密钥保管库集合。

参数:

  • requests ( Array<Hash> )

    批量写入请求。

返回:



223
224
225
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/encryption_io.rb', 第223行

def update_data_keys(更新)
  key_vault_collection.bulk_write(更新)
end