클래스: Mongo::Crypt::EncryptionIO 비공개

상속:
객체
  • 객체
모두 표시
다음에 정의됨:
lib/ Mongo/crypt/encryption_io.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

드라이버와 MongoDB 서버 또는 mongocryptd 간의 I/O 메서드를 구현하는 클래스입니다.

상수 요약 접기

SOCKET_TIMEOUT =

이 상수는 비공개 API의 일부입니다. 이 상수는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

TLS 소켓 연결, 읽기 및 쓰기에 사용되는 시간 초과입니다. 사양에 특정 시간 제한이 명시되어 있지 않습니다. 이 제한 시간에 대한 논의 및 업데이트는 spec-1394 을(를) 참조하세요.

10

인스턴스 메서드 요약 접기

생성자 세부 정보

#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 옵션이 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_spawn (부울)
  • :mongocryptd_spawn_path (string)
  • :mongocryptd_spawn_args (Array<String>)


57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 파일 '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.split('.')
  @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

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의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

제공된 필터와 일치하는 컬렉션에 대한 컬렉션 정보 가져오기

매개변수:

  • 필터 (해시)
  • :timeout_ms (정수)

    작업 시간 제한(밀리초)입니다. 음수가 아닌 정수여야 합니다. 0 의 명시적 값은 무한대를 의미합니다. 기본값 은 미설정으로, 이 기능 활성화되지 않습니다.

반환합니다:

  • (해시)

    컬렉션 정보



105
106
107
108
109
110
111
112
113
114
115
# 파일 'lib/ Mongo/crypt/encryption_io.rb', 줄 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
# 파일 'lib/ Mongo/crypt/encryption_io.rb', 줄 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 객체에 피드

매개변수:

  • kms_context (Mongo::Crypt::KmsContext)

    하나의 원격 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

def Feed_kms(kms_context, tls_options, timeout_ms: nil)
  with_ssl_socket(kms_context.엔드포인트, tls_options) do |ssl_socket|
    시간 초과.타임아웃(timeout_ms || SOCKET_TIMEOUT, 오류::SocketTimeoutError,
      '소켓 쓰기 작업 시간이 초과되었습니다'
    ) do
      ssl_socket.syswrite(kms_context.메시지)
    end

    bytes_needed = kms_context.bytes_needed
    동안 bytes_needed > 0 do
      바이트 = 시간 초과.타임아웃(timeout_ms || SOCKET_TIMEOUT, 오류::SocketTimeoutError,
        '소켓 읽기 작업 시간이 초과되었습니다.'
      ) do
        ssl_socket.sysread(bytes_needed)
      end

      kms_context.Feed(바이트)
      bytes_needed = kms_context.bytes_needed
    end
  end
end

#find_keys(필터하다, timeout_ms: nil) ⇒ Array<BSON::Document>

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

제공된 필터를 사용하여 Key Vault 컬렉션의 키를 쿼리합니다.

매개변수:

  • 필터 (해시)
  • :timeout_ms (정수)

    작업 시간 제한(밀리초)입니다. 음수가 아닌 정수여야 합니다. 0 의 명시적 값은 무한대를 의미합니다. 기본값 은 미설정으로, 이 기능 활성화되지 않습니다.

반환합니다:

  • (Array<BSON::Document>)

    쿼리 결과



81
82
83
# 파일 'lib/ Mongo/crypt/encryption_io.rb', 줄 81

def find_keys(필터, timeout_ms: nil)
  key_Vault_collection.찾기(필터, 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

def get_key(id, timeout_ms: nil)
  key_Vault_collection.찾기(_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
# 파일 'lib/ Mongo/crypt/encryption_io.rb', 줄 206

def get_key_by_alt_name(key_alt_name, timeout_ms: nil)
  key_Vault_collection.찾기(keyAltNames: key_alt_name, timeout_ms: timeout_ms).first
end

#get_keys(timeout_ms: nil) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

키 볼트 컬렉션에 있는 모든 문서를 찾습니다.



211
212
213
# 파일 'lib/ Mongo/crypt/encryption_io.rb', 줄 211

def get_keys(timeout_ms: nil)
  key_Vault_collection.찾기(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

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에 명령을 전송하여 암호화 의도 표시로 표시합니다.

매개변수:

  • 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

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 만약 @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을 제거합니다.



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

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',
                  cond: { '$ne' =>  [ '$$ this', key_alt_name ] }
                }
              }
            ]
          }
        }
      }
    ],
    timeout_ms: timeout_ms
  )
end

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

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

대량 쓰기를 사용하여 지정된 요청을 키 볼트 컬렉션에 적용합니다.

매개변수:

  • 요청 (Array<Hash>)

    대량 쓰기 요청.

반환합니다:



247
248
249
# 파일 'lib/ Mongo/crypt/encryption_io.rb', 줄 247

def update_data_keys(업데이트, timeout_ms: nil)
  key_Vault_collection.bulk_write(업데이트, timeout_ms: timeout_ms)
end