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 |
|
|
Excluir uma função |
|
|
Conceder privilégios a uma função |
|
|
Atribuir uma função a um usuário |
|
|
Definir a função padrão para um usuário |
|
|
Ativar uma função para a sessão atual |
|
|
Visualizar concessões para uma função ou usuário |
|
|
Revogar privilégios de uma função |
|
|
Remover a atribuição de uma função de um usuário |
|
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 OPTIONconcede ao destinatário permissão de administrador sobre a função atribuída.
Exemplo:
mysql> GRANT 'role_write' TO 'user1'@'127.0.0.1';
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 comandoSET ROLE DEFAULTativa as funções configuradas porSET 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' |
+----------------------------------------------+