Visão geral
No ClickHouse, “restrições” em configurações se referem a limitações e regras que podem ser atribuídas às configurações. Essas restrições podem ser aplicadas para manter a estabilidade, a segurança e a previsibilidade do comportamento do seu banco de dados.Definindo restrições
Restrições nas configurações podem ser definidas na seçãoprofiles do arquivo de configuração user.xml.
Elas impedem que os usuários alterem algumas configurações usando a
instrução SET.
As restrições são definidas da seguinte forma:
Tipos de restrições
Há alguns tipos de restrições compatíveis com o ClickHouse:minmaxdisallowedreadonly(com aliasconst)changeable_in_readonly
min e max especificam os limites superior e inferior de uma configuração numérica
e podem ser usadas em conjunto.
A restrição disallowed pode ser usada para especificar valores que não devem
ser permitidos para uma determinada configuração.
A restrição readonly ou const especifica que o usuário não pode alterar a
configuração correspondente de forma alguma.
O tipo de restrição changeable_in_readonly permite que os usuários alterem a configuração
dentro do intervalo min/max mesmo se a configuração readonly estiver definida como 1;
caso contrário, não é permitido alterar configurações no modo readonly=1.
changeable_in_readonly é compatível apenas quando settings_constraints_replace_previous
está habilitado:Não torne readonly alterável em modo somente leitura
Não marque o próprio readonly como changeable_in_readonly. Se fizer isso, uma sessão que inicia com readonly = 1 poderá executar SET readonly = 0 e voltar a executar as consultas de escrita que seus privilégios já permitem, a menos que a mesma restrição também proíba 0.
Isso vale para todos os perfis que você define, e não apenas para os que você atribui:
SET profilenão passa por verificação de acesso, portanto qualquer sessão pode selecionar qualquer perfil pelo nome. Um perfil continua acessível mesmo quando você não o atribui a ninguém, embora o que ele altera ainda seja verificado em relação às restrições já ativas nessa sessão.- Via HTTP, requisições
GETsão forçadas areadonly = 2apenas quando o valor efetivo seria0. Portanto, um perfil que definereadonly = 1mas também permite alterarreadonlyem modo somente leitura anula essa proteção, pois uma requisiçãoGETpode mudá-lo para0e gravar dados.
Vários perfis de restrição
Se houver vários perfis ativos para um usuário, as restrições serão mescladas. O processo de merge depende desettings_constraints_replace_previous:
- true (recomendado): as restrições para a mesma configuração são substituídas durante a mesclagem, de modo que a última restrição seja usada e todas as anteriores sejam ignoradas. Isso inclui campos que não estão definidos na nova restrição.
- false (padrão): as restrições para a mesma configuração são mescladas de modo que cada tipo de restrição não definido seja herdado do perfil anterior, e cada tipo de restrição definido seja substituído pelo valor do novo perfil.
Modo somente leitura
O modo somente leitura é habilitado pela configuraçãoreadonly, que não deve ser confundida com o tipo de
CONSTRAINT readonly. Quando readonly = 1, uma configuração que normalmente seria recusada ainda pode ser alterada se
uma CONSTRAINT changeable_in_readonly permitir. Para saber o que significam os valores dessa configuração, consulte a
referência de configurações; para saber quais classes de consulta
cada valor permite e como a interface HTTP a define, consulte
permissões para consultas.
Exemplo
Faça com queusers.xml inclua as seguintes linhas:
O perfil
default é tratado de forma especial: todas as restrições definidas para o
perfil default se tornam as restrições padrão e, assim, passam a restringir todos os usuários
até que sejam explicitamente substituídas para esses usuários.Restrições para configurações do MergeTree
É possível definir restrições para configurações do MergeTree. Essas restrições são aplicadas quando uma tabela com a engine MergeTree é criada ou quando suas configurações de armazenamento são alteradas. O nome da configuração do MergeTree deve ser precedido pelo prefixomerge_tree_ quando
for referenciado na seção <constraints>.
Exemplo
Você pode proibir a criação de novas tabelas comstorage_policy especificada explicitamente