Pesquisa de site

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


Introdução

banco de dados de código aberto mais popular do mundo.

Este guia descreve como criar um novo usuário MySQL e conceder a ele as permissões necessárias para executar uma variedade de ações.

Pré-requisitos

Para acompanhar este guia, você precisará de acesso a um banco de dados MySQL. Este guia assume que este banco de dados está instalado em um servidor privado virtual executando o Ubuntu 20.04, embora os princípios descritos devam ser aplicáveis independentemente de como você acessa seu banco de dados.

Se você não tem acesso a um banco de dados MySQL e gostaria de configurar um você mesmo, você pode seguir um de nossos guias sobre como instalar o MySQL. Novamente, independentemente do sistema operacional subjacente do seu servidor, os métodos para criar um novo usuário MySQL e conceder-lhes permissões geralmente serão os mesmos.

Como alternativa, você pode criar um banco de dados MySQL gerenciado por um provedor de nuvem. Para obter detalhes sobre como criar um banco de dados gerenciado da DigitalOcean, consulte a documentação do produto.

Observe que todas as partes dos comandos de exemplo que você precisa alterar ou personalizar serão destacadas assim ao longo deste guia.

Criando um novo usuário

Após a instalação, o MySQL cria uma conta de usuário root que você pode usar para gerenciar seu banco de dados. Esse usuário tem privilégios totais sobre o servidor MySQL, o que significa que tem controle total sobre todos os bancos de dados, tabelas, usuários e assim por diante. Por isso, é melhor evitar usar essa conta fora das funções administrativas. Esta etapa descreve como usar o usuário root do MySQL para criar uma nova conta de usuário e conceder privilégios a ela.

Em sistemas Ubuntu executando MySQL 5.7 (e versões posteriores), o usuário root do MySQL é configurado para autenticar usando o plug-in auth_socket por padrão, em vez de uma senha. Este plug-in requer que o nome do usuário do sistema operacional que chama o cliente MySQL corresponda ao nome do usuário MySQL especificado no comando. Isso significa que você precisa preceder o comando mysql com sudo para invocá-lo com os privilégios do usuário root do Ubuntu para obter acesso ao usuário root do MySQL:

  1. sudo mysql

Observação: se o usuário root do MySQL estiver configurado para autenticar com uma senha, você precisará usar um comando diferente para acessar o shell do MySQL. O seguinte executará seu cliente MySQL com privilégios de usuário regulares e você só obterá privilégios de administrador no banco de dados autenticando com a senha correta:

  1. mysql -u root -p

Depois de ter acesso ao prompt do MySQL, você pode criar um novo usuário com uma instrução CREATE USER. Estes seguem esta sintaxe geral:

  1. CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

Depois de CREATE USER, você especifica um nome de usuário. Isso é imediatamente seguido por um sinal @ e, em seguida, o nome do host a partir do qual esse usuário se conectará. Se você planeja acessar este usuário apenas localmente de seu servidor Ubuntu, você pode especificar localhost. Colocar o nome de usuário e o host entre aspas simples nem sempre é necessário, mas isso pode ajudar a evitar erros.

Você tem várias opções quando se trata de escolher o plug-in de autenticação do usuário. O plug-in auth_socket mencionado anteriormente pode ser conveniente, pois fornece segurança forte sem exigir que usuários válidos insiram uma senha para acessar o banco de dados. Mas também evita conexões remotas, o que pode complicar as coisas quando programas externos precisam interagir com o MySQL.

Como alternativa, você pode deixar de fora a parte WITH authentication_plugin da sintaxe inteiramente para que o usuário autentique com o plug-in padrão do MySQL, caching_sha2_password. A documentação do MySQL recomenda este plug-in para usuários que desejam fazer login com uma senha devido aos seus fortes recursos de segurança.

Execute o seguinte comando para criar um usuário que autentique com caching_sha2_password. Certifique-se de alterar sammy para seu nome de usuário preferido e password para uma senha forte de sua escolha:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Nota: Há um problema conhecido com algumas versões do PHP que causa problemas com caching_sha2_password. Se você planeja usar este banco de dados com um aplicativo PHP — phpMyAdmin, por exemplo — você pode querer criar um usuário que irá autenticar com o plug-in mysql_native_password mais antigo, embora ainda seguro:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Se você não tem certeza, você sempre pode criar um usuário que autentique com caching_sha2_plugin e então ALTER mais tarde com este comando:

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Depois de criar seu novo usuário, você pode conceder a ele os privilégios apropriados.

Concedendo permissões a um usuário

A sintaxe geral para conceder privilégios de usuário é a seguinte:

  1. GRANT PRIVILEGE ON database.table TO 'username'@'host';

O valor PRIVILEGE neste exemplo de sintaxe define quais ações o usuário pode executar no banco de dados especificado e < código>tabela. Você pode conceder vários privilégios ao mesmo usuário em um comando, separando cada um com uma vírgula. Você também pode conceder privilégios de usuário globalmente inserindo asteriscos (*) no lugar do banco de dados e dos nomes das tabelas. No SQL, os asteriscos são caracteres especiais usados para representar todos os bancos de dados ou tabelas.

Para ilustrar, o comando a seguir concede a um usuário privilégios globais para CREATE, ALTER e DROP bancos de dados, tabelas e usuários, bem como o power para INSERT, UPDATE e DELETE dados de qualquer tabela no servidor. Ele também concede ao usuário a capacidade de consultar dados com SELECT, criar chaves estrangeiras com a palavra-chave REFERENCES e executar operações FLUSH com o RELOAD. No entanto, você só deve conceder aos usuários as permissões de que precisam, portanto, sinta-se à vontade para ajustar os privilégios de seu próprio usuário conforme necessário.

Você pode encontrar a lista completa de privilégios disponíveis na documentação oficial do MySQL.

Execute esta instrução GRANT, substituindo sammy pelo seu próprio nome de usuário do MySQL, para conceder estes privilégios ao seu usuário:

  1. GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Observe que esta instrução também inclui WITH GRANT OPTION. Isso permitirá que seu usuário MySQL conceda quaisquer permissões que tenha a outros usuários no sistema.

Aviso: Alguns usuários podem querer conceder ao usuário do MySQL o privilégio ALL PRIVILEGES, que fornecerá a eles amplos privilégios de superusuário semelhantes aos privilégios do usuário root, assim:

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Esses privilégios amplos não devem ser concedidos levianamente, pois qualquer pessoa com acesso a esse usuário do MySQL terá controle total sobre todos os bancos de dados no servidor.

Muitos guias sugerem executar o comando FLUSH PRIVILEGES imediatamente após uma instrução CREATE USER ou GRANT para recarregar as tabelas de concessão para garantir que os novos privilégios são efetivados:

  1. FLUSH PRIVILEGES;

No entanto, de acordo com a documentação oficial do MySQL, quando você modifica as tabelas de concessão indiretamente com uma instrução de gerenciamento de conta como GRANT, o banco de dados irá recarregar as tabelas de concessão imediatamente na memória, o que significa que FLUSH PRIVILEGES O comando não é necessário em nosso caso. Por outro lado, executá-lo não terá nenhum efeito negativo no sistema.

Se você precisar revogar uma permissão, a estrutura é quase idêntica à de concedê-la:

  1. REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';

Observe que ao revogar permissões, a sintaxe requer que você use FROM, em vez de TO que você usou ao conceder as permissões.

Você pode revisar as permissões atuais de um usuário executando o comando SHOW GRANTS:

  1. SHOW GRANTS FOR 'username'@'host';

Assim como você pode deletar bancos de dados com DROP, você pode usar DROP para deletar um usuário:

  1. DROP USER 'username'@'localhost';

Depois de criar seu usuário MySQL e conceder privilégios a ele, você pode sair do cliente MySQL:

  1. exit

No futuro, para fazer login como seu novo usuário MySQL, você usaria um comando como o seguinte:

  1. mysql -u sammy -p

O sinalizador -p fará com que o cliente MySQL solicite sua senha de usuário do MySQL para autenticar.

Conclusão

Seguindo este tutorial, você aprendeu como adicionar novos usuários e conceder a eles várias permissões em um banco de dados MySQL. A partir daqui, você pode continuar explorando e experimentando diferentes configurações de permissões para seu usuário MySQL, ou você pode querer aprender mais sobre algumas configurações MySQL de nível superior.

Para obter mais informações sobre os fundamentos do MySQL, você pode conferir os seguintes tutoriais:

  • Como criar e gerenciar bancos de dados em MySQL e MariaDB em um servidor em nuvem
  • Como configurar a replicação no MySQL
  • Como configurar a replicação do grupo MySQL no Ubuntu 20.04