クラス: Mongo::Crypt::EncryptionIO Private

継承:
オブジェクト
  • オブジェクト
すべて表示
定義:
lib/mongo/crypt/encryption_io.rb

Overview

このクラスは、プライベート API の一部です。 このクラスは将来削除または変更される可能性があるため、可能な限り使用しないでください。

ドライバーと MongoDB サーバーまたは mongocryptd との間で I/O メソッドを実装するクラス。

定数の概要の削減

SOCKET_TIME =OUT

この定数は、プライベート API の一部です。 この定数は将来削除または変更される可能性があるため、可能な限り使用しないでください。

TLS ソケット接続、読み取り、書込みに使用されるタイムアウト。 仕様には、具体的なタイムアウトは記載されていません。 このタイムアウトの値に関するディスカッションとアップデートについては、 Spec- 1394を参照してください。

10

インスタンス メソッドの概要を折りたたむ

コンストラクターの詳細

#初期化(クライアント: nil、mongocryptd_client: nil、key_vault_namespace:、key_vault_client:、metadata_client:、mongocryptd_options: {}) =暗号化IO

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

注:

自動暗号化に使用する場合、すべての引数が必要です。 明示的な暗号化に使用する場合、key_vault_namespace と key_vault_client 引数のみが必要です。

注:

このクラスでは、key_vault_client と key_vault_namespace オプションが nil ではなく、正しい形式であることが想定されています。

キーヴォールトへの接続方法に関する情報を含む新しい 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_spwn ブール値
  • :mongocryptd_spwn_path string
  • :mongocryptd_spwn_args 配列<String>


57
58
59
60
61
62
63
64
65
66
67
68
69
70
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、57 行

デフォルト 初期化(
  クライアント: 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, timeout_ms: nil) = オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

指定された ID を持つキーヴォールトコレクション内のキードキュメントの key_alt_names 配列に key_alt_name を追加します。



185
186
187
188
189
190
191
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、185 行

デフォルト 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, filter, timeout_ms: nil) = ハッシュ

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

指定されたフィルターに一致するコレクションのコレクション情報を取得する

パラメーター:

  • フィルター ハッシュ
  • :timeout_ms (整数)

    操作のタイムアウト(ミリ秒単位)。 負でない整数である必要があります。 0 の明示的な値は無限を意味します。 デフォルト値が設定されていない場合は、機能が有効になっていません。

次の値を返します。

  • ハッシュ

    コレクション情報



105
106
107
108
109
110
111
112
113
114
115
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、105 行

デフォルト 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)
    .最初に
end

# delete_key(ID、 timeout_ms: nil) = オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

指定された ID を持つキー ドキュメントをキーヴォールト コレクションから削除します。



195
196
197
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、195 行

デフォルト delete_key(id, timeout_ms: nil)
  key_vault_collection.delete_one(_id: id, timeout_ms: timeout_ms)
end

#フィード_コマンド( kms_context, tls_options, timeout_ms: nil) = オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

リモート KMS 暗号化のキーに関する情報を取得し、それを KmsContext オブジェクトに提供します

パラメーター:

  • kms_context Mongo::Crypt ::KmsContext

    1 つのリモート KMS データキーに対応する KmsContext オブジェクト。 TLS 接続を確立するエンドポイントと、その接続で送信するメッセージに関する情報が含まれます。

  • tls_options ハッシュ

    KMS プロバイダーに接続するための TLS オプション。 オプションは Mongo::Client と同じです。

  • :timeout_ms (整数)

    操作のタイムアウト(ミリ秒単位)。 負でない整数である必要があります。 0 の明示的な値は無限を意味します。 デフォルト値が設定されていない場合は、機能が有効になっていません。



161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、161 行

デフォルト feature_ kms(kms_context, tls_options, timeout_ms: nil)
  with_ssl_socket(kms_context.エンドポイント, tls_options) 行う |ssl_socket|
    タイムアウト.タイムアウト(timeout_ms || SOCKET_TIMEOUT, エラー::SocketTimeoutError,
      'ソケット書込み (write) 操作がタイムアウトしました'
    ) 行う
      ssl_socket.syswrite(kms_context.メッセージ)
    end

    bytes_needed = kms_context.bytes_needed
    一方 bytes_needed > 0 行う
      バイト = タイムアウト.タイムアウト(timeout_ms || SOCKET_TIMEOUT, エラー::SocketTimeoutError,
        'ソケット読み取り操作がタイムアウトしました'
      ) 行う
        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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

提供されたフィルターを使用して、キーヴォールトコレクション内のキーをクエリする

パラメーター:

  • フィルター ハッシュ
  • :timeout_ms (整数)

    操作のタイムアウト(ミリ秒単位)。 負でない整数である必要があります。 0 の明示的な値は無限を意味します。 デフォルト値が設定されていない場合は、機能が有効になっていません。

次の値を返します。

  • 配列<BSON::Document>

    クエリ結果



81
82
83
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、81 行

デフォルト 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
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、200 行

デフォルト get_key(id, timeout_ms: nil)
  key_vault_collection.find(_id: id, timeout_ms: timeout_ms).最初に
end

#get_key_by_alt_name(key_alt_name、timeout_ms: nil)= オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

指定された key_alt_name を持つキーヴォールトコレクション内のキー ドキュメントを返します。



206
207
208
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、206 行

デフォルト get_key_by_alt_name(key_alt_name, timeout_ms: nil)
  key_vault_collection.find(keyAltNames: key_alt_name, timeout_ms: timeout_ms).最初に
end

get_keys(timeout_ms: nil)= オブジェクト

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

キーヴォールト コレクション内のすべてのドキュメントを検索します。



211
212
213
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、211 行

デフォルト 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 の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

キーヴォールト コレクションへのドキュメントの挿入

パラメーター:

  • ドキュメント ハッシュ
  • :timeout_ms (整数)

    操作のタイムアウト(ミリ秒単位)。 負でない整数である必要があります。 0 の明示的な値は無限を意味します。 デフォルト値が設定されていない場合は、機能が有効になっていません。

次の値を返します。



93
94
95
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、93 行

デフォルト insert_data_key(ドキュメント, timeout_ms: nil)
  key_vault_collection.insert_one(ドキュメント, timeout_ms: timeout_ms)
end

# target_command (cmd、timeout_ms: nil) = ハッシュ

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

mongocryptd に コマンドを送信し、Intent-to-encrypt マークでマークします

パラメーター:

  • cmd ハッシュ
  • :timeout_ms (整数)

    操作のタイムアウト(ミリ秒単位)。 負でない整数である必要があります。 0 の明示的な値は無限を意味します。 デフォルト値が設定されていない場合は、機能が有効になっていません。

次の値を返します。

  • ハッシュ

    マークされたコマンド



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、125 行

デフォルト map_command(cmd, timeout_ms: nil)
  ただし、 @mongocryptd_client
    発生 ArgumentError, map_commandでは mongocryptd_client がコンストラクターに渡されている必要がありますが、その必要はありませんでした
  end

  # mongocryptd からの応答が { Mode: :bson } で逆直列化されていることを確認する
  コマンド内のタイプ情報が喪失しないようにするための #
  options = {
    execution_options: { deserialize_as_bson: true },
    timeout_ms: timeout_ms
  }

  begin
    応答 = @mongocryptd_client.database.コマンド(cmd, options)
  ヘルプ エラー::NoServerAavailable => e
    発生 e 場合 @options[:mongocryptd_bypass_spwn]

    spawn_mongocryptd
    応答 = @mongocryptd_client.database.コマンド(cmd, options)
  end

  return 応答.最初に
end

# delete_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
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、217 行

デフォルト delete_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 ' => {
                  input: ' $keyAltNames ',
                  条件: { '$ne' =>  [  $$This , key_alt_name ] }
                }
              }
            ]
          }
        }
      }
    ],
    timeout_ms: timeout_ms
  )
end

#update_data_keys(updates, timeout_ms: nil) ⇒ BulkWrite::Result

このメソッドは、プライベート API の一部です。 このメソッドは将来削除または変更される可能性があるため、可能な限り使用しないでください。

一括書き込みを使用して、指定されたリクエストをキーヴォールト コレクションに適用します。

パラメーター:

  • リクエスト <Hash>配列 )

    一括書き込みリクエスト。

次の値を返します。



247
248
249
# ファイル 'lib/mongo/crypt/encryption_io.rb' の場合、247 行

デフォルト update_data_keys(updates, timeout_ms: nil)
  key_vault_collection.bulk_write(updates, timeout_ms: timeout_ms)
end