Idioma
Categoria
Pesquisar

Manipulando usuários e privilégios no mysql

Como adicionar, remover, consultar usuários atívos e seus privilégios, como criar senhas com expiração ou login sem senha. Veja como definir permissões com banco de dados e tabelas

Em Banco de dados Por Rudi Drusian Lange
Publicado em
Última atualização

Como consultar os usuários ativos, adicionar novos e definir suas senhas ou como criar um login sem senha. Estabeleça uma data de expiração para a senha ou para expirar no primeiro acesso. Veja como remover usuários, trocar a senha do usuário logado ou qualquer outro cadastrado. Mude os acessos atuais e defina permissões específicas para cada usuário com cada banco de dados e tabela. Remova permissões e consulte a tabela de privilégios disponíveis.

Comandos MySQL retirados da versão 8.0 do manual.

Adicionar usuário

Adicionar um usuário pode ser feito através do comando create user ou diretamente com o comando grant que será visto mais adiante.

Mysql

# Cria usuário andrei com a 'minha_senha'
CREATE USER 'andrei'@'localhost'
  IDENTIFIED BY 'minha_senha';

# Cria usuário sem senha:
CREATE USER 'andrei'@'localhost';

# Senha expira no primeiro acesso exigindo uma nova
CREATE USER 'andrei'@'localhost'
  IDENTIFIED BY 'nova_senha' PASSWORD EXPIRE;

# Utiliza o plugin de autenticação caching_sha2_password,
# define que a senha expira a cada 180 dias,
# habilita bloqueio de conta por 2 dias ao atingir
# 3 tentativas de login com senha incorreta
CREATE USER 'andrei'@'localhost'
IDENTIFIED WITH caching_sha2_password BY 'minha_senha'
  PASSWORD EXPIRE INTERVAL 180 DAY
  FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;

Nunca utilize usuário sem senha em ambiente de produção! Somente para facilidade de acesso em ambiente controlados.

Nos exemplos deste artigo sempre que manipular usuários será considerado o contexto de maquina local, é isso que o @localhost faz. Par garantir o acesso remoto ao usuário substitua o localhost pelo IP desejado (andrei@192.168.0.55).

Remover usuário

Mysql

DROP USER 'andrei'@'localhost';

Listar usuários

Como exibir informações dos usuários, veja mais a frente sobre as permissões.

Mysql

# Todos usuários
SELECT user FROM mysql.user;

# Todos os usuários sem repetir
SELECT DISTINCT User FROM mysql.user;

# Usuários e os hosts com os quais podem se conectar
SELECT user,host FROM mysql.user;

# Usuários, os hosts e as senhas criptografadas
SELECT user,host,password FROM mysql.user;

Trocar a senha

Mysql

# Troca a senha para o usuário logado
SET PASSWORD = PASSWORD('nova_senha');

# Muda a senha de um usuário específico
SET PASSWORD FOR 'andrei'@'localhost' = PASSWORD('nova_senha');

Listar privilégios

Use show grants para verificar as permissões.

Title

# Exibe privilégios de um usuário
SHOW GRANTS FOR 'andrei'@'localhost';

# Exibe os privilégios do usuário atualmente logado
SHOW GRANTS;

Conceder privilégios

O comando grant é responsável pela administração dos privilégios dados aos usuários.

Mysql

# Cria o usuário andrei com a 'minha senha' e
# concede acesso total ao banco de dados bd_loja
GRANT ALL ON bd_loja.* TO 'andrei'@'localhost' IDENTIFIED BY 'minha_senha'; # Concede privilégio total para andrei
# em todas as tabelas do banco de dados
# bd_loja utilizando sua senha atual
GRANT ALL ON bd_loja.* TO 'andrei'@'localhost'; # Concede somente SELECT para andrei na
# tabela clientes do banco de dados bd_loja
GRANT SELECT ON bd_loja.clientes TO 'andrei'@'localhost';

Remover privilégios

O comando revoke remove as permissões do usuário.

Mysql

# Remove o privilégio INSERT em todos os bancos
# de dados e tabelas para o usuário andrei
REVOKE INSERT ON *.* FROM 'andrei'@'localhost'; # Remove o privilégio DELETE no banco de dados
# bd_loja e suas tabelas para o usuário andrei
REVOKE DELETE ON bd_loja.* FROM 'andrei'@'localhost'; # Remove todos os privilégios do usuário andrei REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'andrei'@'localhost';

Lista de privilégios

Lista de alguns dos privilégios que podem ser utilizados com o comando grant e revoke.

Privilégio

Coluna

Contexto

Create_priv
databases, tables, or indexes
Drop_priv
databases, tables, or views
Grant_priv
databases, tables, or stored routines
Lock_tables_priv
databases
References_priv
databases or tables
Event_priv
databases
Alter_priv
tables
Delete_priv
tables
Index_priv
tables
Insert_priv
tables or columns
Select_priv
tables or columns
Update_priv
tables or columns
Create_tmp_table_priv
tables
Trigger_priv
tables
Create_view_priv
views
Show_view_priv
views
Alter_routine_priv
stored routines
Create_routine_priv
stored routines
Execute_priv
stored routines
File_priv
file access on server host
Create_tablespace_priv
server administration
Create_user_priv
server administration
Process_priv
server administration
see proxies_priv table
server administration
Reload_priv
server administration
Repl_client_priv
server administration
Repl_slave_priv
server administration
Show_db_priv
server administration
Shutdown_priv
server administration
Super_priv
server administration
 
server administration
 
server administration

Veja todos os privilégios disponíveis aqui.

Referências