Introdução
Na administração profissional de sistemas, usar o usuário root para conexões rotineiras de aplicações representa um grande risco de segurança. Se um invasor comprometer uma aplicação que usa a conta root, ele terá controle total sobre todos os bancos de dados do servidor.
A prática recomendada determina que cada aplicação tenha seu próprio usuário dedicado, com permissões restritas ao seu próprio banco de dados dedicado.
Esse é o equivalente, no banco de dados, à separação de identidades de aplicações no nível do sistema operacional. O controle de acesso deve refletir a finalidade de cada identidade, e não apenas a conveniência.
Essa é a versão, no banco de dados, do princípio do menor privilégio que você já viu no gerenciamento de usuários do Linux. Se a conta de uma aplicação for comprometida, as permissões restritas reduzem o impacto do incidente.
Neste laboratório, você protegerá seu ambiente seguindo estes procedimentos padrão:
- Crie um novo banco de dados para uma aplicação hipotética.
- Crie uma conta de usuário específica para essa aplicação.
- Conceda ao usuário permissões somente para seu banco de dados específico.
- Verifique a configuração fazendo login como o novo usuário.
Criar um novo banco de dados
Primeiro, você precisa fazer login no servidor MySQL com privilégios administrativos para criar o novo banco de dados.
Abra o terminal e execute o comando a seguir para acessar o shell do MySQL:
sudo mysql
Observação: esse comando usa
sudopara autenticar como root por meio do socket do sistema. Se for solicitada uma senha que você não conhece, tentemysql -u root -p.
Quando o prompt mysql> aparecer, você estará pronto para executar comandos SQL.
Neste momento, você está conectado como um usuário administrativo do banco de dados, pois criar bancos de dados é uma operação privilegiada. Normalmente, contas de aplicações não têm esse nível de controle.
Crie um novo banco de dados chamado app_db. Ele será o contêiner dos dados da nossa aplicação.
CREATE DATABASE app_db;
Se a operação for bem-sucedida, o MySQL responderá com Query OK. Você pode verificar se o banco de dados existe listando todos os bancos de dados:
SHOW DATABASES;
Você deverá ver app_db na lista.
Criar um usuário dedicado
Agora que temos um banco de dados, precisamos de um usuário para gerenciá-lo. Criaremos um usuário chamado app_user.
No mesmo shell do MySQL, execute o comando a seguir:
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'password';
Entendendo o comando:
'app_user': o nome de usuário.'@'localhost': restringe o usuário a conexões originadas somente neste servidor (uma medida de segurança).IDENTIFIED BY 'password': define a senha como"password".
Neste momento, o usuário existe, mas não tem permissões. Ele pode fazer login, mas não pode ler nem gravar dados.
Este é um modelo de segurança importante: identidade e privilégio são conceitos separados. Criar uma conta não concede automaticamente a capacidade de usar todos os objetos do banco de dados.
Você pode verificar se o usuário existe consultando a tabela de usuários do sistema:
SELECT User, Host FROM mysql.user WHERE User = 'app_user';
Conceder permissões
Agora precisamos conceder explicitamente ao app_user permissão para usar o app_db.
Queremos conceder ao usuário todos os direitos (ler, gravar e modificar tabelas) no app_db.
Execute este comando no shell do MySQL:
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
Entendendo a sintaxe:
GRANT ALL PRIVILEGES: concede direitos de acesso completos.ON app_db.*: aplica esses direitos ao banco de dadosapp_dbe a*(todas as tabelas dentro dele).TO 'app_user'@'localhost': especifica quem receberá esses direitos.
O padrão database.* é importante porque as permissões podem ser definidas para diferentes escopos. No MySQL/MariaDB, os direitos podem ser concedidos globalmente, por banco de dados, por tabela e, em alguns casos, com escopo ainda mais restrito.
Isso garante que o app_user tenha poder dentro do app_db, mas não tenha poder em nenhum outro lugar.
Para confirmar se as permissões foram atribuídas corretamente:
SHOW GRANTS FOR 'app_user'@'localhost';
Verificar o acesso do usuário
Para garantir que tudo funciona conforme o esperado, sairemos da conta root e tentaremos fazer login como o novo usuário.
Primeiro, encerre a sessão root:
EXIT;
Agora, de volta ao terminal do Linux, faça login como app_user:
mysql -u app_user -p
Quando solicitado, informe a senha password.
Depois de fazer login, verifique quais bancos de dados você consegue visualizar:
SHOW DATABASES;
O que verificar:
- Você deverá ver
app_dbeinformation_schema. - Você não deverá ver
mysqlnemsys.
Isso confirma que as configurações de permissão estão funcionando corretamente: o usuário vê somente aquilo que tem autorização para acessar.
Essa etapa de verificação é fundamental no controle de acesso. Não basta executar uma instrução GRANT; você deve confirmar que a visão resultante do sistema corresponde ao modelo de menor privilégio planejado.
Mude para o seu banco de dados para concluir o laboratório:
USE app_db;
EXIT;
Resumo
Neste laboratório, você implementou com sucesso um modelo seguro de acesso a bancos de dados. Você aprendeu a:
- Criar um novo banco de dados (
app_db). - Criar um usuário dedicado (
app_user). - Conceder privilégios específicos usando o comando
GRANT. - Verificar se os controles de acesso estão funcionando conforme planejado.
O modelo de menor privilégio é um dos fundamentos da segurança de bancos de dados e deve ser usado em todas as aplicações que você implantar.



