CONCESSÃO MySQL

Resumo : neste tutorial, você aprenderá como usar a GRANTinstrução MySQL para atribuir privilégios a contas de usuários.

Introdução à instrução MySQL GRANT

A CREATE USERinstrução cria uma conta de usuário sem privilégios. Isso significa que a conta do usuário pode fazer login no servidor MySQL, mas não pode fazer nada, como selecionar um banco de dados e consultar dados de tabelas.

Para permitir que a conta do usuário funcione com objetos de banco de dados, você precisa conceder privilégios a ela. Você usa a GRANTinstrução para atribuir um ou mais privilégios à conta do usuário.

Aqui está a sintaxe básica da GRANTinstrução:

GRANT privilege [,privilege],.. 
ON privilege_level 
TO account_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta sintaxe:

  • Primeiro, especifique um ou mais privilégios após a GRANTpalavra-chave. Se você conceder vários privilégios, será necessário separá-los por vírgulas.
  • Segundo, especifique o privilege_level, que determina até que ponto os privilégios se aplicam. Mais informações sobre níveis de privilégio serão fornecidas em breve.
  • Terceiro, especifique o nome da conta do usuário ao qual deseja conceder privilégios após a TOpalavra-chave.

Observe que para usar a GRANTinstrução, você deve ter o GRANT OPTIONprivilégio e os privilégios que está concedendo. Se a variável do sistema read_onlyestiver habilitada, você precisará ter SUPERprivilégio para executar a GRANTinstrução.

Níveis de privilégio MySQL

MySQL suporta os seguintes níveis de privilégio:

Concessão MySQL - Níveis de privilégio

Privilégios Globais

Os privilégios globais se aplicam a todos os bancos de dados em um servidor MySQL. Para atribuir todos os privilégios globais, você usa a *.*sintaxe, por exemplo:

GRANT SELECT 
ON *.* 
TO bob@localhost;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O usuário da conta bob@localhostpode gerenciar todos os bancos de dados do servidor MySQL atual.

Privilégios de banco de dados

Os privilégios de banco de dados se aplicam a todos os objetos em um banco de dados específico. Para atribuir privilégios no nível do banco de dados, você usa a ON database_name.*sintaxe, por exemplo:

GRANT INSERT 
ON classicmodels.* 
TO bob@localhost;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, bob@localhosté possível gerenciar todos os objetos do classicmodelsbanco de dados.

Privilégios de mesa

Os privilégios de tabela se aplicam a todas as colunas de uma tabela. Para atribuir privilégios em nível de tabela, você usa a ON database_name.table_namesintaxe. Por exemplo:

GRANT DELETE 
ON classicmodels.employees 
TO bob@localhsot;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, bob@localhosté possível gerenciar linhas da employeestabela no classicmodelsbanco de dados.

Se você ignorar o nome do banco de dados, o MySQL usará o banco de dados padrão ou emitirá um erro se não houver banco de dados padrão.

Privilégios de coluna

Os privilégios de coluna se aplicam a colunas individuais em uma tabela. Você deve especificar a coluna ou colunas para cada privilégio. Por exemplo:

GRANT 
   SELECT (employeeNumner,lastName, firstName,email), 
   UPDATE(lastName) 
ON employees 
TO bob@localhost;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, bob@localhostpodemos selecionar dados de quatro colunas:

  • employeeNumber
  • lastName
  • firstName
  • email

E atualiza apenas a lastNamecoluna da employeestabela.

Privilégios de rotina armazenados

Os privilégios de rotina armazenada aplicam-se a procedimentos armazenados e funções armazenadas. Por exemplo:

GRANT EXECUTE 
ON PROCEDURE CheckCredit 
TO bob@localhost;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, bob@localhosté possível executar o procedimento armazenado CheckCreditno banco de dados atual.

Privilégios de usuário proxy

Os privilégios de usuário proxy permitem que um usuário seja proxy de outro. O usuário proxy obtém todos os privilégios do usuário proxy. Por exemplo:

GRANT PROXY 
ON root 
TO alice@localhost;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, alice@localhostassume todos os privilégios do usuário root.

Exemplos de instruções GRANT do MySQL

Normalmente, você usa a CREATE USERinstrução para criar primeiro uma nova conta de usuário e depois usa a GRANTinstrução para conceder privilégios ao usuário.

Primeiro, crie um novo usuário nomeado super@localhostusando a seguinte  CREATE USERinstrução:

CREATE USER super@localhost 
IDENTIFIED BY 'Secure1Pass!';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Segundo, mostre os privilégios atribuídos ao super@localhostusuário usando a SHOW GRANTSinstrução:

SHOW GRANTS FOR super@localhost;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+-------------------------------------------+
| Grants for super@localhost                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO `super`@`localhost` |
+-------------------------------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Isso USAGEsignifica que você super@localhostpode fazer login no banco de dados, mas não tem privilégios.

Terceiro, conceda todos os privilégios em todos os bancos de dados do servidor de banco de dados atual para super@localhost:

GRANT ALL 
ON classicmodels.* 
TO super@localhost;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Quarto, use a SHOW GRANTSafirmação novamente:

SHOW GRANTS FOR super@localhost;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+------------------------------------------------------------------+
| Grants for super@localhost                                       |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `super`@`localhost`                        |
| GRANT ALL PRIVILEGES ON `classicmodels`.* TO `super`@`localhost` |
+------------------------------------------------------------------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Privilégios permitidos para a instrução GRANT

A tabela a seguir ilustra todos os privilégios permitidos que você pode usar para a instrução GRANTand :REVOKE

Privilégio Significado Nível
Global Base de dados Mesa Coluna Rotina Armazenada Procurador
TODOS [PRIVILÉGIOS] Permitir que o usuário altere e elimine procedimentos armazenados ou funções armazenadas.
ALTERAR Permitir que o usuário use a ALTER TABLEinstrução X X X
ALTERAR ROTINA Permitir que o usuário crie bancos de dados e tabelas X X X
CRIAR Permitir que o usuário crie procedimentos armazenados e funções armazenadas X X X
CRIAR ROTINA Permitir que o usuário crie uma tabela temporária usando CREATE TEMPORARY TABLEa instrução X X
CRIAR TABELA Permitir que o usuário crie, altere ou elimine espaços de tabela e grupos de arquivos de log X
CRIAR TABELAS TEMPORÁRIAS Permita que o usuário use as instruções CREATE USER, DROP USER, RENAME USERe REVOKE ALL PRIVILEGES. X X
CRIAR USUÁRIO Permitir que o usuário crie ou modifique a visualização. X
CRIAR VISUALIZAÇÃO Permitir que o usuário use DELETEa instrução X X X
EXCLUIR Permitir que o usuário execute rotinas armazenadas X X X
DERRUBAR Permitir que o usuário elimine banco de dados, tabela e visualização X X X
EVENTO Permitir que o usuário use eventos para o Agendador de Eventos. X X
EXECUTAR Permitir que o usuário elimine o banco de dados, a tabela e a visualização X X X
ARQUIVO Permita que o usuário tenha privilégios para conceder ou revogar privilégios de outras contas. X
OPÇÃO DE CONCESSÃO Permitir que o usuário crie ou elimine índices. X X X X X
ÍNDICE Permitir que o usuário crie ou elimine índices. X X X
INSERIR Permitir que o usuário use a INSERTinstrução X X X X
BLOQUEAR TABELAS Permitir que o usuário consulte onde estão os servidores mestre ou escravo X X
PROCESSO Permitir que o usuário veja todos os processos com SHOW PROCESSLISTinstrução. X
PROCURADOR Habilite o proxy do usuário.
REFERÊNCIAS Permitir que o usuário crie uma chave estrangeira X X X X
RECARREGAR Permitir que o usuário use FLUSHa instrução X
CLIENTE DE REPLICAÇÃO Permitir que o usuário consulte onde estão os servidores mestre ou escravo X
ESCRAVO DE REPLICAÇÃO Permitir que o usuário use escravos replicados para ler eventos de log binário do mestre. X
SELECIONAR Permitir que o usuário use SELECTa instrução X X X X
MOSTRAR BANCOS DE DADOS Permitir que o usuário mostre todos os bancos de dados X
MOSTRAR VISUALIZAÇÃO Permitir que o usuário use SHOW CREATE VIEWa instrução X X X
DESLIGAR Permitir que o usuário use o comando mysqladmin shutdown X
SUPER Permitir que o usuário use outras operações administrativas, como CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBALe comando mysqladmin X
ACIONAR Permitir que o usuário use TRIGGERoperações. X X X
ATUALIZAR Permitir que o usuário use a UPDATEinstrução X X X X
USO Equivalente a “sem privilégios”

Resumo

  • Use a GRANTinstrução MySQL para conceder privilégios a um usuário.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *