設定に対する制約
概要
ClickHouseにおける「設定に対する制約」とは、設定に対して割り当てることができる制限やルールを指します。これらの制約は、データベースの安定性、セキュリティ、および予測可能な動作を維持するために適用されます。
制約の定義
設定に対する制約は、user.xml
構成ファイルのprofiles
セクションで定義できます。これにより、ユーザーが一部の設定をSET
ステートメントを使用して変更することを禁止します。
制約は以下のように定義されます:
ユーザーが制約に違反しようとすると、例外がスローされ、設定は変更されません。
制約の種類
ClickHouseでサポートされている制約の種類はいくつかあります:
min
max
disallowed
readonly
(エイリアス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
が有効な場合のみサポートされます:
複数の制約プロファイル
ユーザーに対して複数のプロファイルがアクティブな場合、制約はマージされます。マージプロセスはsettings_constraints_replace_previous
に依存します:
- true(推奨):同じ設定の制約はマージ時に置き換えられ、最後の制約が使用され、すべての以前の制約は無視されます。これには新しい制約で設定されていないフィールドも含まれます。
- false(デフォルト):同じ設定の制約は、すべての未設定の制約タイプは以前のプロファイルから取得され、すべての設定済みの制約タイプは新しいプロファイルからの値で置き換えられます。
読み取り専用モード
読み取り専用モードは、readonly
設定によって有効化され、readonly
制約タイプと混同してはいけません:
readonly=0
:読み取り専用の制限なし。readonly=1
:読み取りクエリのみが許可され、changeable_in_readonly
が設定されていない限り設定は変更できません。readonly=2
:読み取りクエリのみが許可されますが、設定は変更可能で、readonly
設定自体は除きます。
例
users.xml
に以下の行が含まれているとします:
次のクエリはすべて例外をスローします:
default
プロファイルは独自に処理されます:default
プロファイルのために定義されたすべての制約はデフォルトの制約となり、それによって明示的にオーバーライドされるまで、すべてのユーザーを制限します。
MergeTree設定の制約
Merge tree設定に対する制約を設定することが可能です。これらの制約は、MergeTreeエンジンを持つテーブルが作成されるときや、そのストレージ設定が変更されるときに適用されます。
Merge tree設定の名前は、<constraints>
セクションで参照される際にmerge_tree_
プレフィックスを先頭に付ける必要があります。
例
storage_policy
が明示的に指定された新しいテーブルの作成を禁止することができます: