sábado, 28 de março de 2026

Segurança em Banco de Dados - Aula 10đź—ť️PrivilĂ©gios de Usuário

Segurança Avançada: Privilégios de Usuário

🛡️ 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 Desafios de Segurança: SQL e Privilégios

đź› ️ 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_usuario no 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_usuario atual nĂŁo tem essa permissĂŁo.
  • Tarefa: Escreva o comando SQL que adiciona apenas o privilĂ©gio de DELETE para o app_usuario na 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