类:Mongo::Crypt::EncryptionIO Private
- 继承:
-
对象
- 对象
- Mongo::Crypt::EncryptionIO
- 定义于:
- build/Ruby-driver-v 2.19 /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) ⇒ 对象
private
将 key_alt_name 添加到具有给定 ID 的密钥保管库集合中密钥文档的 key_alt_names 数组。
-
# collection_info (db_name, filter) ⇒ 哈希
private
获取与提供的筛选器匹配的集合的集合信息。
-
# delete_key ( ID ) ⇒ 对象
private
从密钥保管库集合中删除具有给定 ID 的密钥文档。
-
# feed_kms (kms_context, tls_options) ⇒ 对象
private
获取有关远程 KMS 加密密钥的信息并将其提供给 KmsContext 对象。
-
# find_keys (filter) ⇒ Array<BSON::Document>
private
使用提供的筛选器查询密钥保管库集合中的密钥。
-
# get_key ( ID ) ⇒ 对象
private
查找具有给定 ID 的单个密钥文档。
-
# get_key_by_alt_name (key_alt_name) ⇒ 对象
private
返回密钥保管库集合中具有给定 key_alt_name 的密钥文档。
-
# get_keys ⇒ 对象
private
查找密钥保管库集合中的所有文档。
-
#initialize (client: nil, mongocryptd_client: nil, key_vault_namespace:, key_vault_client:, metadata_client:, mongocryptd_options: {}) ⇒ EncryptionIO
构造函数
private
创建一个新的 EncryptionIO 对象,其中包含有关如何连接到密钥保管库的信息。
-
# insert_data_key (document) ⇒ Mongo::Operation::Insert::Result
private
将文档插入密钥保管库集合。
-
#mark_command (cmd) ⇒ 哈希
private
将命令发送到 mongocryptd,以标记意图加密标记。
-
# remove_key_alt_name ( ID , key_alt_name) ⇒ 对象
private
从具有给定 ID 的密钥保管库集合中的密钥文档的 key_alt_names 数组中删除 key_alt_name。
-
# update_data_keys (updates) ⇒ 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 '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 = 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 对象
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, ) with_ssl_socket(kms_context.端点, ) do |ssl_socket| 超时.超时(SOCKET_TIMEOUT, 错误::SocketTimeoutError, '套接字写入操作超时' ) do ssl_socket.syswrite(kms_context.) 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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
使用提供的筛选器查询密钥保管库集合中的密钥
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 以标记意图加密标记
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 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
使用批量写入将给定请求应用于密钥保管库集合。
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 |