🛡️ Segurança NĂvel Pro: Gerenciando Usuários no MySQL
Nunca use o usuário root em sua aplicação PHP. Se o seu site for comprometido, o invasor terá acesso a todo o seu servidor de banco de dados.
PrincĂpio do Menor PrivilĂ©gio: DĂŞ Ă sua aplicação apenas as permissões estritamente necessárias para ela funcionar.
1. Script de Criação do Banco e Tabela
Execute este script no seu banco de dados para preparar o ambiente:
SQL
-- 1. Criar o Banco de Dados
CREATE DATABASE IF NOT EXISTS sistema_exemplo;
USE sistema_exemplo;
-- 2. Criar a Tabela de Usuários
CREATE TABLE IF NOT EXISTS usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nome_usuario VARCHAR(50) NOT NULL UNIQUE,
senha_hash VARCHAR(255) NOT NULL,
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
2. Criando o Usuário Restrito
Agora, vamos criar um usuário que sĂł consegue mexer nesta tabela especĂfica, sem poderes de administrador:
SQL
-- Criar o usuário da aplicação
CREATE USER 'app_usuario'@'localhost' IDENTIFIED BY 'senha_dificil_123';
-- Dar permissões apenas de leitura, inserção e edição na tabela 'usuarios'
GRANT SELECT, INSERT, UPDATE ON sistema_exemplo.usuarios TO 'app_usuario'@'localhost';
-- Atualizar os privilégios
FLUSH PRIVILEGES;
3. Atualizando a ConexĂŁo no PHP
No seu arquivo cadastro.php, altere as credenciais de conexão para utilizar o novo usuário:
PHP
// Altere de 'root' para o novo usuário restrito
$user = 'app_usuario';
$pass = 'senha_dificil_123';
$pdo = new PDO("mysql:host=localhost;dbname=sistema_exemplo", $user, $pass);
👏
Ótimo, agora temos segurança total!
Você protegeu as senhas com Bcrypt e o banco de dados com Privilégios Restritos.
Agora imaginem que um hacker consiga acesso ao seu arquivo PHP. Ele verá a senha senha_dificil_123. Se ele tentar deletar o banco de dados inteiro usando essa senha, o MySQL vai dizer: Acesso Negado. Isso é segurança em camadas!"
📝 ExercĂcios Práticos: Desafio de Segurança MySQL
đź› ️ Hora da Prática: Desafios de Segurança
Agora que vocĂŞ aprendeu a teoria, tente resolver estes 3 desafios no seu ambiente local:
Desafio 1: O Teste de IntrusĂŁo
- Tente executar um comando DROP TABLE usuarios; usando a conexĂŁo do
app_usuariono seu cĂłdigo PHP. - Pergunta: O que aconteceu? O MySQL permitiu a exclusĂŁo? Por quĂŞ?
Desafio 2: Ajuste de Permissões
- Sua aplicação agora precisa de um sistema de "Excluir Conta". O
app_usuarioatual não tem essa permissão. - Tarefa: Escreva o comando SQL que adiciona apenas o privilégio de DELETE para o
app_usuariona tabela de usuários.
Desafio 3: Auditoria de Senhas
- Abra o seu phpMyAdmin e observe a coluna
senha_hash. - Tarefa: Tente descobrir qual Ă© a senha original apenas olhando para o hash.
Dica: Se você usou Bcrypt, verá algo como$2y$10$.... Isso mostra por que o hash é seguro!
No Desafio 1, vocĂŞ deve receber um erro de "Access denied".
Isso Ă© gratificante para ver que, mesmo que o cĂłdigo seja "sequestrado", o banco de dados Ă© a Ăşltima e mais forte linha de defesa.
No Desafio 2.
đź—ť️ Gabarito Rápido para consulta:
-- Resposta do Desafio 2:
GRANT DELETE ON sistema_exemplo.usuarios TO 'app_usuario'@'localhost';
FLUSH PRIVILEGES;
Veja o Infográfio Abaixo:
É a representação visual de informações, dados ou conhecimentos, combinando o que aprendemos nesta aula.

Nenhum comentário:
Postar um comentário