Skip to main content

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ção profiles 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:
Se o usuário tentar violar as restrições, uma exceção será lançada e a configuração permanecerá inalterada.

Tipos de restrições

Há alguns tipos de restrições compatíveis com o ClickHouse:
  • min
  • max
  • disallowed
  • readonly (com alias const)
  • changeable_in_readonly
As restrições 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

Mantenha readonly fora da lista changeable_in_readonly em todos os perfis, inclusive naqueles que você não atribui a ninguém: qualquer sessão pode selecionar um perfil pelo nome.
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 profile nã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 GET são forçadas a readonly = 2 apenas quando o valor efetivo seria 0. Portanto, um perfil que define readonly = 1 mas também permite alterar readonly em modo somente leitura anula essa proteção, pois uma requisição GET pode mudá-lo para 0 e 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 de settings_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ção readonly, 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 que users.xml inclua as seguintes linhas:
As consultas a seguir gerarão exceções:
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 prefixo merge_tree_ quando for referenciado na seção <constraints>.

Exemplo

Você pode proibir a criação de novas tabelas com storage_policy especificada explicitamente
Última modificação em 26 de setembro de 2026