Descripción general
En ClickHouse, las “restricciones” de los ajustes se refieren a limitaciones y reglas que se pueden asignar a los ajustes. Estas restricciones pueden aplicarse para mantener la estabilidad, la seguridad y un comportamiento predecible de la base de datos.Definición de restricciones
Las restricciones de configuración pueden definirse en la secciónprofiles del archivo de configuración user.xml.
Impiden que los usuarios cambien algunos ajustes mediante la
sentencia SET.
Las restricciones se definen de la siguiente manera:
Tipos de restricciones
ClickHouse admite varios tipos de restricciones:minmaxdisallowedreadonly(con el aliasconst)changeable_in_readonly
min y max especifican los límites inferior y superior de una
configuración numérica, y pueden usarse en combinación.
La restricción disallowed puede usarse para especificar valores concretos que no
deben permitirse para una configuración determinada.
La restricción readonly o const especifica que el usuario no puede cambiar en
absoluto la configuración correspondiente.
El tipo de restricción changeable_in_readonly permite a los usuarios cambiar la configuración
dentro del rango min/max incluso si la configuración readonly está establecida en 1;
de lo contrario, no se permite cambiar configuraciones en el modo readonly=1.
changeable_in_readonly solo es compatible si settings_constraints_replace_previous
está habilitado:No permitas que readonly sea modificable en modo de solo lectura
No marques el propio readonly como changeable_in_readonly. Si lo haces, una sesión que comienza con readonly = 1 podrá ejecutar SET readonly = 0 y recuperar la capacidad de lanzar las consultas de escritura que sus privilegios actuales ya le permiten, salvo que la misma restricción también prohíba 0.
Esto importa en todos los perfiles que definas, no solo en los que asignes:
SET profileno pasa por una comprobación de acceso, por lo que cualquier sesión puede seleccionar cualquier perfil por su nombre. Un perfil es accesible aunque no se lo asignes a nadie, si bien lo que modifique se sigue comprobando frente a las restricciones ya activas en esa sesión.- Por HTTP, las solicitudes
GETse fuerzan areadonly = 2únicamente cuando el valor efectivo sería0. Así, un perfil que establecereadonly = 1pero además permite modificarreadonlyen modo de solo lectura anula esa protección, porque una solicitudGETpuede cambiarlo a0y escribir.
Varios perfiles de restricciones
Si hay varios perfiles activos para un usuario, las restricciones se fusionan. El proceso de fusión depende desettings_constraints_replace_previous:
- true (recomendado): las restricciones para el mismo ajuste se sustituyen durante la fusión, de modo que se usa la última restricción y se ignoran todas las anteriores. Esto incluye los campos que no están definidos en la nueva restricción.
- false (predeterminado): las restricciones para el mismo ajuste se fusionan de forma que cada tipo de restricción no definido se toma del perfil anterior y cada tipo de restricción definido se sustituye por el valor del nuevo perfil.
Modo de solo lectura
El modo de solo lectura se habilita mediante el SETTINGreadonly, que no debe confundirse con el tipo de CONSTRAINT readonly. Cuando readonly = 1, un SETTING que de otro modo sería rechazado aún puede modificarse si un CONSTRAINT changeable_in_readonly lo permite. Para conocer el significado de los valores de este SETTING, consulte la referencia de SETTINGS; para saber qué clases de consultas permite cada valor y cómo lo establece la HTTP interface, consulte permisos para consultas.
Ejemplo
Incluya las siguientes líneas enusers.xml:
El perfil
default recibe un tratamiento especial: todas las restricciones definidas para el
perfil default pasan a ser las restricciones predeterminadas, por lo que se aplican a todos los usuarios
hasta que se sobrescriban explícitamente para esos usuarios.Restricciones en la configuración de MergeTree
Es posible establecer restricciones para la configuración de MergeTree. Estas restricciones se aplican al crear una tabla con el motor MergeTree o al modificar su configuración de almacenamiento. El nombre de la configuración de MergeTree debe llevar el prefijomerge_tree_ cuando
se haga referencia a ella en la sección <constraints>.
Ejemplo
Puede prohibir la creación de tablas nuevas constorage_policy especificada explícitamente