Todos os produtos
Search
Central de documentação

PolarDB:Gerenciamento de permissões de função

Última atualização: Jun 28, 2026

O PolarDB-X oferece suporte ao controle de acesso baseado em função (RBAC) compatível com MySQL 8.0. Este tópico aborda a sintaxe de cada operação de gerenciamento de funções e fornece exemplos executáveis.

Para consultar a especificação completa de funções do MySQL 8.0, consulte Controle de acesso baseado em função.

Visão geral das operações

Operação

Instrução

Criar uma função

CREATE ROLE

Excluir uma função

DROP ROLE

Conceder privilégios a uma função

GRANT ... ON ... TO role

Atribuir uma função a um usuário

GRANT role TO user

Definir a função padrão para um usuário

SET DEFAULT ROLE

Ativar uma função para a sessão atual

SET ROLE

Visualizar concessões para uma função ou usuário

SHOW GRANTS

Revogar privilégios de uma função

REVOKE ... ON ... FROM role

Remover a atribuição de uma função de um usuário

REVOKE role FROM user

Criar uma função

CREATE ROLE role [, role]...

O nome de uma função é composto por duas partes: Name e Host.

  • Name: Obrigatório. Não pode ficar em branco.

  • Host: Deve ser um endereço IP. Pode conter underscores (_) e sinais de porcentagem (%), mas nenhum deles atua como caractere curinga. Se deixado em branco, % será usado como valor do host. Consulte % usando correspondência exata, pois ele não é expandido como curinga.

Exemplo:

mysql> CREATE ROLE 'role_ro'@'%', 'role_write';

Excluir uma função

DROP ROLE role [, role] ...

Exemplo:

mysql> DROP ROLE 'role_ro'@'%';

Conceder privilégios a uma função

Use esta sintaxe para atribuir privilégios de banco de dados (como SELECT ou ALL PRIVILEGES) diretamente a uma função. Esta forma inclui uma cláusula ON para especificar o nível do privilégio.

GRANT priv_type [, priv_type] ... ON priv_level TO role [, role]... [WITH GRANT OPTION]

Exemplo:

mysql> GRANT ALL PRIVILEGES ON db1.* TO 'role_write';

Atribuir uma função a um usuário

Use esta sintaxe para atribuir uma função a um usuário.

GRANT role [, role] ...
    TO user_or_role [, user_or_role] ...
    [WITH ADMIN OPTION]

Requisitos:

  • A conta executora deve ter o privilégio CREATE_USER.

  • A conta executora deve ter permissão de administrador na função atribuída.

  • Adicionar WITH ADMIN OPTION concede ao destinatário permissão de administrador sobre a função atribuída.

Exemplo:

mysql> GRANT 'role_write' TO 'user1'@'127.0.0.1';
Importante

Atribuir uma função não a ativa automaticamente. A sessão do usuário não obterá os privilégios da função até que ela seja ativada. Use SET DEFAULT ROLE e SET ROLE para ativá-la (consulte as seções abaixo).

Definir a função padrão para um usuário

O comando SET DEFAULT ROLE especifica quais funções são ativadas automaticamente quando um usuário se conecta.

SET DEFAULT ROLE
    {NONE | ALL | role [, role ] ...}
    TO user [, user ] ...

Requisitos:

  • A função especificada já deve ter sido atribuída ao usuário via GRANT.

  • O usuário deve ter a função atribuída ou possuir o privilégio CREATE_USER.

Exemplo:

mysql> SET DEFAULT ROLE 'role_write' TO 'user1'@'127.0.0.1';

Ativar uma função para a sessão atual

O comando SET ROLE altera as funções ativas na conexão atual. As alterações não persistem após o término da sessão.

SET ROLE {
    DEFAULT
  | NONE
  | ALL
  | ALL EXCEPT role [, role ] ...
  | role [, role ] ...
}
O comando SET ROLE DEFAULT ativa as funções configuradas por SET DEFAULT ROLE . As funções ativadas aplicam-se apenas à conexão atual.

Exemplo:

mysql> SET ROLE 'role_write';

Para verificar quais funções estão ativas no momento, execute SELECT CURRENT_ROLE():

mysql> SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE()   |
+------------------+
| 'role_write'@'%' |
+------------------+

Visualizar concessões

O comando SHOW GRANTS exibe os privilégios e as atribuições de função de um usuário ou função. Adicione a cláusula USING para expandir os privilégios de uma função diretamente na saída.

SHOW GRANTS
    [FOR user_or_role
        [USING role [, role] ...]]

Exemplo — visualizar concessões para uma função:

mysql>  SHOW GRANTS FOR 'role_write'@'%';
+---------------------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%'                       |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%'            |
| GRANT ALL PRIVILEGES ON db1.* TO 'role_write'@'%' |
+---------------------------------------------------+

Exemplo — visualizar concessões para um usuário, com privilégios de função expandidos:

mysql> SHOW GRANTS FOR 'user1'@'127.0.0.1' USING 'role_write';
+------------------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'                       |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'            |
| GRANT ALL PRIVILEGES ON db1.* TO 'user1'@'127.0.0.1' |
| GRANT 'role_write'@'%' TO 'user1'@'127.0.0.1'        |
+------------------------------------------------------+

-- Run as user1
mysql> SELECT CURRENT_ROLE();
+------------------+
| CURRENT_ROLE()   |
+------------------+
| 'role_write'@'%' |
+------------------+

Revogar privilégios de uma função

Use esta sintaxe para remover privilégios específicos de uma função.

REVOKE priv_type [, priv_type] ... ON priv_level FROM role [, role]...

Exemplo:

mysql> REVOKE ALL PRIVILEGES ON db1.* FROM 'role_write';

mysql> SHOW GRANTS FOR 'role_write'@'%';
+----------------------------------------+
| GRANTS FOR 'ROLE_WRITE'@'%'            |
+----------------------------------------+
| GRANT USAGE ON *.* TO 'role_write'@'%' |
+----------------------------------------+

Remover a atribuição de uma função de um usuário

Use esta sintaxe para remover a atribuição de uma função de um usuário.

REVOKE role [, role ] ... FROM user_or_role [, user_or_role ] ...

Exemplo:

mysql> SHOW GRANTS FOR 'user1'@'127.0.0.1';
+-----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'                |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'     |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1'  |
| GRANT 'role_write'@'%' TO 'user1'@'127.0.0.1' |
+-----------------------------------------------+

mysql> REVOKE 'role_write' FROM 'user1'@'127.0.0.1';

mysql> SHOW GRANTS FOR 'user1'@'127.0.0.1';
+----------------------------------------------+
| GRANTS FOR 'USER1'@'127.0.0.1'               |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'user1'@'127.0.0.1'    |
| GRANT SELECT ON db1.* TO 'user1'@'127.0.0.1' |
+----------------------------------------------+