Constraints on Settings¶
The constraints on settings can be defined in the
users section of the
user.xml configuration file and prohibit users from changing some of the settings with the
SET query. The constraints are defined as following:
<profiles> <user_name> <constraints> <setting_name_1> <min>lower_boundary</min> </setting_name_1> <setting_name_2> <max>upper_boundary</max> </setting_name_2> <setting_name_3> <min>lower_boundary</min> <max>upper_boundary</max> </setting_name_3> <setting_name_4> <readonly/> </setting_name_4> </constraints> </user_name> </profiles>
If user tries to violate the constraints an exception is thrown and the setting isn't actually changed. There are supported three types of constraints:
max constraints specify upper and lower boundaries for a numeric setting and can be used in combination. The
readonly constraint specify that the user cannot change the corresponding setting at all.
users.xml includes lines:
<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>
The following queries all throw exceptions:
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 profile has a special handling: all the constraints defined for the
default profile become the default constraints, so they restrict all the users until they're overriden explicitly for these users.