Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / / /

자동 암호화를 위해 지원되는 작업

이 페이지의 내용

  • 지원되는 읽기 및 쓰기 명령
  • 지원되는 쿼리 연산자
  • 지원되지 않는 삽입 작업
  • 지원되는 업데이트 연산자
  • 지원되는 집계 단계
  • $group 행동
  • $lookup$graphLookup 동작
  • 지원되는 집계 표현식
  • 지원되지 않는 필드 유형

이 페이지는 자동 클라이언트 사이드 필드 레벨 암호화를 위해 구성된 드라이버에서 지원하는 특정 명령, 쿼리 연산자, 업데이트 연산자, 집계 단계 및 집계 표현식을 설명합니다.

자동 클라이언트 사이드 필드 레벨 암호화를 사용하는 드라이버는 다음 명령을 지원합니다.

지원되는 모든 명령에서 지원되지 않는 연산자, 집계 단계 또는 집계 표현식을 사용하는 경우 드라이버는 오류를 반환합니다. 지원되는 연산자, 단계 및 표현식의 전체 목록은 이 페이지의 다음 섹션에서 확인하세요.

  • 지원되는 쿼리 연산자

  • 지원되는 업데이트 연산자

  • 지원되는 집계 단계

  • 지원되는 집계 표현식

다음 명령은 자동 암호화가 필요하지 않습니다. 자동 클라이언트 측 필드 수준 암호화를 위해 구성된 드라이버는 다음 명령을 mongod에 직접 전달합니다.

자동 클라이언트 사이드 필드 레벨 암호화용으로 구성된 드라이버를 통해 다른 명령을 실행하면 오류가 반환됩니다.

[1] 자동 CSFLE(클라이언트 사이드 필드 레벨 암호화)은 getMore 명령을 암호화하지 않지만 명령에 대한 응답에는 암호화된 필드 값이 포함될 수 있습니다.
  • 올바른 CSFLE 옵션으로 구성된 애플리케이션은 해당 값을 자동으로 해독합니다.
  • 올바른 CSFLE 옵션이 없는 애플리케이션은 암호화된 값만 볼 수 있습니다.

자동 클라이언트 사이드 필드 레벨 암호화용으로 구성된 드라이버를 사용하면 결정론적으로 암호화된 필드에 대해 실행할 때 다음과 같은 쿼리 연산자를 허용합니다.

암호화된 필드를 null 또는 정규 표현식과 비교하는 쿼리는 지원되는 쿼리 연산자를 사용하는 경우에도 항상 오류를 반환합니다. 임의로 암호화된 필드에 대해 이러한 연산자를 실행하는 쿼리는 오류를 반환합니다.

결정론적으로 암호화된 필드와 임의로 암호화된 필드 모두에 대해 $exists 연산자를 실행하면 정상적으로 동작합니다.

암호화된 필드에 대해 다른 쿼리 연산자를 지정하는 쿼리는 오류를 반환합니다.

다음 쿼리 연산자는 암호화된 필드에 대해 실행되지 않더라도 오류를 반환합니다.

경고

BinData의 예기치 않은 동작

MongoDB는 클라이언트 사이드 필드 레벨의 암호화된 필드를 BinData Blob으로 저장합니다. 암호화된 BinData 값에 대해 실행된 읽기 및 쓰기 작업은 암호 해독된 값에 대해 동일한 작업을 실행하는 것과 비교하여 예기치 않거나 잘못된 동작이 있을 수 있습니다. 특정 작업에는 BinData 값에 대해 실행하면 오류가 반환되는 엄격한 BSON 유형 지원이 있습니다.

  • 자동 클라이언트 사이드 필드 수준 암호화를 사용하는 드라이버는 BinData 값을 지원하지 않거나 또는 BinData 값에 대해 실행될 때 예기치 않은 동작이 발생하는 연산자 또는 식에 대한 읽기 및 쓰기 작업을 구문 분석합니다.

  • 명시적(수동) 클라이언트 측 필드 수준 암호화를 사용하는 애플리케이션은 이 페이지를 암호화된 필드에 대한 읽기 및 쓰기 작업에 대한 지침으로 사용할 수 있습니다.

자동 클라이언트 사이드 필드 레벨 암호화용으로 구성된 드라이버는 다음 동작이 포함된 삽입 명령을 지원하지 않습니다.

  • 암호화된 필드에 연결된 Timestamp(0,0)가 있는 문서를 삽입합니다. (0,0) 값은 mongod에서 타임스탬프를 생성해야 함을 나타냅니다. mongod가 암호화된 필드를 생성할 수 없으면 결과 타임스탬프가 암호화되지 않습니다.

  • 구성된 자동 스키마가 암호화된 _id 필드를 지정하는 경우 암호화된 _id 없이 문서를 삽입합니다. mongod가 암호화되지 않은 ObjectId를 자동으로 생성하는 경우 문서에서 _id를 생략하면 자동 암호화 규칙을 따르지 않는 문서가 생성됩니다.

  • 결정적으로 암호화된 필드에 연결된 배열이 있는 문서를 삽입합니다. 자동 클라이언트 사이드 필드 수준 암호화는 배열을 결정적으로 암호화하는 것을 지원하지 않습니다.

자동 클라이언트 사이드 필드 레벨 암호화용으로 구성된 드라이버를 사용하면 결정론적으로 암호화된 필드에 대해 실행할 때 다음과 같은 업데이트 연산자를 허용합니다.

암호화된 필드에 $rename 연산자를 사용하는 경우 자동 JSON 스키마는 원본 및 대상 필드 이름에 동일한 암호화 메타데이터를 지정해야 합니다.

암호화된 필드에 대해 다른 업데이트 연산자를 지정하는 업데이트는 오류를 반환합니다.

다음과 같은 동작을 하는 업데이트 작업은 지원되는 연산자를 사용하더라도 오류를 반환합니다.

  • 업데이트 작업은 암호화된 경로 내부에 배열을 생성합니다.

  • 업데이트 작업은 집계 식 구문을 사용합니다.

결정론적으로 암호화된 필드에 쿼리 필터를 지정하는 업데이트 작업의 경우 쿼리 필터는 해당 필드에 지원되는 연산자만 사용해야 합니다.

자동 클라이언트 사이드 필드 레벨 암호화 지원을 위해 구성된 드라이버는 다음과 같은 집계 파이프라인 단계를 지원합니다.

다른 단계를 지정하는 자동 암호화를 위해 구성된 컬렉션에서 작동하는 파이프라인은 오류를 반환합니다.

지원되는 각 파이프라인 단계에서 MongoDB는 지원되는 파이프라인을 통과할 때 암호화해야 하는 필드를 추적하여 암호화 대상으로 표시합니다.

지원되는 각 단계에서는 지원되는 쿼리 연산자집계 표현식만 지정해야 합니다.

$group 에는 클라이언트 사이드 필드 레벨 암호화와 관련된 다음과 같은 동작이 있습니다.

$group 지원:

  • 결정론적으로 암호화된 필드에 그룹화.

  • 암호화된 필드의 $addToSet$push 축적자를 사용합니다.

$group 은 다음을 지원하지 않습니다.

  • $addToSet$push 축적자가 반환한 배열 일치

  • 암호화된 필드의 산술 축적자.

자동 클라이언트 사이드 필드 레벨 암호화는 from 컬렉션이 집계가 실행되는 컬렉션(특히 자체 조회 작업)과 일치하는 경우에 한해 $lookup$graphLookup을 지원합니다.

다른 from 컬렉션을 참조하는 $lookup$graphLookup 단계는 오류를 반환합니다.

암호화되지 않은 컬렉션에서는 CSFLE 지원 MongoClient에서 $lookup을 수행할 수 없습니다.

자동 클라이언트 사이드 필드 레벨 암호화용으로로 구성된 드라이버를 사용하면 결정론적으로 암호화된 필드에 대해 다음 표현식을 사용하여 집계 단계를 수행할 수 있습니다.

다른 모든 집계 표현식은 암호화된 필드에 대해 실행된 경우 오류를 반환합니다.

다음과 같은 동작을 하는 집계 단계는 지원되는 집계 표현식을 사용하더라도 오류를 반환합니다.

표현식
거부된 동작
예시
이 표현식은 런타임까지 암호화 속성을 알 수 없는 필드를 지정하 후속 집계 단계에 해당 필드를 참조하는 표현식을 포함합니다.
$addFields : {
"valueWithUnknownEncryption" : {
$cond : {
if : { "$encryptedField" : "value" },
then : "$encryptedField",
else: "unencryptedValue"
}
}
},
{
$match : {
"valueWithUnknownEncryption" : "someNewValue"
}
}
표현식은 암호화된 필드를 참조하는 새 필드 생성 동일한 표현식의 해당 새 필드에서 작동합니다.
{
$eq : [
{"newField" : "$encryptedField"},
{"newField" : "value"
]
}
표현식은 비교 표현식 내에서 암호화된 필드의 접두사를 참조합니다.
{ $eq : [ "$prefixOfEncryptedField" , "value"] }
표현식의 결과는 암호화된 필드와 비교됩니다.
{
$eq : [
"$encryptedField" ,
{ $ne : [ "field", "value" ] }
]
}
표현식은 변수를 암호화된 필드에 바인딩하거나$$CURRENT 재바인딩을 시도합니다.
{
$let: {
"vars" : {
"newVariable" : "$encryptedField"
}
}
}

표현식의 첫 번째 인수 암호화된 필드이며

  • 표현식의 두 번째 인수가 배열 리터럴이 아닙니다 .

    -또는-

  • 표현식의 두 번째 인수는 암호화된 필드입니다.

{
$in : [
"$encryptedField" ,
"$otherEncryptedField"
]
}

자동 클라이언트 사이드 필드 레벨 암호화(CSFLE)용으로 구성된 드라이버는 다음과 같은 값 유형을 암호화해야 하는 읽기 또는 쓰기 작업을 지원하지 않습니다.

암호화는 이러한 값의 유형 정보를 적절히 숨기지 못합니다.

자동 CSFLE는 또한 작업이 암호화된 필드를 다음 값 유형과 비교하는 결정론적으로 암호화된 필드에 대한 읽기 또는 쓰기 작업을 지원하지 않습니다.

  • array

  • bool

  • decimal128

  • double

  • object

돌아가기

스키마 시행