개요
ClickHouse에서 설정의 “제약 조건”은 설정에 지정할 수 있는 제한 사항과 규칙을 의미합니다. 이러한 제약 조건은 데이터베이스의 안정성, 보안, 예측 가능한 동작을 유지하는 데 사용됩니다.제약 조건 정의
설정 제약 조건은user.xml
설정 파일의 profiles 섹션에서 정의할 수 있습니다. 이러한 제약 조건은 사용자가
SET SQL 문을 사용해 일부 설정을 변경하지 못하게 합니다.
제약 조건은 다음과 같이 정의합니다:
제약 조건의 유형
ClickHouse에서는 몇 가지 유형의 제약 조건을 지원합니다:minmaxdisallowedreadonly(별칭const)changeable_in_readonly
min 및 max 제약 조건은 숫자 설정의 상한과 하한을 지정하며,
함께 조합해 사용할 수 있습니다.
disallowed 제약 조건은 특정 설정에서 허용하지 않을 값(들)을 지정할 때 사용할 수 있습니다.
readonly 또는 const 제약 조건은 사용자가 해당 설정을 전혀 변경할 수 없음을 의미합니다.
changeable_in_readonly 제약 조건 유형을 사용하면 readonly 설정이 1로 설정되어 있어도
사용자가 min/max 범위 내에서 설정을 변경할 수 있습니다.
그렇지 않으면 readonly=1 모드에서는 설정 변경이 허용되지 않습니다.
changeable_in_readonly는 settings_constraints_replace_previous가 활성화된 경우에만 지원됩니다:읽기 전용 모드에서 readonly를 변경 가능하게 만들지 마십시오
readonly 자체를 changeable_in_readonly로 지정하지 마십시오. 그렇게 하면 동일한 제약 조건에서 0도 금지하지 않는 한, readonly = 1 상태로 시작한 세션이 SET readonly = 0을 실행해, 기존 권한으로 이미 허용된 쓰기 쿼리를 다시 실행할 수 있게 됩니다.
이는 할당한 프로필에만 국한된 문제가 아니라 정의한 모든 프로필에서 중요합니다:
SET profile은 액세스 검사를 거치지 않으므로, 어떤 세션이든 이름으로 임의의 프로필을 선택할 수 있습니다. 아무에게도 할당하지 않은 프로필이라도 선택될 수 있습니다. 다만 해당 프로필이 변경하는 내용은 여전히 그 세션에서 이미 활성화된 제약 조건에 따라 검사됩니다.- HTTP에서는 유효 값이
0이 되는 경우에만GET요청이 강제로readonly = 2로 설정됩니다. 따라서readonly = 1을 설정하면서도 읽기 전용 모드에서readonly변경을 허용하는 프로필은 이 보호 장치를 무력화합니다.GET요청이 값을0으로 바꾼 뒤 쓰기를 수행할 수 있기 때문입니다.
여러 제약 조건 프로필
사용자에게 여러 프로필이 활성화된 경우 제약 조건이 머지됩니다. 머지 과정은settings_constraints_replace_previous 값에 따라 달라집니다.
- true (권장): 동일한 설정에 대한 제약 조건은 머지 중에 대체되며, 마지막 제약 조건이 사용되고 그 이전의 제약 조건은 모두 무시됩니다. 여기에는 새 제약 조건에서 설정되지 않은 필드도 포함됩니다.
- false (기본값): 동일한 설정에 대한 제약 조건은 다음 방식으로 머지됩니다. 설정되지 않은 각 제약 조건 유형은 이전 프로필에서 가져오고, 설정된 각 제약 조건 유형은 새 프로필의 값으로 대체됩니다.
읽기 전용 모드
읽기 전용 모드는readonly 설정으로 활성화되며, readonly 제약 조건 유형과 혼동하지 않도록 주의해야 합니다. readonly = 1일 때는 원래라면 변경이 거부될 설정이라도 changeable_in_readonly 제약 조건이 허용하면 변경할 수 있습니다. 이 설정의 각 값이 의미하는 바는 설정 참고를 참조하십시오. 각 값이 허용하는 쿼리 클래스와 HTTP 인터페이스가 이 값을 설정하는 방식은 쿼리 권한을 참조하십시오.
예시
users.xml에 다음 내용을 포함하십시오:
default 프로필은 특별하게 처리됩니다. default 프로필에 정의된 모든 제약 조건은
기본 제약 조건이 되며, 따라서 각 사용자에 대해 명시적으로 재정의되기 전까지는 모든 사용자에게
적용됩니다.MergeTree 설정 제약 조건
merge tree settings에 대한 제약 조건을 설정할 수 있습니다. 이 제약 조건은 MergeTree engine을 사용하는 테이블을 생성하거나 스토리지 설정을 변경할 때 적용됩니다.<constraints> 섹션에서 참조할 때는
merge tree setting 이름 앞에 merge_tree_ 접두사를 붙여야 합니다.
예시
storage_policy를 명시적으로 지정한 새 테이블의 생성을 금지할 수 있습니다.