GRANT
Sintaxe
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] ... [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] [WITH with_option [with_option] ...] object_type: TABLE | FUNCTION | PROCEDURE priv_level: * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name with_option: GRANT OPTION | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count ssl_option: SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject'
Descrição
A instrução GRANT
pertite a você criar contas MariaDB e conceder privilégios as contas. Para usar GRANT
, você deve ter o privilégio GRANT OPTION
, e você deve ter os privilégios que está concedendo.
O argumento user e a cláusula IDENTIFIED BY
são as mesmas usadas na instrução CREATE USER
. Se a conta de usuário ainda não existe, será implicitamente criada. Você deve ter os privilégios necessários para a instrução CREATE USER
para criar implicitamente um usuário com GRANT
. Se a conta de usuário existir e você fornecer a cláusula IDENTIFIED BY
, a senha do usuário será alterada. Você deve ter os privilégios necessários para a instrução
SET PASSWORD
para alterar uma senha de usuário com GRANT
.
Use a instrução REVOKE
para revogar privilégios concedidos com a instrução GRANT
.
Use a instrução SHOW GRANTS
para determinar que privilégios possui uma conta.
Níveis de Privilégios
Privilégios podem ser definidos globalmente, para um banco de dados, para uma tabela ou rotina, ou para colunas individuais numa tabela. Certos privilégios só podem ser definidos em certos níveis.
- Privilégios Globais são concedidos usando
*.*
para priv_level. Privilégios globais incluem privilégios para administrar o banco de dados e genrenciar contas de usuário, assim como privilégios para todas as tabelas, funções, e procedimentos.
- Privilégios do Banco de Dados são concedidos usando
db_name.*
para priv_level, ou apenas usando*
para usar o banco de dados padrão. Os privilégios do banco de dados incluem privilégios para a criação de tabelas e funções, assim como privilégios para todas as tabelas, funções e procedimentos no banco de dados.
- Privilégios de tabela são concedidos usando
db_name.tbl_name
para priv_level, ou apenas usandotbl_name
para especificar uma tabela no banco de dados padrão. A palavra-chaveTABLE
é opcional. Os privilégios de tabela incluem a capacidade de selecionar e alterar dados na tabela. Certos privilégios de tabela podem ser concedidos para colunas individuais.
- Privilégios de coluna são concedidos especificando uma tabela para priv_level e fornecendo uma lista de colunas após o tipo de privilégio. Eles permitem a você controlar exatamente quais colunas numa tabela podem os usuários selecionar e alterar.
- Privilégios de função são concedidos usando
FUNCTION db_name.routine_name
para priv_level, ou apenas usandoFUNCTION routine_name
para especificar uma função no banco de dados padrão.
- Privilégios de procedimento são concedidos usando
PROCEDURE db_name.routine_name
para priv_level, ou usando apenasPROCEDURE routine_name
para especificar um procedimento no banco de dados padrão
O Privilégio USAGE
O privilégio USAGE
não concede privilégios reais. A instrução SHOW GRANTS
mostrará um privilégio global USAGE
para um usuário recém-criado. Você pode usar USAGE
com a instrução GRANT
para alterar opções como GRANT OPTION
e MAX_USER_CONNECTIONS
sem ter que alterar nenhum privilégio de conta.
O privilégio ALL PRIVILEGES
O privilégio ALL PRIVILEGES
concede todos os privilégios disponíveis. Conceder todos os privilégios só afeta o nível de privilégio dado. Por exemplo, conceder todos os privilégios para uma tabela não concede nenhum privilégio no banco de dados ou globalmente.
Usar ALL PRIVILEGES
não concede o privilégio especial GRANT OPTION
.
Você pode usar ALL
em vez de ALL PRIVILEGES
.
O privilégio GRANT OPTION
Use a cláusula WITH GRANT OPTION
para dar aos usuários a capacidade de conceder privilégios a outros usuários no nível de privilégio dado. Os usuários com o privilégio GRANT OPTION
podem conceder somente os privilégios que eles têm. Eles não podem conceder privilégios num nível mais elevado de privilégios do que onde eles têm o privilégio GRANT OPTION
.
O privilégio GRANT OPTION
não pode ser definido para colunas individuais.
Se você usar WITH GRANT OPTION
ao especificar privilégios de coluna, o privilégio GRANT OPTION
será concedido á tabela inteira.
Usar a cláusula WITH GRANT OPTION
é equivalente a definir GRANT OPTION
como um privilégio.
Privilégios Globais
A seguinte tabela lista os privilégios que podem ser concedidos globalmente. Você pode também conceder todos os privilégios do banco de dados, tabelas e funções globalmente. Quando são concedidos globalmente, estes privilégios aplicam para todos os bancos de dados, tabelas, ou funções, incluindo aquelas criadas posteriormente.
Para definir um privilégio global, use *.*
para priv_level.
Privilégio | Descrição |
---|---|
CREATE USER | Cria um usuário usando a instrução CREATE USER , ou implicitamente criando um usuário com a instrução GRANT . |
FILE | |
GRANT OPTION | Concede privilégios globais. Você só pode conceder privilégios que você tem. |
PROCESS | |
RELOAD | |
REPLICATION CLIENT | |
REPLICATION SLAVE | |
SHOW DATABASES | Lista todos os bancos de dados usando a instrução SHOW DATABASES . Sem o privilégio SHOW DATABASES , você ainda pode emitir a instrução SHOW DATABASES , mas isto só ira listar os bancos de dados que contenham tabelas nas quais você tenha privilégios. |
SHUTDOWN | Apaga o servidor usando o comando mysqladmin shutdown. |
SUPER |
Privilégios de Banco de Dados
A seguinte tabela lista os privilégios que podem ser concedidos ao nível do banco de dados. Você pode também conceder todos os privilégios de tabelas e funções ao nível do banco de dados. Os privilégios de tabelas e funções num banco de dados aplicam a todas as tabelas ou funções no banco, incluindo aqueles criados posteriormente.
Para definir um privilégio para um banco de dados, especifique o banco usando db_name.*
para priv_level, ou apenas use *
para especificar o banco de dados padrão.
Privilégio | Descrição |
---|---|
CREATE | Cria um banco de dados usando a instrução CREATE DATABASE , quando o privilégio é concedido a um banco de dados. Você pode conceder o privilégio CREATE para bancos de dados que ainda não existem. Isto também irá conceder o privilégio CREATE para todas as tabelas no banco. |
CREATE ROUTINE | |
CREATE TEMPORARY TABLES | Cria tabelas temporais com a instrução CREATE TEMPORARY TABLE . |
DROP | Exclui um banco de dados usando a instrução DROP DATABASE , quando o privilégio é concedido a um banco de dados. Drop a database using the DROP DATABASE statement, when the privilege is granted for a database. Isto também irá conceder o privilégio DROP para todas as tabelas no banco. |
EVENT | |
GRANT OPTION | Concede privilégios de banco de dados. Você só pode conceder privilégios que você tem. |
LOCK TABLES |
Privilégios de Tabela
Privilégio | Descrição |
---|---|
ALTER | Altera a estrutura de uma tabela existente usando a instrução ALTER TABLE . |
CREATE | Cria uma tabela usando a instrução CREATE TABLE . Você pode conceder o privilégio CREATE em tabelas que ainda não existem. |
CREATE VIEW | Cria uma visão usando a instrução CREATE_VIEW . |
DELETE | Remove linhas de uma tabela usando a instrução DELETE . |
DROP | Exclui uma tabela usando a instrução DROP TABLE ou uma visão usando a instrução DROP VIEW . |
GRANT OPTION | Concede privilégios de tabela. Você só pode conceder privilégios que você tem. |
INDEX | Cria um index numa tabela usando a instrução CREATE INDEX . Sem o privilégio INDEX , você ainda pode criar indexes ao criar uma tabela usando a instrução CREATE TABLE se você tiver o privilégio CREATE , e você pode criar indexes usando a instrução ALTER TABLE , se você tiver o privilégio ALTER . |
INSERT | Adiciona linhas à uma tabela usando a instrução INSERT . O privilégio INSERT também pode ser definido em colunas individuais ; veja Privilégios de coluna abaixo para mais detalhes. |
REFERENCES | |
SELECT | Lê os dados de uma tabela usando a instrução SELECT . O privilégio SELECT também pode ser definido em colunas individuais; veja Privilégios de coluna abaixo para mais detalhes. |
SHOW VIEW | Mostra a instrução CREATE VIEW para criar uma visão usando a instruçãoSHOW CREATE VIEW . |
TRIGGER | |
UPDATE | Atualiza as linhas existentes numa tabela usando a instrução UPDATE . As instruções UPDATE usualmente incluem uma cláusula WHERE para atualizar só certas linhas. Você deve ter privilégios SELECT na tabela ou nas colunas apropriadas para a cláusula WHERE . O privilégio UPDATE pode ser também definido em colunas individuais; veja Privilégios de coluna abaixo para mais detalhes. |
Privilégios de coluna
Alguns privilégios de tabela podem ser definidos para colunas individuais numa tabela. Para usar privilégios de coluna, especifique a tabela explicitamente e forneça uma lista de nomes de coluna após o tipo de privilégio. Por exemplo, a seguinte instrução permitiria ao usuario lêr os nomes e as posições dos empregados, mas não alguma outra informação da mesma tabela, tal como os salários.
GRANT SELECT (name, position) on Employee to 'jeffrey'@'localhost';
Privilégio | Descrição |
---|---|
INSERT (column_list) | Adiciona linhas especificando os valores em colunas usando a instrução INSERT . Se você só tiver privilégios INSERT a nível de coluna, você deve especificar as colunas que você está definindo na instrução INSERT . O resto das colunas será definido com seus valores padrão, ou NULL . |
REFERENCES (column_list) | |
SELECT (column_list) | Lê valores de colunas usando a instrução SELECT . Você não pode acessar ou consultar nenhuma coluna da qual você não tenha privilégios SELECT , incluindo as cláusulas WHERE , ON , GROUP BY , e ORDER BY . |
UPDATE (column_list) | Atualiza valores em colunas de linhas existentes usando a instrução UPDATE . As instruções UPDATE usualmente incluem uma cláusula WHERE para atualizar só certas colunas. Você deve ter privilégios SELECT na tabela ou nas colunas apropriadas para a cláusula WHERE . |
Privilégios de função
Privilégio | Descrição |
---|---|
ALTER ROUTINE | Altera as características de uma função armazenada usando a instrução ALTER FUNCTION . |
EXECUTE | Usa uma função armazenada. Você precisa de privilégios SELECT para qualquer tabela ou coluna acessada pela função. |
GRANT OPTION | Concede privilégios de função. Você só pode conceder privilégios que você tem. |
Privilégios de procedimento
Priviégio | Descrição |
---|---|
ALTER ROUTINE | altera as características de um procedimento armazenado usando a instrução ALTER PROCEDURE . |
EXECUTE | Executa um procedimento armazenado usando a instrução CALL . O privilégio de chamar um procedimento pode permitir a você executar ações que de outra forma você não poderia executar, tais como inserir linhas numa tabela. |
GRANT OPTION | Concede privilégios de procedmiento. Você só pode conceder privilégios que você tem. |