Resumo : neste tutorial, você aprenderá como usar a GRANT
instrução MySQL para atribuir privilégios a contas de usuários.
Introdução à instrução MySQL GRANT
A CREATE USER
instruçã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 GRANT
instrução para atribuir um ou mais privilégios à conta do usuário.
Aqui está a sintaxe básica da GRANT
instruçã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
GRANT
palavra-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
TO
palavra-chave.
Observe que para usar a GRANT
instrução, você deve ter o GRANT OPTION
privilégio e os privilégios que está concedendo. Se a variável do sistema read_only
estiver habilitada, você precisará ter SUPER
privilégio para executar a GRANT
instrução.
Níveis de privilégio MySQL
MySQL suporta os seguintes 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@localhost
pode 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 classicmodels
banco 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_name
sintaxe. 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 employees
tabela no classicmodels
banco 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@localhost
podemos selecionar dados de quatro colunas:
employeeNumber
lastName
firstName
email
E atualiza apenas a lastName
coluna da employees
tabela.
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 CheckCredit
no 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@localhost
assume todos os privilégios do usuário root
.
Exemplos de instruções GRANT do MySQL
Normalmente, você usa a CREATE USER
instrução para criar primeiro uma nova conta de usuário e depois usa a GRANT
instrução para conceder privilégios ao usuário.
Primeiro, crie um novo usuário nomeado super@localhost
usando a seguinte CREATE USER
instruçã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@localhost
usuário usando a SHOW GRANTS
instruçã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 USAGE
significa que você super@localhost
pode 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 GRANTS
afirmaçã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 GRANT
and :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 TABLE instruçã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 TABLE a 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 USER e 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 DELETE a 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 INSERT instruçã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 PROCESSLIST instruçã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 FLUSH a 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 SELECT a 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 VIEW a 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 GLOBAL e comando mysqladmin |
X | |||||
ACIONAR | Permitir que o usuário use TRIGGER operações. |
X | X | X | |||
ATUALIZAR | Permitir que o usuário use a UPDATE instrução |
X | X | X | X | ||
USO | Equivalente a “sem privilégios” |
Resumo
- Use a
GRANT
instrução MySQL para conceder privilégios a um usuário.