Class: Mongo::ClientEncryption
- 继承:
-
对象
- 对象
- Mongo::ClientEncryption
- 定义于:
- lib/ Mongo/client_encryption.rb
Overview
ClientEncryption 封装了对密钥保管库集合的显式操作,这些操作无法直接在 MongoClient 上完成。 它提供了一个 API,用于显式加密和解密值以及创建数据密钥。
实例方法摘要折叠
-
#add_key_alt_name(id, key_alt_name) ⇒ BSON::Document | nil
在具有给定 ID 的密钥保管库集合中为密钥添加 key_alt_name。
-
# create_data_key (kms_provider, options = {}) ⇒ BSON::Binary
生成用于加密/解密的数据密钥,并将该密钥存储在 KMS 集合中。
-
# create_encrypted_collection (database, coll_name, coll_opts, kms_provider, master_key) ⇒ Array<Operation::Result, Hash>
使用加密字段创建集合。
-
#解密(值) ⇒ 对象
对已加密的值进行解密。
-
# delete_key ( ID ) ="Operation::Result"
从密钥保管库集合中删除具有给定 ID 的密钥。
-
# encrypt (value, options = {}) ⇒ BSON::Binary
使用指定的加密密钥和算法加密值。
-
# encrypt_expression (表达式, options = {}) ⇒ BSON::Binary
加密匹配表达式或聚合表达式以查询范围索引。
-
# get_key ( ID ) ⇒ BSON::Document | nil
查找具有给定 ID 的单个键。
-
#get_key_by_alt_name(key_alt_name) ⇒ BSON::Document | nil
返回密钥保管库集合中具有给定 key_alt_name 的密钥。
-
# get_keys ⇒ Collection::View (也:#keys)
返回密钥保管库集合中的所有密钥。
-
#initialize(key_vault_client, options = {}) ⇒ ClientEncryption
构造函数
使用提供的选项创建新的 ClientEncryption 对象。
-
# remove_key_alt_name ( ID , key_alt_name) ⇒ BSON::Document | nil
从密钥保管库集合中具有给定 ID 的密钥中删除 key_alt_name。
-
# rewrap_many_data_key (filter, opts = {}) ⇒ Crypt::RewrapManyDataKeyResult
解密多个数据密钥,并使用新的 master_key(重新)加密它们;如果未给出新密钥,则使用当前的 master_key。
构造函数详情
#initialize(key_vault_client, options = {}) ⇒ ClientEncryption
使用提供的选项创建新的 ClientEncryption 对象。
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/ Mongo/client_encryption.rb', line 52 def 初始化(key_vault_client, = {}) @encrypter = Crypt::ExplicitEncrypter.new( key_vault_client, [:key_vault_namespace], Crypt::KMS::凭证.new([:kms_providers]), Crypt::KMS::验证.([:kms_tls_options]), [:timeout_ms], [:key_expiration_ms] ) end |
实例方法详细信息
# add_key_alt_name ( ID , key_alt_name) ⇒ BSON::Document | nil
在具有给定 ID 的密钥保管库集合中为密钥添加 key_alt_name。
207 208 209 |
# File 'lib/ Mongo/client_encryption.rb', line 207 def add_key_alt_name(id, key_alt_name) @encrypter.add_key_alt_name(id, key_alt_name) end |
# create_data_key (kms_provider, options = {}) ⇒ BSON::Binary
生成用于加密/解密的数据密钥,并将该密钥存储在 KMS 集合中。 生成的密钥使用 KMS 主密钥进行加密。
89 90 91 92 93 94 95 |
# File 'lib/ Mongo/client_encryption.rb', line 89 def create_data_key(kms_provider, = {}) key_document = Crypt::KMS::MasterKeyDocument.new(kms_provider, ) key_alt_names = [:key_alt_names] key_material = [:key_material] @encrypter.create_and_insert_data_key(key_document, key_alt_names, key_material) end |
# create_encrypted_collection (数据库, coll_name, coll_opts, kms_provider, master_key) ⇒ Array< Operation::Result , Hash>
此方法不会更新客户端的 :auto_encryption_options 中的 :encrypted_fields_map。因此,为了使用通过此方法创建的集合进行自动加密,用户必须在调用此函数并返回 :encrypted_fields 后创建一个新客户端。
使用加密字段创建集合。
如果 :encryption_fields 包含具有 null 值的 keyId,则会自动生成数据密钥并将其分配给 keyId 值。
294 295 296 297 298 299 300 301 302 303 304 305 |
# File 'lib/ Mongo/client_encryption.rb', line 294 def create_encrypted_collection(database, coll_name, coll_opts, kms_provider, master_key) 提高 ArgumentError, ' coll_opts must contains :encrypted_fields ' 除非 coll_opts[:encrypted_fields] encryption_fields = create_data_keys(coll_opts[:encrypted_fields], kms_provider, master_key) 开始 new_coll_opts = coll_opts.dup.合并(merge)(encryption_fields: encryption_fields) [ database[coll_name].创建(new_coll_opts), encryption_fields ] 救援 mongo::错误 => e 提高 错误::CryptError, " 创建包含加密字段的集合时出错 \ # { encryption_fields } : #{ e . class } : #{ e . } " end end |
#解密(值) ⇒对象
对已加密的值进行解密。
196 197 198 |
# File 'lib/ Mongo/client_encryption.rb', line 196 def 解密(值) @encrypter.解密(值) end |
# delete_key ( ID ) = "Operation::Result"
从密钥保管库集合中删除具有给定 ID 的密钥。
217 218 219 |
# File 'lib/ Mongo/client_encryption.rb', line 217 def delete_key(id) @encrypter.delete_key(id) end |
# encrypt (value, options = {}) ⇒ BSON::Binary
使用“Indexed”、“范围”或“string”算法进行显式加密的结果必须由服务器处理才能进行插入或查询。要使用此类有效负载进行插入或查询,请使用配置了 :auto_encryption_options 的 Mongo::Client。:bypass_query_analysis 选项可以为 true;:bypass_auto_encryption 选项必须为 false。
“substring”查询类型目前不稳定,可能会发生向后破坏性变更 (breaking change)。
:key_id 和 :key_alt_name 选项是互斥的。 只需一次即可执行显式加密。
使用指定的加密密钥和算法加密值。
146 147 148 |
# File 'lib/ Mongo/client_encryption.rb', line 146 def 加密(值, = {}) @encrypter.加密(值, ) end |
# encrypt_expression (expression, options = {}) ⇒ BSON::Binary
:key_id 和 :key_alt_name 选项是互斥的。 只需一次即可执行显式加密。
加密匹配表达式或聚合表达式以查询范围索引。
仅当 queryType 为 "范围" 且算法为 "Range" 时才支持。@note:范围算法仅处于实验阶段。它不适合公众使用。它可能会进行破坏性变更 (breaking change)。
@param [ Hash ] 选项
186 187 188 |
# File 'lib/ Mongo/client_encryption.rb', line 186 def encrypt_expression(表达式(expression), = {}) @encrypter.encrypt_expression(表达式(expression), ) end |
#get_key(id) ⇒ BSON::Document | nil
查找具有给定 ID 的单个键。
227 228 229 |
# File 'lib/ Mongo/client_encryption.rb', line 227 def get_key(id) @encrypter.get_key(id) end |
# get_key_by_alt_name (key_alt_name) ⇒ BSON::Document | nil
返回密钥保管库集合中具有给定 key_alt_name 的密钥。
237 238 239 |
# File 'lib/ Mongo/client_encryption.rb', line 237 def get_key_by_alt_name(key_alt_name) @encrypter.get_key_by_alt_name(key_alt_name) end |
# get_keys ⇒ Collection::View也称为:键
返回密钥保管库集合中的所有密钥。
244 245 246 |
# File 'lib/ Mongo/client_encryption.rb', line 244 def get_keys @encrypter.get_keys end |
# remove_key_alt_name ( ID , key_alt_name) ⇒ BSON::Document | nil
从密钥保管库集合中具有给定 ID 的密钥中删除 key_alt_name。
256 257 258 |
# File 'lib/ Mongo/client_encryption.rb', line 256 def remove_key_alt_name(id, key_alt_name) @encrypter.remove_key_alt_name(id, key_alt_name) end |
# rewrap_many_data_key (过滤, opts = {}) ⇒ Crypt::RewrapManyDataKeyResult
解密多个数据密钥,并使用新的 master_key(重新)加密它们;如果未给出新密钥,则使用当前的 master_key。
271 272 273 |
# File 'lib/ Mongo/client_encryption.rb', line 271 def rewrap_many_data_key(筛选器, opts = {}) @encrypter.rewrap_many_data_key(筛选器, opts) end |