类: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 (key_vault_namespace:, key_vault_client:, metadata_client:, 客户端: nil, mongocryptd_client: nil, 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 (key_vault_namespace:, key_vault_client:, metadata_client:, 客户端: nil, mongocryptd_client: nil, mongocryptd_options: {}) ⇒ EncryptionIO
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
用于自动加密时,所有参数均为必填项。 用于显式加密时,仅需要 key_vault_namespace 和 key_vault_client 参数。
该类要求 key_vault_client 和 key_vault_namespace 选项不为零且格式正确。
创建一个新的 EncryptionIO 对象,其中包含有关如何连接到密钥保管库的信息。
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 54 def 初始化( key_vault_namespace:, key_vault_client:, metadata_client:, 客户端: nil, mongocryptd_client: nil, 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 数组。
181 182 183 184 185 186 187 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 181 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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
获取与提供的筛选器匹配的集合的集合信息
101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 101 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 的密钥文档。
191 192 193 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 191 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 对象
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 159 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 字节 = 超时.超时(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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
使用提供的筛选器查询密钥保管库集合中的密钥
77 78 79 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 77 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 的单个密钥文档。
196 197 198 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 196 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 的密钥文档。
202 203 204 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 202 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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
查找密钥保管库集合中的所有文档。
207 208 209 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 207 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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
将文档插入密钥保管库集合
89 90 91 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 89 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 以标记意图加密标记
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 122 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 响应.first end |
# remove_key_alt_name (ID, key_alt_name, timeout_ms: nil) ⇒ 对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
从具有给定 ID 的密钥保管库集合中的密钥文档的 key_alt_names 数组中删除 key_alt_name。
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 213 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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
使用批量写入将给定请求应用于密钥保管库集合。
243 244 245 |
# File 'lib/ Mongo/crypt/encryption_io.rb', line 243 def update_data_keys(更新, timeout_ms: nil) key_vault_collection.bulk_write(更新, timeout_ms: timeout_ms) end |