Ao executar SET ROLE no SQL Console do ClickHouse Cloud, a função pode parecer mudar para uma consulta e, em seguida, ser revertida na próxima. Use uma função do SQL Console por usuário quando as permissões precisarem persistir entre consultas e sessões.
Sintomas
Você pode observar um ou mais dos seguintes sintomas:
- Após executar
SET ROLE sql_console_developer, as consultas subsequentes ainda são executadas comsql_console_read_only. - Os resultados de
currentRoles,enabledRolesedefaultRolesvariam entre as consultas. - Executar
SET ROLEjunto com outra consulta não mantém de forma consistente a função selecionada. SHOW GRANTSlista as funções esperadas, mas as permissões delas não estão ativas.
Você pode inspecionar o usuário e as funções atuais com:
SELECT
currentUser(),
currentRoles(),
enabledRoles(),
defaultRoles();Por que isso acontece
O SQL Console envia consultas por conexões HTTP sem estado para um serviço ClickHouse Cloud com várias réplicas. Não há garantia de que consultas consecutivas usem a mesma conexão ou réplica.
SET ROLE altera as funções habilitadas na sessão atual. Ele não mantém esse estado de sessão para solicitações posteriores do SQL Console. Portanto, uma consulta subsequente pode ser executada sem a função habilitada por uma solicitação anterior.
Por esse motivo, não use SET ROLE como um mecanismo persistente de controle de acesso no SQL Console.
Como funcionam as funções de usuário do SQL Console
Quando um usuário abre o SQL Console, o ClickHouse Cloud provisiona um usuário de banco de dados seguindo a seguinte convenção de nomenclatura:
sql-console:user@example.comO ClickHouse Cloud também verifica se há uma função de banco de dados cujo nome segue a convenção a seguir:
sql-console-role:user@example.comQuando essa função existe, o ClickHouse Cloud a atribui ao usuário correspondente do SQL Console. Essa é a maneira compatível de conceder permissões personalizadas persistentes a um usuário específico do SQL Console.
| Entidade | Finalidade | Persistente |
|---|---|---|
sql-console:<email> |
Usuário do banco de dados provisionado quando abre o SQL Console | Sim, gerenciado pelo ClickHouse Cloud |
sql_console_admin and sql_console_read_only |
Funções integradas do SQL Console | Sim, gerenciadas pelo ClickHouse Cloud |
sql-console-role:<email> |
Função personalizada por usuário criada por um administrador | Sim, aplicada quando o usuário faz login |
Configurar permissões persistentes
Execute as instruções a seguir como um usuário com privilégios administrativos no serviço, como um usuário do SQL Console com a função sql_console_admin ou outro usuário com o privilégio ACCESS MANAGEMENT.
Criar a função personalizada
O exemplo a seguir cria uma função personalizada sql_console_developer e concede a ela permissões em my_database:
CREATE ROLE IF NOT EXISTS sql_console_developer;
GRANT SELECT, INSERT, CREATE TABLE
ON my_database.*
TO sql_console_developer;sql_console_developer é uma função de exemplo, não uma função integrada do ClickHouse Cloud. Como alternativa, você pode usar uma função personalizada existente com as permissões de que o usuário precisa.
Criar a função do SQL Console por usuário
Crie uma função cujo nome contenha o endereço de e-mail exato do usuário:
CREATE ROLE IF NOT EXISTS `sql-console-role:user@example.com`;Os backticks são obrigatórios porque o nome da função contém caracteres especiais.
Conceder a função personalizada
Conceda a função desejada à função do SQL Console por usuário:
GRANT sql_console_developer
TO `sql-console-role:user@example.com`;Você pode conceder várias funções, se necessário:
GRANT sql_console_developer, sql_console_read_only
TO `sql-console-role:user@example.com`;Iniciar uma nova sessão do SQL Console
Peça ao usuário para sair e entrar novamente no SQL Console ou atualizar a aba do navegador. Na nova sessão, o ClickHouse Cloud aplica sql-console-role:user@example.com a sql-console:user@example.com; não é necessária nenhuma instrução SET ROLE.
Verifique as funções ativas:
SELECT
currentUser(),
currentRoles(),
enabledRoles(),
defaultRoles();Os resultados devem incluir as permissões concedidas por sql-console-role:user@example.com.
Evite modificar funções gerenciadas
Não modifique sql_console_admin nem sql_console_read_only para conceder permissões personalizadas. O ClickHouse Cloud gerencia essas funções integradas. Em vez disso, use sql-console-role:<email> para definir permissões por usuário.
Para exemplos gerais de gerenciamento de funções, consulte Consultas comuns de gerenciamento de acesso.