Ao criar uma conta no console do ApsaraDB RDS, você pode conceder permissões em bancos de dados inteiros. Para restringir o acesso de uma conta a tabelas, visualizações ou campos específicos, execute instruções SQL diretamente na instância e aplique uma autorização refinada.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma conta privilegiada. Para obter instruções, consulte Criar uma conta.
Como funciona
A autorização refinada no MySQL usa privilégios em camadas. Cada nível é independente; portanto, uma autorização completa geralmente exige múltiplas instruções GRANT.
|
Nível |
Sintaxe |
Tipos de privilégio suportados |
|
Global |
|
|
|
Tabela |
|
|
|
Visualização |
|
Apenas |
|
Coluna |
|
|
Contas criadas por este procedimento não conseguem visualizar os bancos de dados autorizados no console do ApsaraDB RDS. Para garantir a visibilidade de um banco de dados no console, use o caractere curinga ( * ) como nome da tabela em vez de um nome específico ao conceder permissões de tabela.
Conceder permissões de tabela
Use uma conta privilegiada para conectar-se à instância RDS e execute as seguintes instruções SQL.
Etapa 1: Criar uma conta.
CREATE USER `<username>`@`%` IDENTIFIED BY '<password>';
Etapa 2: Conceder permissões globais.
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '<username>'@'%';
Etapa 3: Conceder permissões totais em uma tabela específica.
GRANT ALL PRIVILEGES ON `<database>`.`<table>` TO '<username>'@'%';
Substitua<table>por*para conceder acesso a todas as tabelas do banco de dados. Essa ação também permite que a conta visualize o banco de dados no console do ApsaraDB RDS.
Etapa 4: Conceder permissões de somente leitura nas tabelas de sistema mysql mais usadas.
GRANT SELECT ON `mysql`.`help_topic` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`func` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`time_zone` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`slow_log` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`proc` TO '<username>'@'%';
GRANT SELECT ON `mysql`.`general_log` TO '<username>'@'%';
-- Grant permissions on other system tables based on your requirements.
Exemplos
Autorizar uma conta a gerenciar uma única tabela
Crie a conta test01 com acesso total à tabela test100 no banco de dados rds001.
CREATE USER `test01`@`%` IDENTIFIED BY 'passwd';
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test01'@'%';
GRANT ALL PRIVILEGES ON `rds001`.`test100` TO 'test01'@'%';
GRANT SELECT ON `mysql`.`help_topic` TO 'test01'@'%';
GRANT SELECT ON `mysql`.`func` TO 'test01'@'%';
Autorizar uma conta a gerenciar várias tabelas
Crie a conta test02 com acesso total às tabelas test100, test200 e test300 no banco de dados rds001.
CREATE USER `test02`@`%` IDENTIFIED BY 'passwd';
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test02'@'%';
GRANT ALL PRIVILEGES ON `rds001`.`test100` TO 'test02'@'%';
GRANT ALL PRIVILEGES ON `rds001`.`test200` TO 'test02'@'%';
GRANT ALL PRIVILEGES ON `rds001`.`test300` TO 'test02'@'%';
GRANT SELECT ON `mysql`.`help_topic` TO 'test02'@'%';
GRANT SELECT ON `mysql`.`func` TO 'test02'@'%';
Conceder permissões de visualização
O privilégio SELECT é o único tipo concedido no nível de visualização.
GRANT SELECT ON <database>.<view> TO <username>;
Exemplos
Autorizar uma conta a consultar uma única visualização
GRANT SELECT ON rds001.view_test1 TO test01;
Autorizar uma conta a consultar várias visualizações
GRANT SELECT ON rds001.view_test1 TO test01;
GRANT SELECT ON rds001.view_test2 TO test01;
Conceder permissões de campo
As concessões no nível de coluna restringem o acesso a campos específicos de uma tabela. Cada tipo de privilégio deve ser seguido pelo nome da coluna entre parênteses.
GRANT UPDATE (<field>) ON TABLE <table> TO <username>; -- Authorize updates to a field.
GRANT SELECT (<field>) ON TABLE <table> TO <username>; -- Authorize queries on a field.
Exemplos
Autorizar uma conta a atualizar um único campo
GRANT UPDATE (testid) ON TABLE testtable TO test01;
Autorizar uma conta a atualizar vários campos
GRANT UPDATE (test_id) ON TABLE testtable TO test01;
GRANT UPDATE (test_name) ON TABLE testtable TO test01;
Alternativa: usar o Data Management (DMS)
Execute as mesmas instruções SQL no Data Management (DMS) em vez de usar um cliente ou a CLI.
Perguntas frequentes
Recebo a mensagem "Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation" ao executar as instruções SQL. O que devo fazer?
A conta usada não tem o privilégio CREATE USER. Use a conta privilegiada para executar as instruções ou conceda primeiro esse privilégio à sua conta atual:
GRANT CREATE USER ON *.* TO 'your_user'@'host';
FLUSH PRIVILEGES;