Privilégios Fornecidos pelo MariaDB
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 MariaDB
. O servidor MariaDB lê o conteúdo destas tabelas quando ele inicia e sob as circunstâncias indicadas em "Quando as Alterações nos Privilégios tem Efeito".
Os nomes usados neste manual que se referem-se aos privilégios fornecidos pelo MariaDB 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 "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 MariaDB
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 MariaDB
para algum usuário, este usuário pode remover o banco de dados no qual os privilégios de acesso do MariaDB 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 MariaDB 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. Leia "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 utilizandoSELECT
. 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
MariaDB
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 bancomysql.user
, seria possível logar ao servidor MariaDB 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 MariaDB:
- 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.