Você está na página 1de 12

Segurança em BD

LABORATÓRIO DE BANCO DE DADOS


Principais ameças

 Acesso indevido: O invasor consegue acessar dados internos de um


banco de dados sem a devida autorização.

 Atualização indevida: O invasor consegue alterar dados


do banco sem ter autorização para tal.

 Destruição de dados: O invasor consegue remover parcialmente o


totalmente os dados de um banco.
Principais medidas de segurança

 Criptografia de dados: codificação total do banco de dados ou


parcial dos dados sensíveis.
 Inspeção de código SQL: Evitar "sql injection". Verificar código sql
enviado por aplicativos ao banco de dados.
 Controle de acesso: Determinar quais usuários podem ter acesso ao
banco, em quais recursos e o que eles podem fazer (consultar,
remover, atualizar, ...).
 Backup: Cópia de segurança do banco de dados. Pode ser total
ou incremental. Necessita de políticas e rotinas bem definidas.
Criptografia

 Alguns SGBD possuem recursos para criptografar todos os dados de um


BD.
 Criptografia total pode consumir recursos de processamento em
demasia.
 Muitos BD têm funções de criptografia para dados sensíveis.
 Criptografar senhas, números de cartões, etc.
 Tipos de funções criptográficas:
 Unidirecionais: Somente criptografam, não há decodificação. Geralmente
usado para senhas. Não necessitam de chave criptográfica.
 Bi-direcionais: Há a codificação e depois a decodificação. Necessitam de
chave criptográfica.
Criptografia no MYSQL

 Funções unidirecionais
 PASSWORD (obsoleto)
 MD5 (vulnerabilidade conhecida)
 SHA1 (vulnerabilidade conhecida)
 SHA2
 Funções bi-direcionais
 AES_ENCRYPT
 AES_DECRYPT
 O uso de funções bi-direcionais traz um novo problema: Onde
armazenar a chave com segurança.
Armazenando senhas

 Inserindo um novo usuário no banco de dados:

INSERT INTO usuario VALUES (1, "Fulano", SHA2("senhaCadastro", 256) );

 Verificando usuário e senha no login:

SELECT * FROM usuario


WHERE nmUsuario="Fulano" AND senha = SHA2("senhaLogin", 256);

 Para funcionar, a "senhaCadastro" e a "senhaLogin" devem ser iguais.


Armazenando outras informações

 Armazenando um número de cartão de crédito.

INSERT INTO formaPagamento


VALUES (123, AES_ENCRYPT("5505006612344321", "chave");

 Recuperando um número de cartão de crédito.

SELECT AES_DECRYPT(numCartao, "chave")


FROM formaPagamento WHERE cdCliente = 123;
Inspeção de código SQL
 Seja o trecho de código PHP:
$idUsuario = $_GET["idUsuario"];
$sql = "SELECT * FROM usuario WHERE idUsuario = " . $idUsuario;

$resultado = mysqli -> query ($sql);

 Suponha que no campo "idUsuario" do formulário, o usuário tenha digitado o texto


1 OR "a" = "a"

 Quando combinamos com o sql do código acima:


SELECT * FROM usuario WHERE idUsuario = 1 OR "a"="a"

 Todas as tuplas da tabela usuario serão retornadas e não apenas do usuário 1.


Evitando SQL Injection

 Evitar montar consultas SQL com concatenação de textos.


 Ao invés disso, utilizar consultas com parâmetros:

$idUsuario = $_GET["idUsuario"];
$sql = "SELECT * FROM usuario WHERE idUsuario = :idusu";
$comando = $mysqli -> prepare($sql);
$comando -> bindparam("idusu", $idUsuario, PDO::PARAM_INT);
$comando -> execute();
Controle de acesso

 Pontos chave:

Criar usuários (CREATE USER usuário IDENTIFIED BY senha)

Remover usuários (DROP USER usuário)

Conceder permissões (GRANT permisão ON item(ns) TO usuario

Remover permissões (REVOKE permissão ON item(ns) FROM usuario


EXEMPLOS

 CREATE USER 'marcos'@'localhost' IDENTIFIED BY '123456';

 DROP USER 'marcos'@'localhost';

 GRANT select ON prova1.* TO 'marcos'@'localhost';

 REVOKE select ON prova1.* FROM 'marcos'@'localhost';


BACKUP
 No MySQL usamos o comando mysqldump para gerar scripts de backup para
bancos de dados.
 Usos mais comuns:
C:\xampp\mysql\bin> mysqldump –u root prova1
C:\xampp\mysql\bin> mysqldump –u root –all-databases
 O resultado é um texto que pode ser armazenado em arquivo via
redirecionamento de saída.
 Exemplo:
 C:\xampp\mysql\bin> mysqldump –u root prova1 > backup_prova1.sql
 É importante automatizar rotinas de backup com scripts.
 É importante seguir as demais regras de backups (salvar em outro computador
fisicamente distante, salvar em meio de gravação, etc.)
 É importante o teste periódico dos backups.

Você também pode gostar