Informações sobre privilégios de usuários são armazenados
nas tabelas user
, db
,
host
, tables_priv
e
columns_priv
no banco de dados chamado
mysql
. O servidor MySQL lê o conteúdo
destas tabelas quando ele inicia e sob as circunstâncias
indicadas em Secção 4.4.3, “Quando as Alterações nos Privilégios tem Efeito”.
Os nomes usados neste manual que se referem-se aos privilégios
fornecidos pelo MySQL são vistos abaixo juntos com o nome da
coluna associada com cada privilégio nas tabelas de permissão
e o contexto em que o privilégio se aplica. Informações
adicionais sobre o significado de cada privilégio pode ser
encontrado em Secção 4.4.1, “A Sintaxe de GRANT
e REVOKE
”.
Privilégio | Coluna | Contexto |
ALTER |
Alter_priv |
tabelas |
DELETE |
Delete_priv |
tabelas |
INDEX |
Index_priv |
tabelas |
INSERT |
Insert_priv |
tabelas |
SELECT |
Select_priv |
tabelas |
UPDATE |
Update_priv |
tabelas |
CREATE |
Create_priv |
banco de dados, tabelas, ou índices |
DROP |
Drop_priv |
banco de dados ou tabelas |
GRANT |
Grant_priv |
banco de dados ou tabelas |
REFERENCES |
References_priv |
banco de dados ou tabelas |
CREATE TEMPORARY TABLES |
Create_tmp_tabela_priv |
administração do servidor |
EXECUTE |
Execute_priv |
administração do servidor |
FILE |
File_priv |
acessa a arquivos no servidor |
LOCK TABLES |
Lock_tabelas_priv |
administração do servidor |
PROCESS |
Process_priv |
administração do servidor |
RELOAD |
Reload_priv |
administração do servidor |
REPLICATION CLIENT |
Repl_client_priv |
administração do servidor |
REPLICATION SLAVE |
Repl_slave_priv |
administração do servidor |
SHOW DATABASES |
Show_db_priv |
administração do servidor |
SHUTDOWN |
Shutdown_priv |
administração do servidor |
SUPER |
Super_priv |
administração do servidor |
Os priviláegios SELECT
,
INSERT
, UPDATE
e
DELETE
permitem realizar operações em
registros nas tabelas existentes em um banco de dados.
Instruções SELECT
necessitam do privilégio
select somente se ele precisar
recuperar registros de uma tabela. Você pode executar certas
instruções SELECT
mesmo sem permissão para
acessar algum dos bancos de dados no servidor. Por exemplo,
você pode usar o cliente mysql
como uma
simples calculadora:
mysql>SELECT 1+1;
mysql>SELECT PI()*2;
O privilégio INDEX
permite a criação ou
remoção de índices.
O privilégio ALTER
permite utilizar
ALTER TABLE
.
Os privilégios CREATE
e
DROP
permitem a criação de novos bancos de
dados e tabelas, ou a remoção de bancos de dados e tabelas
existentes.
Perceba que se for concedido o privilégio
DROP
no banco de dados
mysql
para algum usuário, este usuário pode
remover o banco de dados no qual os privilégios de acesso do
MySQL estão armazenados!
O privilégio GRANT
permite a você fornecer
a outros usuários os privilégios que você mesmo possui.
O privilégio FILE
fornece permissão para
ler e escrever arquivos no servidor usando instruções
LOAD DATA INFILE
e SELECT ... INTO
OUTFILE
. Qualquer usuário que tenha este privilégio
pode ler ou gravar qualquer arquivo que o servidor MySQL possa
ler ou escrever. O usuário também pode ler qualquer arquivo no
diretório de banco de dados atual. O usuário não pode, no
entanto, alterar qualquer arquivo existente.
Os privilégios restantes são usados para operações
administrativas, que são realizadas utilizando o programa
mysqladmin
. A tabela abaixo mostra quais
comandos do mysqladmin
cada privilégio
administrativos permite a execução:
Privilégio | Comandos permitidos |
RELOAD |
reload , refresh ,
flush-privileges ,
flush-hosts ,
flush-logs , and
flush-tables
|
SHUTDOWN |
shutdown |
PROCESS |
processlist |
SUPER |
kill |
O comando reload
diz ao servidor para
recarregar as tabelas de permissões. O comando
refresh
descarrega todas as tabelas e abre e
fecha os arquivos de log. flush-privileges
é
um sinônimo para reload
. Os outros comandos
flush-*
realizam funções similares ao
refresh
mas são mais limitados no escopo e
podem ser preferíveis em alguns casos. Por exemplo, se você
deseja descarregar apenas os arquivos log,
flush-logs
é uma melhor escolha do que
refresh
.
O comando shutdown
desliga o servidor.
O comando processlist
mostra informações
sobre as threads em execução no servidor. O comando
kill
mata threads no servidor. Você sempre
poderá mostrar ou matar suas próprias threads, mas você
precisa do privilégio PROCESS
para mostrar e
privilégio SUPER
para matar threads
iniciadas por outros usuários. See Secção 4.6.7, “Sintaxe de KILL
”.
É uma boa idéia em geral conceder privilégios somente para aqueles usuários que necessitem deles, mas você deve ter muito cuidado ao conceder certos privilégios:
O privilégio grant permite aos usuários repassarem seus privilégios a outros usuários. Dois usuários com diferentes privilégios e com o privilégio grant conseguem combinar seus privilégios.
O privilégio alter pode ser usado para subverter o sistema de privilégios renomeando as tabelas.
O privilégio FILE
pode ser usado com
abuso para ler qualquer arquivo de leitura no servidor em
uma tabela de banco de dados, o conteúdo pode ser acessando
utilizando SELECT
. Isto inclui o
conteúdo de todos os bancos de dados hospedados pelo
servidor!
O privilégio SHUTDOWN
pode ser utilizado
para negar inteiramente serviços para oturos usuários,
terminando o servidor.
O privilégio PROCESS
pode ser usado para
ver o texto das consultas atualmente em execução,
incluindo as consultas que configuram ou alteram senhas.
Privilégios no banco de dados mysql
pode
ser utilizado para alterar senhas e outras informações de
privilégio de acesso. (Senhas são armazenadas
criptografadas, portanto um usuário malicioso não pode
simplesmente lê-las para saber as senhas em texto puro). Se
fosse possível acessar a coluna password do banco
mysql.user
, seria possível logar ao
servidor MySQL como outro usuário. (Com privilégios
suficientes, o mesmo usuário pode trocar a senha por outra
diferente.)
Existema algumas coisas que você não pode fazer com o sistem de privilégios do MySQL:
Você não pode especificar explicitamente que um determinado usuário deve ter acesso negado. Você não pode explicitamente comparar um usuário e depois recusar sua conexão.
Você não pode especificar que um usuário tenha privilégios para criar ou remover tabelas em um banco de dados, mas não possa criar ou remover o banco de dados.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.