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

상속:
객체
  • 객체
모두 표시
다음에 정의됨:
build/ruby-driver-v2.19/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
# 파일 'build/ruby-driver-v2.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.split('.')
  @key_Vault_client = key_Vault_client
  @metadata_client = 
  @options = mongocryptd_options
end

인스턴스 메서드 세부 정보

#add_key_alt_name(ID, key_alt_name) ⇒ 객체

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

지정된 ID를 가진 키 볼트 컬렉션에 있는 키 문서의 key_alt_names 배열에 key_alt_name을 추가합니다.



163
164
165
166
167
168
# 파일 'build/ruby-driver-v2.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, 필터) ⇒ 해시

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

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

매개변수:

  • 필터 (해시)

반환합니다:

  • (해시)

    컬렉션 정보



96
97
98
99
100
101
102
# 파일 'build/ruby-driver-v2.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
# 파일 'build/ruby-driver-v2.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 객체에 피드

매개변수:

  • kms_context (Mongo::Crypt::KmsContext)

    하나의 원격 KMS 데이터 키에 해당하는 KmsContext 객체입니다. TLS 연결을 설정할 엔드포인트와 해당 연결에서 보낼 메시지에 대한 정보가 포함되어 있습니다.

  • tls_options. (해시)

    KMS 제공자에 연결하기 위한 TLS 옵션입니다. 옵션은 Mongo::Client와 동일합니다.



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/encryption_io.rb', 줄 139

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

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

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

#find_keys(filter) ⇒ Array<BSON::Document>

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

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

매개변수:

  • 필터 (해시)

반환합니다:

  • (Array<BSON::Document>)

    쿼리 결과



78
79
80
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/encryption_io.rb', 줄 78

def find_keys(필터)
  key_Vault_collection.찾기(필터).to_a
end

#get_key(ID) ⇒ 객체

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

지정된 ID를 가진 단일 키 문서를 찾습니다.



177
178
179
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/encryption_io.rb', 줄 177

def get_key(id)
  key_Vault_collection.찾기(_id: id).first
end

#get_key_by_alt_name(key_alt_name) ⇒ 객체

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

지정된 key_alt_name을 가진 키 볼트 컬렉션의 키 문서를 반환합니다.



183
184
185
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/encryption_io.rb', 줄 183

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

#get_keys객체

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

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



188
189
190
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/encryption_io.rb', 줄 188

def get_keys
  key_Vault_collection.찾기
end

#insert_data_key(document) ⇒ Mongo::Operation::Insert::Result

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

키 볼트 컬렉션에 문서 삽입

매개변수:

  • 문서 (해시)

반환합니다:



87
88
89
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/encryption_io.rb', 줄 87

def insert_data_key(문서)
  key_Vault_collection.insert_one(문서)
end

#mark_command(cmd) ⇒ 해시

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

mongocryptd에 명령을 전송하여 암호화 의도 표시로 표시합니다.

매개변수:

  • cmd (해시)

반환합니다:

  • (해시)

    표시된 명령



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# 파일 'build/ruby-driver-v2.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 만약 @options[:mongocryptd_bypass_spawn]

    spawn_mongocryptd
    응답 = @mongocryptd_client.database.명령(cmd, 옵션)
  end

  반환 응답.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
# 파일 'build/ruby-driver-v2.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',
                  cond: { '$ne' =>  [ '$$ this', key_alt_name ] }
                }
              }
            ]
          }
        }
      }
    ]
  )
end

#update_data_keys(업데이트) ⇒ BulkWrite::Result

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

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

매개변수:

  • 요청 (Array<Hash>)

    대량 쓰기 요청.

반환합니다:



223
224
225
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/encryption_io.rb', 줄 223

def update_data_keys(업데이트)
  key_Vault_collection.bulk_write(업데이트)
end