设置约束
概述
在 ClickHouse 中,设置上的“约束”是指可以分配给设置的限制和规则。这些约束可以应用于维护数据库的稳定性、安全性和可预测性行为。
定义约束
设置上的约束可以在 user.xml
配置文件的 profiles
部分定义。它们禁止用户通过 SET
语句更改某些设置。
约束的定义如下:
如果用户试图违反这些约束,将抛出异常,并且设置保持不变。
约束的类型
ClickHouse 支持几种类型的约束:
min
max
disallowed
readonly
(别名为const
)changeable_in_readonly
min
和 max
约束指定数值设置的上下限,并且可以彼此结合使用。
disallowed
约束可以用于指定特定的值,这些值不应允许用于特定的设置。
readonly
或 const
约束指定用户无法更改相应的设置。
changeable_in_readonly
约束类型允许用户在 min
/max
范围内更改设置,即使 readonly
设置为 1
,否则在 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 settings 设置约束。这些约束在创建具有 MergeTree 引擎的表时或更改其存储设置时应用。
引用合并树设置时,合并树设置的名称必须以 merge_tree_
前缀开头,在 <constraints>
部分中。
示例
您可以禁止使用显式指定的 storage_policy
创建新表。