Skip to main content

Ограничения на изменение настроек

Ограничения на изменение настроек могут находиться внутри секции profiles файла user.xml и запрещают пользователю менять некоторые настройки с помощью запроса SET. Выглядит это следующим образом:

<profiles>
<имя_пользователя>
<constraints>
<настройка_1>
<min>нижняя_граница</min>
</настройка_1>
<настройка_2>
<max>верхняя_граница</max>
</настройка_2>
<настройка_3>
<min>нижняя_граница</min>
<max>верхняя_граница</max>
</настройка_3>
<настройка_4>
<readonly/>
</настройка_4>
</constraints>
</имя_пользователя>
</profiles>

Если пользователь пытается выйти за пределы, установленные этими ограничениями, то кидается исключение и настройка сохраняет прежнее значение. Поддерживаются три типа ограничений: min, max и readonly. Ограничения min и max указывают нижнюю и верхнюю границы для числовых настроек и могут использоваться вместе. Ограничение readonly указывает, что пользователь не может менять настройку.

Пример: Пусть файл users.xml содержит строки:

<profiles>
<default>
<max_memory_usage>10000000000</max_memory_usage>
<force_index_by_date>0</force_index_by_date>
...
<constraints>
<max_memory_usage>
<min>5000000000</min>
<max>20000000000</max>
</max_memory_usage>
<force_index_by_date>
<readonly/>
</force_index_by_date>
</constraints>
</default>
</profiles>

Каждый из следующих запросов кинет исключение:

SET max_memory_usage=20000000001;
SET max_memory_usage=4999999999;
SET force_index_by_date=1;
Code: 452, e.displayText() = DB::Exception: Setting max_memory_usage should not be greater than 20000000000.
Code: 452, e.displayText() = DB::Exception: Setting max_memory_usage should not be less than 5000000000.
Code: 452, e.displayText() = DB::Exception: Setting force_index_by_date should not be changed.

Примечание: профиль с именем default обрабатывается специальным образом: все ограничения на изменение настроек из этого профиля становятся дефолтными и влияют на всех пользователей, кроме тех, где эти ограничения явно переопределены.