Tutorial

Como criar um novo usuário e atribuir permissões no MySQL

MySQL

Introdução

O MySQL é um software de gerenciamento de banco de dados de código aberto que ajuda os usuários a armazenar, organizar e posteriormente recuperar dados. Ele possui diversas opções para garantir a usuários específicos permissões dentro de tabelas e bancos de dados — este tutorial irá oferecer uma visão geral de algumas das muitas opções.

O que os Destaques significam

Ao longo deste tutorial, toda linha que o usuário precisar inserir ou personalizar estará destacada! O restante pode ser em grande parte simplesmente copiado e colado.

Como criar um novo usuário

Na parte 1 do Tutorial do MySQL, fizemos toda a edição no MySQL como o usuário root, com acesso total a todos os bancos de dados. No entanto, em casos em que mais restrições possam ser necessárias, existem maneiras de criar usuários com permissões personalizadas.

Vamos começar criando um novo usuário dentro do shell do MySQL:

  • CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Nota: ao adicionar usuários dentro do shell do MySQL neste tutorial, vamos especificar o host do usuário como sendo localhost e não o endereço IP do servidor. localhost é um nome de host que significa “este computador”, e o MySQL trata esse nome de host em particular de forma especial: quando um usuário com esse host entra no MySQL, ele irá tentar se conectar ao servidor local usando um arquivo soquete do Unix. Dessa forma, o localhost é normalmente usado quando o plano é conectar-se via protocolo SSH em seu servidor ou quando você estiver executando o cliente mysql local para se conectar ao servidor MySQL local.

Neste ponto, newuser não possui permissões para fazer nada com os bancos de dados. Na verdade, mesmo se newuser tentar fazer login (com a senha password), ele não será capaz de chegar ao shell do MySQL.

Portanto, a primeira coisa a ser feita é fornecer ao usuário o acesso às informações que eles irão precisar.

  • GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Os asteriscos neste comando referem-se ao banco de dados e tabela (respectivamente) que ele pode acessar — este comando específico permite que o usuário leia, edite, execute e realize todas as tarefas em todos os bancos de dados e tabelas.

Observe que, nesse exemplo, estamos concedendo ao newuser acesso root completo a tudo em nosso banco de dados. Embora isso seja útil para explicar alguns conceitos do MySQL, pode ser impraticável para a maioria dos casos de uso e pode colocar a segurança do seu banco de dados em grande risco.

Depois de finalizar com as permissões que deseja configurar para seus novos usuários, sempre se certifique de recarregar todos os privilégios.

  • FLUSH PRIVILEGES;

Suas alterações estarão em vigor.

Como atribuir permissões de usuário distintas

Aqui está uma lista curta de outras permissões comuns possíveis das quais os usuários podem usufruir.

  • ALL PRIVILEGES — como vimos anteriormente, isso garante ao usuário do MySQL acesso completo a um banco de dados (ou, se nenhum banco de dados for selecionado, acesso global a todo o sistema)
  • CREATE — permite criar novas tabelas ou bancos de dados
  • DROP — permite deletar tabelas ou bancos de dados
  • DELETE — permite excluir linhas de tabelas
  • INSERT — permite inserir linhas em tabelas
  • SELECT - permite usar o comando SELECT para ler os bancos de dados
  • UPDATE — permite atualizar linhas de tabelas
  • GRANT OPTION — permite conceder ou remover privilégios de outros usuários

De forma a fornecer uma permissão a um usuário específico, utilize este framework:

  • GRANT type_of_permission ON database_name.table_name TO 'username'@'localhost';

Se quiser conceder-lhe acesso a todos os bancos de dados ou tabelas, certifique-se de colocar um asterisco (*) no lugar do nome do banco de dados ou nome da tabela.

Toda vez que você atualizar ou alterar uma permissão, certifique-se de usar o comando Flush Privileges.

Se precisar revogar uma permissão, a estrutura é quase idêntica àquela da concessão:

  • REVOKE type_of_permission ON database_name.table_name FROM 'username'@'localhost';

Observe que ao revogar permissões, a sintaxe requer a utilização do FROM ao invés do TO, que usamos ao conceder permissões.

É possível revisar as permissões atuais de um usuário executando o seguinte:

  • SHOW GRANTS FOR 'username'@'localhost';

Da mesma forma como é possível deletar bancos de dados com DROP, também é possível usar o DROP para excluir um usuário completamente:

  • DROP USER 'username'@'localhost';

Para testar seu novo usuário, faça o logoff digitando:

  • quit

e faça login novamente com este comando no terminal:

  • mysql -u [username] -p

Conclusão

Depois de completar este tutorial, você deve ter uma ideia de como adicionar novos usuários e conceder-lhes uma variedade de permissões em um banco de dados do MySQL. A partir daqui, se quiser, continue explorando e experimentando diferentes configurações de permissões para seu banco de dados, ou aprenda mais sobre algumas configurações do MySQL de nível superior.

Para mais informações sobre os princípios básicos do MySQL, recomendados a leitura dos seguintes tutoriais:

Creative Commons License