类:Mongo::Crypt::EncryptionIO Private
- 继承:
-
对象
- 对象
- Mongo::Crypt::EncryptionIO
- 定义于:
- lib/ Mongo/crypt/encryption_io.rb
Overview
此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。
一个类,用于实现驱动程序和 MongoDB 服务器或 mongocryptd 之间的 I/O 方法。
常量摘要折叠
- SOCKET_TIMEOUT =
此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。
用于 TLS 套接字连接、读取和写入的超时时间。 规范中没有规定具体的超时时间。 有关此超时时间的讨论和更新,请参阅规范 - 1394 。
10
实例方法摘要折叠
-
# add_key_alt_name (ID, key_alt_name, timeout_ms: nil) ⇒ 对象
private
将 key_alt_name 添加到具有给定 ID 的密钥保管库集合中密钥文档的 key_alt_names 数组。
-
# collection_info (db_name, 过滤, timeout_ms: nil) ⇒ 哈希
private
获取与提供的筛选器匹配的集合的集合信息。
-
# delete_key (ID, timeout_ms: nil) ⇒ 对象
private
从密钥保管库集合中删除具有给定 ID 的密钥文档。
-
# feed_kms (kms_context, tls_options, timeout_ms: nil) ⇒ 对象
private
获取有关远程 KMS 加密密钥的信息并将其提供给 KmsContext 对象。
-
# find_keys (过滤, timeout_ms: nil) ⇒ Array<BSON::Document>
private
使用提供的筛选器查询密钥保管库集合中的密钥。
-
# get_key (ID, timeout_ms: nil) ⇒ 对象
private
查找具有给定 ID 的单个密钥文档。
-
# get_key_by_alt_name (key_alt_name, timeout_ms: nil) ⇒ 对象
private
返回密钥保管库集合中具有给定 key_alt_name 的密钥文档。
-
# get_keys (timeout_ms: nil) ⇒ 对象
private
查找密钥保管库集合中的所有文档。
-
#initialize (client: nil, mongocryptd_client: nil, key_vault_namespace:, key_vault_client:, metadata_client:, mongocryptd_options: {}) ⇒ EncryptionIO
构造函数
private
创建一个新的 EncryptionIO 对象,其中包含有关如何连接到密钥保管库的信息。
-
# insert_data_key (文档, timeout_ms: nil) ⇒ Mongo::Operation::Insert::Result
private
将文档插入密钥保管库集合。
-
#mark_command (cmd, timeout_ms: nil) ⇒ 哈希
private
将命令发送到 mongocryptd,以标记意图加密标记。
-
# remove_key_alt_name (ID, key_alt_name, timeout_ms: nil) ⇒ 对象
private
从具有给定 ID 的密钥保管库集合中的密钥文档的 key_alt_names 数组中删除 key_alt_name。
-
#update_data_keys(updates, timeout_ms: nil) ⇒ BulkWrite::Result
private
使用批量写入将给定请求应用于密钥保管库集合。
构造函数详情
#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 对象,其中包含有关如何连接到密钥保管库的信息。
57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 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 = end |
实例方法详细信息
# add_key_alt_name (ID, key_alt_name, timeout_ms: nil) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
将 key_alt_name 添加到具有给定 ID 的密钥保管库集合中密钥文档的 key_alt_names 数组。
185 186 187 188 189 190 191 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 185 def add_key_alt_name(id, key_alt_name, timeout_ms: nil) key_vault_collection.find_one_and_update( { _id: id }, { ' $addToSet ' => { keyAltNames: key_alt_name } }, timeout_ms: timeout_ms ) end |
# collection_info (db_name, 过滤, timeout_ms: nil) ⇒ 哈希
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
获取与提供的筛选器匹配的集合的集合信息
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 105 def collection_info(db_name, 筛选器, timeout_ms: nil) 除非 @metadata_client 提高 ArgumentError, ' collection_info 要求将 metadata_client 传递给构造函数,但事实并非如此' end @metadata_client .请使用(db_name) .database .list_collections(过滤器: 筛选器, deserialize_as_bson: true, timeout_ms: timeout_ms) .first end |
# delete_key (ID, timeout_ms: nil) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
从密钥保管库集合中删除具有给定 ID 的密钥文档。
195 196 197 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 195 def delete_key(id, timeout_ms: nil) key_vault_collection.delete_one(_id: id, timeout_ms: timeout_ms) end |
# feed_kms (kms_context, tls_options, timeout_ms: nil) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
获取有关远程 KMS 加密密钥的信息并将其提供给 KmsContext 对象
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 161 def feed_kms(kms_context, , timeout_ms: nil) with_ssl_socket(kms_context.端点, ) do |ssl_socket| 超时.超时(timeout_ms || SOCKET_TIMEOUT, 错误::SocketTimeoutError, '套接字写入操作超时' ) do ssl_socket.syswrite(kms_context.) end bytes_needed = kms_context.bytes_needed while bytes_needed > 0 do 字节 = 超时.超时(timeout_ms || SOCKET_TIMEOUT, 错误::SocketTimeoutError, '套接字读取操作超时' ) do ssl_socket.sysread(bytes_needed) end kms_context.提要(字节) bytes_needed = kms_context.bytes_needed end end end |
# find_keys (过滤, timeout_ms: nil) ⇒ Array<BSON::Document>
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
使用提供的筛选器查询密钥保管库集合中的密钥
81 82 83 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 81 def find_keys(筛选器, timeout_ms: nil) key_vault_collection.find(筛选器, timeout_ms: timeout_ms).to_a end |
# get_key (ID, timeout_ms: nil) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
查找具有给定 ID 的单个密钥文档。
200 201 202 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 200 def get_key(id, timeout_ms: nil) key_vault_collection.find(_id: id, timeout_ms: timeout_ms).first end |
# get_key_by_alt_name (key_alt_name, timeout_ms: nil) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回密钥保管库集合中具有给定 key_alt_name 的密钥文档。
206 207 208 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 206 def get_key_by_alt_name(key_alt_name, timeout_ms: nil) key_vault_collection.find(keyAltNames: key_alt_name, timeout_ms: timeout_ms).first end |
# get_keys (timeout_ms: nil) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
查找密钥保管库集合中的所有文档。
211 212 213 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 211 def get_keys(timeout_ms: nil) key_vault_collection.find(nil, timeout_ms: timeout_ms) end |
# insert_data_key (文档, timeout_ms: nil) ⇒ Mongo::Operation::Insert::Result
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
将文档插入密钥保管库集合
93 94 95 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 93 def insert_data_key(文档, timeout_ms: nil) key_vault_collection.insert_one(文档, timeout_ms: timeout_ms) end |
#mark_command (cmd, timeout_ms: nil) ⇒ 哈希
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
将命令发送到 mongocryptd 以标记意图加密标记
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 125 def mark_command(cmd, timeout_ms: nil) 除非 @mongocryptd_client 提高 ArgumentError, ' mark_command 要求将 mongocryptd_client 传递给构造函数,但事实并非如此' end # 确保来自 mongocryptd 的响应使用 { mode: :bson } 进行反序列化 # 以防止在命令中丢失类型信息 = { execution_options: { deserialize_as_bson: true }, timeout_ms: timeout_ms } 开始 响应 = @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, timeout_ms: nil) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
从具有给定 ID 的密钥保管库集合中的密钥文档的 key_alt_names 数组中删除 key_alt_name。
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 217 def remove_key_alt_name(id, key_alt_name, timeout_ms: nil) 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 ] } } } ] } } } ], timeout_ms: timeout_ms ) end |
#update_data_keys(updates, timeout_ms: nil) ⇒ BulkWrite::Result
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
使用批量写入将给定请求应用于密钥保管库集合。
247 248 249 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 247 def update_data_keys(更新, timeout_ms: nil) key_vault_collection.bulk_write(更新, timeout_ms: timeout_ms) end |