SlideShare une entreprise Scribd logo
1  sur  85
Télécharger pour lire hors ligne
Segurança em
       Banco de Dados




    Arthur Henrique Ataíde de Azevedo

    Edkarla Andrade de Castro

    Paulo Roberto de Lima Serrão
Segurança em Banco de
              Dados

    Aspectos Gerais de segurança;


    Evitar violação de consistência dos dados;

    Segurança de acesso(usuários e aplicações);


    Segurança contra falhas(recovery);


    Manutenção de histórico de atualizações   (Log) e

    backups do BD;
Segurança em Banco de
               Dados

    Segurança com Banco de dados livres (mysql);


    Segurança com Banco de dados proprietários
    (Oracle);


    Consequencias de não ter um ambiente seguro;


    Recomendações para um ambiente seguro;


    Referências.
Aspectos Gerais de Segurança

  Porque devemos ter segurança em um
   Banco de Dados?
 Possuir informação hoje é ganhar agilidade, competitividade,
 previsibilidade, dinamismo, portanto, possuir informação é o mesmo
 que possuir um diferencial, uma vantagem competitiva.


 Uma informação útil pode ser usada a favor ou contra você ou sua
 empresa. Por isso é importante que se possua informações corretas
 e uma forma eficiente de protegê-las, já que se algum dado crítico for
 alterado, destruído, ou divulgado sem autorização pode acarretar em
 prejuízos tanto para a empresa ou instituição, como para seus
 clientes ou usuários.
Aspectos Gerais de Segurança
Os princípios da segurança da informação
 são:
  
      confidencialidade:
      garantia de que a informação é acessível somente por pessoas
      autorizadas a terem acesso;
  
      integridade:
      a informação é alterada somente pelas pessoas autorizadas;
  
      disponibilidade:
      garantia de que as pessoas autorizadas obtenham acesso à
      informação e aos ativos correspondentes sempre que
      necessário.
Dessa forma, garantir a segurança da informação é fazer com que as
informações permaneçam confidenciais, integras e disponíveis para a
pessoa certa na hora certa.
Aspectos Gerais de Segurança
De acordo com SÊMOLA (2003, p.12), os principais
motivos para se proteger uma informação são :
o seu valor,
o impacto de sua ausência,
o impacto resultante de seu uso por terceiros,
a importância de sua existência e a relação de dependência com a sua
atividade, e
a informação deve ser protegida em todo o seu ciclo de vida, desde sua
criação, manuseio, armazenamento transporte e descarte.



Os SGBDs para garantir a segurança das informações,
devem      possuir     controles    de     redundancia,
concorrencia e a capacidade de manter os dados
integros, aplicando as restrições de integridade.
Controle de Redundância

    A redundância é caracterizada pela presença de um
    elemento de informação duplicado.

    Sistemas de banco de dados devem ter capacidade de
    garantir que os dados não sejam redundantes.

    Esse controle é usualmente conhecido como integridade
    referencial.

    O controle de redundância não permite incluir dois registros
    com a mesma chave primária e excluir um registro que
    possua relacionamento com outras tabelas (chave
    estrangeira).

     Com isto, o controle de redundância evita a inconsistência de
    dados.

    Este padrão de integridade é o fundamento do modelo
    relacional, por isso é necessário que o banco de dados tenha
    a capacidade de gerenciar o controle de redundância.
Controle de Concorrência

    É um esquema usado para garantir que as transações são
    executadas de forma segura.

    Uma das qualidades dos sistemas desenvolvidos é a multiprogramação que
    permite a execução de diversas transações visando o compartilhamento do
    processador. Nesse ambiente multiprogramado diversas transações podem
    executar concorrentemente. Por isso os sistemas precisam controlar a
    interação entre transações concorrentes com o objetivo de prevenir a violação
    da consistência do banco de dados.

    Esse controle é feito por um conjunto de mecanismos definidos como
    esquemas de controle de concorrência.

    Quando as transações são executadas concorrentemente a
    consistência do banco pode ser violada mesmo que cada transação
    individual esteja correta.

    Cabe ressaltar que nesse ambiente é importante o conceito da seriabilidade. É
    necessário que qualquer escalonamento produzido ao se processar um
    conjunto de transações concorrentemente seja computacionalmente
    equivalente a um escalonamento produzindo executando essas transações
    serialmente em alguma ordem.

    Diz-se que um sistema que garante esta propriedade assegura a
    seriabilidade.
Controle de Concorrência

    Os escalonamentos podem ser seriais e não-seriais.

    Escalonamentos seriais consistem de uma seqüência de instruções de várias
    transações onde as instruções pertencentes a uma única transação aparecem
    juntas.

    No escalonamento não serial as operações de uma transação são executadas
    intercaladas com operações de outra transação.

    Os mecanismos de controle de concorrência são classificados em mecanismos
    otimistas e pessimistas.

    Os mecanismos de controle de concorrência pessimistas são aqueles que
    buscam impedir antecipadamente os tipos de acesso concorrente a dados que
    podem gerar inconsistências. Isso pode ser feito bloqueando temporariamente o
    acesso de dados a algumas aplicações enquanto outra está acessando.

     Os mecanismos de controle de concorrência otimistas, ao invés de tentar evitar
    antecipadamente acessos inconsistentes permitem o livre acesso.

    No final da execução das aplicações é iniciado um processo que examina a
    incidência de inconsistência nos dados graças ao acesso concorrente.
Restrição de Integridade

    As restrições de integridade oferecem meios de assegurar que
    mudanças feitas no banco de dados por usuários autorizados não
    resultem em perda de consistência dos dados.

    As restrições de integridade podem resguardar o banco de dados
    contra danos acidentais.

    Uma restrição de integridade pode ser um predicado arbitrário que
    reaplica ao banco de dados.

    No entanto, os predicados arbitrários podem ser custosos para testes.
    Dessa forma é preciso limitar-se em restrições de integridade que
    possam ser testadas com um mínimo custo adicional.

    A forma mais elementar de restrição de integridade é a restrição de
    domínio.

    Em um sistema é possível que diversos atributos tenham um mesmo
    domínio.

    A definição de restrição de domínio não somente permite testar os
    valores inseridos no banco de dados como possibilita testar as
    consultas assegurando que as comparações façam sentido.
Restrição de Integridade

    A integridade referencial é usada para garantir que um valor que
    aparece em uma relação para um dado conjunto de atributos também
    apareça para um certo conjunto de atributos em outra relação.

    No modelo E-R (Entidade – Relacionamento), o esquema do banco
    de dados relacional derivado de diagramas E-R resulta em um
    conjunto de relacionamentos que possui regras de integridade
    referencial.

    Outro ponto de origem de restrições de integridade referencial são os
    conjuntos de entidades fracas. Isto porque o esquema relacional para
    cada conjunto de entidades fracas inclui uma chave estrangeira que
    leva a uma restrição de integridade referencial.

    As modificações em banco de dados podem violar as regras de
    integridade referencial.
Evitar violação de consistência dos
                    dados
    Para evitar a violação dos dados e garantir a consistência,
    confiabilidade, podemos adotar algums mecanismos de segurança
    entre esses mecanismos podemos destacar:


Mecanismos de controles fisicos

    portas / trancas / paredes / blindagem /etc...


Mecanismos de controles lógicos

    Mecanismos de criptografia

    Assinatura digital

    Mecanismos de garantia da integridade da informação

    Mecanismos de controle de acesso e etc...
Dentre os mecanismos de controle lógico, vamos destacar a
  criptografia.
Criptografia


A Criptografia é a técnica pela qual a informação
pode ser transformada da sua forma original para
outra ilegível, de forma que possa ser conhecida
apenas por seu destinatário, o que a torna difícil de
ser lida por alguém não autorizado. Assim sendo, só
o receptor da mensagem pode ler a informação com
facilidade.
A criptografia                  tem       quatro         objetivos
principais :

    confidencialidade da mensagem: só o destinatário autorizado
    deve ser capaz de extrair o conteúdo da mensagem da sua forma
    cifrada. Além disso, a obtenção de informação sobre o conteúdo da
    mensagem (como uma distribuição estatística de certos caracteres)
    não deve ser possível, uma vez que, se o for, torna mais fácil a
    análise criptográfica.

    integridade da mensagem: o destinatário deverá ser capaz de
    determinar se a mensagem foi alterada durante a transmissão.

    autenticação do remetente: o destinatário deverá ser capaz de
    identificar o remetente e verificar que foi mesmo ele quem enviou a
    mensagem.

    não-repúdio ou irretratabilidade do emissor: não deverá ser
    possível ao emissor negar a autoria da mensagem.
Criptografia


    Nem todos os sistemas ou algoritmos criptográficos são utilizados
    para atingir todos os objetivos listados acima.

    Normalmente, existem algoritmos específicos para cada uma
    destas funções.

    Mesmo em sistemas criptográficos bem concebidos, bem
    implementados e usados adequadamente, alguns dos objetivos
    acima não são práticos (ou mesmo desejáveis) em algumas
    circunstâncias. Por exemplo, o remetente de uma mensagem pode
    querer permanecer anônimo, ou o sistema pode destinar-se a um
    ambiente com recursos computacionais limitados.

    Tipos de Criptografia, MD2, MD4, SHA, Hash, MD5, MD6 (não
    utilizavél).

    Os mais indicados e comuns são o MD5, o SHA e o Hash
Criptografia

    MD5 (Message-Digest algorithm 5) é um algoritmo de hash de
    128 bits unidirecional desenvolvido pela RSA Data Security, Inc.,
    descrito na RFC 1321, e muito utilizado por softwares com
    protocolo ponto-a-ponto (P2P, ou Peer-to-Peer, em inglês) na
    verificação de integridade de arquivos e logins.

    Foi desenvolvido em 1991 por Ronald Rivest para suceder ao MD4
    que tinha alguns problemas de segurança. Por ser um algoritmo
    unidirecional, uma hash md5 não pode ser transformada
    novamente no texto que lhe deu origem. O método de verificação é,
    então, feito pela comparação das duas hash (uma da mensagem
    original confiável e outra da mensagem recebida).

    O MD5 também é usado para verificar a integridade de um arquivo
    através, por exemplo, do programa md5sum, que cria a hash de um
    arquivo. Isto pode-se tornar muito útil para downloads de arquivos
    grandes, para programas P2P que constroem o arquivo através de
    pedaços e estão sujeitos a corrupção dos mesmos. Como
    autenticação de login é utilizada em vários sistemas operacionais
    unix e em muitos sites com autentificação.
Criptografia

    SHA (Secure Hash Algorithm) está relacionada com as funções
    criptográficas. A função mais usada nesta família, a SHA-1, é usada
    numa grande variedade de aplicações e protocolos de segurança,
    incluindo TLS, SSL, PGP, SSH, S/MIME e IPSec. SHA-1 foi
    considerado o sucessor do MD5. Ambos têm vulnerabilidades
    comprovadas. Em algumas correntes, é sugerido que o SHA-256
    ou superior seja usado para tecnologia crítica. Os algoritmos SHA
    foram desenhados pela National Security Agency (NSA) e
    publicados como um padrão do governo Norte-Americano.


    O primeiro membro da família, publicado em 1993, foi oficialmente
    chamado SHA; no entanto, é frequentemente chamado SHA-0 para
    evitar confusões com os seus sucessores. Dois anos mais tarde,
    SHA-1, o primeiro sucessor do SHA, foi publicado. Desde então
    quatro variantes foram lançadas com capacidades de saída
    aumentadas e um design ligeiramente diferente: SHA-224, SHA-
    256, SHA-384, e SHA-512 — por vezes chamadas de SHA-2 .
Segurança de acesso
                       (usuários e aplicações)



    A preocupação com a criação e manutenção de ambientes seguros têm
    sido tarefas cruciais de administradores de redes, de sistemas
    operacionais e de bancos de dados.

    Pesquisas mostram que boa parte dos ataques, roubos de informações
    e acessos não-autorizados são feitos por pessoas que pertencem à
    organização alvo.

    Isso faz com que estes profissionais se desdobrem para criar e usar
    artifícios para eliminar os acessos não-autorizados ou minimizar as
    chances de sucesso das tentativas de invasão (internas ou externas).

    Os controles de acesso em sistemas de informação devem assegurar
    que todos os acessos diretos ao sistema ocorram exclusivamente de
    acordo com as modalidades e as regras pré-estabelecidas, e
    observadas por políticas de proteção.
Segurança de acesso
                    (usuários e aplicações)


                                                                     A
figura abaixo apresenta um sistema de controle de acesso incluindo
assuntos (usuários e processos) que alcançam objetos (dados e
programas) com as operações (ler, escrever e executar).
Segurança de acesso
                    (usuários e aplicações)

    A figura mostra um sistema de controle de acesso composto
    basicamente de dois componentes:

    as Políticas de Acesso, que indica as modalidades e tipos de
    acesso a serem seguidas, e

    os Procedimentos de Acesso, que, com base nas regras de
    acesso, os pedidos de acesso podem ser permitidos, negados ou
    podem ser pedidas modificações no pedido de acesso.


    Grande parte dos SGBDs atuais controla o acesso aos dados
    armazenados através de Listas de Controle de Acesso (Access
    Control List, ACL) .
    As ACLs são tabelas especiais que possuem informações sobre os
    privilégios que cada usuário pode ter em determinado banco de
    dados.
Segurança de acesso
                        (usuários e aplicações)


    Quando um usuário se conecta ao banco de dados “sua identidade” é
    determinada pela máquina de onde ele conectou e o nome de usuário
    que ele especificou.

    O sistema concede privilégios de acordo com sua identidade e com o
    que ele deseja fazer.

    Assim é possível que usuários provenientes de diferentes lugares da
    internet possuam o mesmo nome de usuário e privilégios totalmente
    diferentes um do outro.

    O controle de acesso é feito em duas etapas: primeiramente o servidor
    confere se você pode ter acesso ou não, em seguida, assumindo que
    você pode conectar, o servidor verifica cada requisição feita para saber
    se você tem ou não privilégios suficientes para realizar a operação. Por
    exemplo, se você tentar selecionar linha de uma tabela em um banco de
    dados ou apagar uma tabela do banco de dados, o servidor se certifica
    que você tem o privilégio select para a tabela ou o privilégio drop para
    o banco de dados.
SQL injection

                   O que é ?

A Injeção de SQL, mais conhecida através do termo
americano SQL Injection, é um tipo de ameaça de
segurança que se aproveita de falhas em sistemas que
interagem com bases de dados via SQL.
A injeção de SQL ocorre quando o atacante consegue
inserir uma série de instruções SQL dentro de uma
consulta (query) através da manipulação das entrada de
dados de uma aplicação.
SQL injection

    Para ilustrar o conceito de SQL Injection, a seguinte simulação pode
    ser realizada. Imaginemos que um script de validação de acesso de
    usuários tenha sido desenvolvido como segue:





    Nas linhas 3 e 4, as variáveis $usuario e $senha, respectivamente,
    recebem o conteúdo submetido por um formulário através do método
    POST. Eis a fonte do problema.

    Suponha que a seguinte entrada tenha sido informada no campo
    usuário no formulário chamador do script de validação.
SQL injection





    Logo, a query string resultante será:





    Se nenhuma outra validação for realizada, o usuário mal intencionado
    terá efetuado login no sistema, sem ao menos informar um usuário
    contido na tabela. Isto foi possível pois o valor de entrada informado
    não recebeu o tratamento devido, sendo adicionado à instrução para
    ser executado. Vale ressaltar que as validações apresentadas no
    exemplo são apenas ilustrativas, havendo a necessidade de
    checagens mais eficazes para um script de validação de acesso.
SQL injection

    Impossibilitando o uso de SQL Injection


    Para que se esteja livre da utilização da SQL Injection, certas
    providências devem ser tomadas. Algumas das ações serão
    realizadas no servidor de banco de dados, outras devem ser
    garantidas pelo código fonte.

    Deve-se tomar cuidado com a configuração do usuário que
    estabelece a conexão com o banco de dados.

    O ideal é que as permissões de acesso deste usuário estejam
    restritamente limitadas às funções que irá realizar, ou seja, para a
    exibição de um relatório, a conexão com o banco de dados deve
    ser realizada por um usuário com permissões de leitura e acesso
    somente às tabelas necessárias para sua operação.
SQL injection


    Todos os valores originados da coleta de dados externos, devem
    ser validadas e tratadas a fim de impedir a execução de eventuais
    instruções destrutivas ou operações que não sejam as esperadas.

    Um tratamento básico para a execução de querys com variáveis
    contendo valores informados pelo usuário:
SQL injection

    Com a utilização da função addslashes() será adicionada uma barra
    invertida antes de cada aspa simples e aspa dupla encontrada,
    processo conhecido como escape. Se a diretiva de configuração do
    PHP magic_quotes_gpc estiver ativada, o escape é realizado
    automaticamente sobre os dados de COOKIES e dados recebidos
    através dos métodos GET e POST. Neste caso, não deve ser
    efetuado o tratamento com addslashes(). A função
    get_magic_quotes_gpc(), disponível nas versões do PHP a partir da
    3.0.6, retorna a configuração atual da diretiva magic_quotes_gpc.

    Abaixo, a query string resultante da aplicação do tratamento
    mencionado:
SQL injection

    Em muitos bancos de dados, existem funções
    específicas para o tratamento de variáveis em query
    strings, o que diminui a compatibilidade do código
    fonte para operação com outros sistemas de banco
    de dados.

    Outra dica importante é evitar a exibição das
    mensagem de erro em um servidor de aplicação em
    produção, pois geralmente nos erros ou alertas são
    exibidos caminhos de diretórios do sistema de
    arquivos e informações à respeito do esquema do
    banco de dados, podendo comprometer a
    segurança do sistema.
Segurança contra falhas
             (recovery)


    A recuperação/tolerância a falhas tem por
    objetivo restaurar o BD para um estado de
    integridade, após a ocorrência de uma falha;



    Os mecanismos de recuperação baseiam-se na
    utilização de formas de redundância que quase
    duplicam o BD, utilizando: Backup e transaction
    log
Manutenção de histórico de
    atualizações(Log) e backups do BD


    Os backups são cópias de segurança do BD,
    que são executados periodicamente e
    constituem um ponto de partida para a
    recuperação do BD após a ocorrência de uma
    falha, independentemente da sua gravidade;



    Refletem uma situação passada, donde a
    reposição a partir de um backup implica perder
    todas as atualizações posteriores à realização
    do mesmo.
Manutenção de histórico de
    atualizações(Log) e backups do BD


    Uma forma de minimizar esta situação é
    aumentando a periodicidade dos backups, o que
    é um processo pesado, consumidor de recursos
    e que pode obrigar a paradas dos sistemas;



    A periodicidade dos backups depende do valor
    dos dados, do seu volume e da frequência com
    que são acedidos e alterados;
Manutenção de histórico de
    atualizações(Log) e backups do BD



    O backup é um mecanismo de reposição do BD.

    Os transaction logs são mecanismos de
    repetição das transacções ocorridas desde o
    último backup (rollforward);

    Normalmente para se refazer uma transação é
    necessário o ficheiro de transaction log, onde
    está guardada uma identificação da transação e
    uma cópia dos dados atualizados por ela (after
    image);
Manutenção de histórico de
    atualizações(Log) e backups do BD


    Sendo esta a forma mais comum de resolver os
    problemas provocados por uma falha, têm que
    existir outros mecanismos que permitam o roll
    back das transacções não terminadas, ocorridos
    durante a execução não sucedida das mesmas;

    Donde o ficheiro transaction log necessita
    igualmente de guardar os dados anteriores ao
    início da execução da transacção (before-
    images)
Manutenção de histórico de
    atualizações(Log) e backups do BD


    É da conjugação destes dois mecanismos -
    backups e transaction logs , que se garantem
    duas das características fundamentais das
    transações:



    Atomicidade (desfazendo uma transação não
    sucedida)

    Persistência (refazendo os efeitos de uma
    transação bem sucedida)
Tipo de Falhas
Falha de disco - o(s) disco(s) onde o BD
 está armazenado fica(m) inutilizado(s). É a
 falha considerada mais grave e que obriga
 à reconstrução de todo o SGBD;


Falha de sistema - pode resultar de
 problemas de hardware ou software, não
 sendo possível garantir a validade dos
 dados. Implica repor a BD a partir do seu
 último estado de integridade.
Tipo de Falhas
Falha de transação - é a mais inofensiva e
 recupera-se recorrendo ao ficheiro
 transaction log e às before images da
 transação que não foi bem sucedida.


 Em qualquer processo de recuperação recorre-
 se ao rollback das transações efetuadas até ao
 momento em que os transaction log e os
 ficherios da base estão sincronizados, para se
 poderem desfazer todas as transações
 decorridas desde então.
Tipo de Falhas

Esse momento coincide com o último
 backup, o qual se muito afastado no
 tempo, obriga a um processo moroso e
 complexo de recuperação do BD.

                Tn

                     Tn+1

                            Tn+2
                                               Tn+3




     Último backup                 Falha de disco
Tipo de Falhas

Para evitar este tipo de situações, recorre-
 se a marcas de segurança, conhecidas
 por checkpoints.
Basicamente, para reduzir o número de
 acessos aos discos, nos ficheiros de
 transaction log as atualizações são
 realizadas na memória RAM, em buffers,
 sendo posteriormente escritos em disco;
Tipo de Falhas

Quando ocorre uma falha, o conteúdo
 desses buffers pode perder-se, ou pelo
 menos pode não existir uma garantia de
 validade do seu conteúdo;
Assim os checkpoints registram os
 momentos em que o conteúdo dos buffers
 foi escrito nos discos, definindo-se um
 momento em que o transaction log e o BD
 estão sincronizados.
Tipo de Falhas


            Tn


                    Tn+1



                           Tn+2
                                              Tn+3




Último backup                     Falha de Sistema
Auditoria em Banco de Dados


    É o conjunto de ações para verificar o que os usuários
    estão fazendo.

    Muitas empresas fazem isso para os fins de segurança.
    Isso é para garantir que usuários não autorizados não
    estão acessando uma parte do banco de dados ou a
    estrutura principal que não é permitida.

    A maioria das informações críticas de uma empresa, 90%
    ou mais, é mantida no banco de dados.

    É por isso que a auditoria do banco de dados é tão crucial
    para a proteção da segurança.

    Se determinada informação é comprometida, ela pode ser
    crítica para suas operações.
Segurança em Banco de dados
           Livres (Mysql)

    O MySQL sem dúvida nenhuma, é o banco de dados open source
    mais conhecido do mercado e provavelmente o mais utilizado.

    Ele é rápido, simples, funcional e hoje implementa recursos que o
    colocam próximo a grandes nomes como Oracle.

    Até pouco tempo um recurso extremamente útil e que era fator que
    impedia utilização em várias empresas, é o suporte à transação.
    Desde o lançamento da versão MAX,o MySQL já dá suporte a
    transações, derrubando este impecílio à sua utilização. Mais tarde,
    com a introdução das tabelas InnoDB, o MySQL ganhou mais um
    poderoso recurso: integridade referencial.

    Assim o MySQL passa a implementar os principais conceitos que
    aprendemos nos livros sobre banco de dados, fazendo-o ser uma
    alternativa viável para ser adotado no desenvolvimento de
    aplicativos.
Segurança no sistema (Mysql)

    Antes mesmo de pensar como um administrador de banco de
    dados (DBA), devemos pensar na segurança do sistema.

    Algumas considerações devem ser analisadas para evitar que,
    mesmo implementando controles de acessos a tabelas, banco de
    dados, o administrador seja surpreendido pela perda de dados pelo
    fato de alguém ter "acidentalmente" apagado o repositório do
    MySQL.

    Apesar de implementar um sistema de validação robusto, o MySQL
    não tem como controlar acessos que deveriam ser bloqueados pelo
    sistema operacional.

    Acesso a arquivos, permissóes de usuários do sistema, ou mesmo
    do usuário sob o qual roda o servidor devem ser especialmente
    preparados para evitar que haja corrupção ou quebra da
    privacidade dos dados.

    Resumindo, apenas o banco de dados MySQL deve ter acesso à
    aos arquivos de dados do MySQL.
Sistema de arquivos (Mysql)

    Como já foi falado anteriormente, apenas o banco de dados deveria
    ter acesso aos arquivos onde são armazenados os dados.

    No mundo Linux, esta restrição é bem simples de ser implementada,
    já que ele tem um esquema bem forte de autenticação que restringe o
    poder dos usuários do sistema.

    Apenas o usuário root não pode ter o acesso bloqueado, já que ele
    pode redefinir as restrições estabelecidas.

    Para evitar qualquer tipo de problemas, apenas o usuário sob o qual
    o servidor vai rodar, deve ter acesso ao diretório onde o MySQL
    guarda os arquivos de dados.

    Qualquer outro usuário deve ter o acesso a este diretório bloqueado
    tanto para leitura como para escrita.

    O acesso de escrita deve ser bloqueado por motivos óbvios:
    ninguém, a não ser o próprio banco de dados deve escrever nos
    arquivos de dados.
Sistema de arquivos (Mysql)

Já a permissão de leitura merece uma explicação mais detalhada.



    Ao bloquear o acesso à escrita nos arquivos do MySQL, garantimos
    que ninguém poderá fazer alterações nos arquivos, porém não
    conseguimos garantir o sigilo destes dados.

    Não é preciso nem decifrar o conteúdo dos arquivos para ler os
    dados ali armazenados, basta pegar os arquivos e, em outra
    máquina copiar os arquivos no diretório do MySQL e pronto. Você
    tem acesso a tudo que o outro banco de dados guardou.

    Para preservar o sigilo nos dados portanto, o acesso de leitura
    também deve ser bloqueado para os outros usuários que não o
    responsável pelo banco de dados.
Usuários do sistema (Mysql)

    Para acessar o banco de dados, não é necessário criar uma conta
    no sistema operacional, pois o MySQL tem sua própria estrutura de
    validação desvinculando os usuários do banco de dados dos
    usuários do sistema.

    O único usuário do sistema que deve ter um tratamento especial é
    o que possui o processo servidor.

    O MySQL, como qualquer processo no Linux possui um dono e
    conseqüentemente ele vai ter os mesmos privilégios que este dono
    tem no sistema.

    Assim a política adotada para este usuário é como em qualquer
    outra: a do menor privilégio.

    Se o servidor acessa só o banco de dados, por que dar poder ao
    dono do processo servidor para ler ou escrever arquivos externos
    ao banco de dados? Se o propósito do dono do banco de dados é
    apenas fazer o servidor funcionar, por que dar acesso de login a
    ele?
Usuários do sistema (Mysql)

    Existem algumas situações que o admistrador deve dar acesso ao
    sistema de arquivos para o dono do banco de dados, pois algumas
    funções no MySQL precisam deste acesso (LOAD DATA por
    exemplo).

    Se este for o caso, o administrador deve ter o cuidado para não
    deixar aberto acesso a arquivos importantes. É óbvio, mas existem
    administradores que esquecem deste detalhe.

    Com um banco de dados preparado e um comando LOAD DATA é
    possível pegar, por exemplo, os dados do arquivo /etc/passwd para
    tentar obter as senhas dos usuários.

    Uma observação importante é que o dono do banco de dados
    NUNCA deve ser o root.

    O motivo é óbvio: este usuário tem acesso a tudo, e acabamos de
    ver acima que este acesso indesejado é extremamente perigoso ao
    sistema.
Usuários do sistema (Mysql)

    Um administrador inexperiente poderia pensar que apenas o super-
    usuário do sistema pode ter acesso ao banco de dados e assim ele
    estaria seguro, mas o que acontece é que do outro lado, existe
    alguém desconhecido que vai enviar uma consulta ao banco de
    dados que está funcionando como super-usuário e que pode fazer
    qualquer coisa.

    O ideal portanto é que exista um usuário apenas para o banco de
    dados, sem direito a fazer mais nada que não seja manipular os
    dados do próprio banco de dados.

    Aplicando estes procedimentos no servidor, estaremos garantindo a
    integridade do sistema, pois o usuário dono do servidor MySQL não
    tem privilégios.

    Também garantimos o sigilo dos dados, pois nenhum outro usuário
    vai ter acesso aos arquivos do banco de dados.

    Assim estamos implementando segurança no MySQL antes mesmo
    de fazer o servidor MySQL funcionar.
Sistema de autenticação (MySQL)


    O MySQL implementa um sistema de autenticação bastante
    robusto que é realizado em dois estágios.
    O primeiro verifica se o usuário pode conectar ao banco de dados e
    o segundo verifica se o usuário tem privilégios para realizar
    operações no banco de dados.
    O segundo estágio, portanto, é verificado a cada operação
    realizada pelo usuário.

    Este sistema de privilégios é armazenado usando a própria
    estrutura do sistema em um banco de dados especial chamado
    mysql.

    Pela natureza dos dados que este banco de dados armazena, ele
    deve ter o acesso permitido apenas para o usuário root do MySQL.

    Os usuários comuns não necessitam de acessar este banco de
    dados, principalmente a tabela user, onde estão armazenadas as
    senhas dos usuários.
Sistema de autenticação (MySQL)

    Para aceitar a conexão de um usuário, o MySQL não considera
    apenas o próprio usuário, mas também a máquina de onde o
    usuário está conectando. Dessa forma, você pode permitir o acesso
    de um determinado usuário somente de algumas máquinas
    específicas, bloqueando seu acesso de outros hosts que podem
    não ser confiáveis.

    Existem duas maneiras de conceder privilégios aos usuários:
    Usando os comandos GRANT e REVOKE, ou
    Alterando diretamente as tabelas do banco de dados mysql.

    A melhor escolha é usar os comandos GRANT/REVOKE, pois o
    MySQL já altera as tabelas automaticamente, não sendo
    necessário entender em detalhes o significado de cada tabela e
    suas respectivas colunas.

    Se você alterar os privilégios manualmente além do risco de
    manipular dados de forma errada, vocé pode se esquecer de
    executar o comando FLUSH PRIVILEGES para tornar as
    alterações ativas.
Sistema de autenticação (MySQL)


    Ao criar um novo banco de dados, deixe que apenas o
    administrador do banco de dados tenha acesso completo.

    Aos usuários comuns permita apenas acesso aos dados, evitando o
    acesso à estrutura do banco de dados.

    Assim um usuário comum com acesso "completo" deveria ter
    acesso aos comandos INSERT, DELETE, UPDATE e SELECT.

     Apenas o administrador do banco de dados deve ter acesso a
    comandos como DROP, CREATE ou ALTER.

    Dessa forma vocé está permitindo a cada um apenas o que ele
    necessita para o processamento de dados.

    Exemplificando, vamos definir um certo "Alfredo" como
    administrador do banco de dados "expedicao" que vai ter como
    usuários um tal "Luciano" que, por ser desenvolvedor, pode alterar
    a estrutura do banco de dados e o "Thiago" que é o usuário final, ou
    seja, ele apenas precisa manipular os dados armazenados.
Sistema de autenticação (MySQL)

    Para definir estes três usuários, basta executar a seguinte
    seqüência de comandos SQL:

    > GRANT ALL PRIVILEGES ON expedicao.* TO Alfredo@localhost
    IDENTIFIED BY ’senha_do_alfredo’;

    > GRANT SELECT,INSERT,UPDATE,DELETE,DROP,ALTER ON
    expedicao.* TO Luciano@localhost IDENTIFIED BY
    ’senha_do_luciano’;

    > GRANT SELECT,INSERT,UPDATE,DELETE ON expedicao.* TO
    Thiago@localhost IDENTIFIED BY ’senha_do_thiado’;

    Note que no exemplo acima, todos os usuários cadastrados têm
    acesso ao banco de dados apenas se estiverem conectando da
    máquina local, ou seja diretamente na máquina onde o servidor
    MySQL está rodando.

    Para permitir acesso de outros hosts basta repetir a consulta para
    um usuário alterando localhost para o nome ou endereço IP da
    máquina de onde será permitido ao usuário conectar ao banco de
    dados.
Sistema de autenticação (MySQL)


    Você poderia ainda usar o curinga ’%’ indicando que o usuário pode
    se conectar de qualquer host, mas isto não é recomendado, pois a
    priori você não deve confiar em máquinas às quais você não tem
    informações.

    É muito importante que o administrador entenda pelo menos
    basicamente o funcionamento do sistema de privilégios do MySQL
    para evitar conceder a um usuário mais poder do que ele necessita.

    São vários tipos de privilégios que um determinado usuário pode ter
    além de SELECT,INSERT,UPDATE,DELETE,DROP e ALTER
    mostrados acima.

    É altamente recomendado fazer uma leitura no manual do MySQL
    para ver os privilégios disponíveis e como utilizá-los de forma
    correta.
Conexão via rede (MySQL)

    Ao conectar ao servidor MySQL localmente, tendo um sistema bem
    configurado o MySQL já pode ser considerado bem seguro.

    Ao disponibilizar o acesso via rede, porém, criamos mais um ponto de
    vulnerabilidade deixando o sistema à mercê de ataques dos mais
    variados tipos.

    O simples fato de deixar uma porta aberta já aguça a curiosidade de
    certos usuários para tentar usar esta porta aberta como entrada para
    derrubar serviços ou outras formas de "atrapalhar" o funcionamento
    do sistema.

    Em sua instalação padrão, o MySQL inicia permitindo conexões locais
    e conexões via rede.

    Na seção anterior, vimos como permitir que um usuário se conecte a
    partir de um host. O simples fato de não permitir a conexão de um
    usuário não siginifica que não teremos mais problemas porque a porta
    continua aberta para a rede.

    Pensando nesta "porta aberta", é necessário implementar
    mecanismos para que os dados que trafegam por esta porta não
    sejam lidos por alguém que não o servidor e o cliente.
Conexão via rede (MySQL)

    Para ajudar a decidir como "esconder" os dados de crackers,
    devemos ter em mente como será desenvolvido o aplicativo que vai
    usar o banco de dados.

    Se for um ambiente web, onde o servidor web e o MySQL estejam
    na mesma máquina, não há motivos para liberar o acesso via rede.

    Neste caso o servidor deve ser iniciado com a opção --skip-
    networking que faz com que o MySQL funcione apenas com
    conexões locais via sockets. Se o aplicativo estiver em uma
    máquina e o servidor em outra como em ambientes cliente/servidor,
    ou mesmo web onde o servidor web está em uma máquina e o
    servidor MySQL em outra, esta opção não pode ser utilizada.

    Nos casos onde o acesso a rede deve ser necessário, a primeira
    providência a ser tomada é permitir conexões aos usuários apenas
    das máquinas de onde eles têm permissão para acessar o banco
    de dados. Isto deve ser feito através dos comandos GRANT e
    REVOKE vistos anteriormente.

    A segunda providência é estabelecer uma conexão segura com o
    servidor. A senha no momento da autenticação não é transmitida
    em texto plano, porém o algoritmo de criptografia não é forte e pode
    ser facilmente quebrado.

    Outro problema com a conexão estabelecida entre cliente e
    servidor é que todos os dados (requisições SQL e retorno dos
    dados) trafegam em texto plano e qualquer um rodando um sniffer
    pode ver o diálogo entre o servidor e o cliente.

    Existem pelo menos duas soluções para este problema. A partir da
    versão 4.0.0, o MySQL tem suporte a SSL, que é um protocolo que
    utiliza diferentes algoritmos de criptografia para assegurar que os
    dados recebidos por uma rede pública são confiáveis.

    Outra solução é criar uma VPN usando aplicativos como SSH que
    criam um túnel criptográfico entre dois hosts e o host remoto passa
    a enxergar o servidor como se estivesse rodando localmente.

    Usando o MySQL com suporte a SSL, você pode, ao criar um
    usuário, informar ao servidor que este usuário precisa ser
    autenticado usando também atributos do SSL além dos dados
    padrão (usuário, senha, nome/IP do host). Basta para isto
    acrescentar a cláusula REQUIRE no comando GRANT.

    Exemplificando, vamos fazer com que a autenticação do usuário
    Alfredo seja feita com SSL.

    > GRANT ALL PRIVILEGES ON expedicao.* TO Alfredo@localhost
    IDENTIFIED BY ’senha_do_alfredo’ REQUIRE SSL;

    O manual do MySQL dá todas as informações passo a passo para
    criar certificados para o MySQL e como configurar o MySQL para
    utilizar acesso seguro via SSL. Recomendamos a sua leitura para
    implementar este recurso.

    Se o servidor MySQL deve ser visto apenas na rede local, o acesso
    externo deve ser bloqueado. Você pode fazer isto com o próprio
    esquema de privilégios do MySQL, mas assim apenas o acesso ao
    banco de dados estará restrito e a porta continuará aberta para a
    rede externa.
A melhor alternativa para evitar este acesso indesejado é com a
  implementação de um firewall. Se a rede externa não deve acessar
  o MySQL o próprio firewall se encarrega de filtrar o acesso. Dessa
  forma a porta de acesso ao MySQL será fechada para conexões
  externas.
Segurança em Banco de dados
        Proprietário (Oracle)

    A segurança do banco de dados pode ser classificada em duas
    categorias distintas: segurança de sistema e segurança de
    dados.

    A segurança de sistema contém os mecanismos que controlam
    o acesso e o uso do banco de dados em um determinado nível
    do sistema.

    Os mecanismos de segurança do sistema verificam se um
    usuário está autorizado a se conectar ao banco de dados, se a
    auditoria do banco de dados está ativa e quais operações de
    sistemas um usuário pode executar.

    A segurança de sistema inclui combinações válidas de nome de
    usuários e senha, a quantidade de espaço em disco disponível
    para os objetos de esquema de um usuário e os limites de
    recurso de um usuário.
Segurança em Banco de dados
        Proprietário (Oracle)


    A segurança de dados inclui os mecanismos que controlam o
    acesso e o uso do banco de dados no nível de objeto de
    esquema incluindo quais usuários têm acesso a um objeto e a
    tipos específicos de ações que cada um pode executar.

    Existem ferramentas adicionais que incrementam a segurança
    do Oracle Server, possibilitando um ambiente multiplataforma
    de maior escala. Entre elas podemos citar :
    Oracle Enterprise Manager (conhecido como OEM)
    Oracle Security Server Manager (conhecido como OSS).
Segurança em Banco de dados
        Proprietário (Oracle)
O Oracle Enterprise Manager ( OEM) é um conjunto de
  utilitários que são disponibilizados numa interface gráfica
  em modo usuário (GUI), que provêm meios para gerenciar
  uma ou mais bases de dados de um único computador. O
  OEM é composto por:

    Um conjunto de ferramentas administrativas;

    Um monitor de eventos que pode ser configurado para
    inspecionar situações específicas em sua base de dados;

    Um agendador de tarefas para executar tarefas de
    manutenção em  horários definidos;

    Uma interface gráfica para o Recovery Manager Tools.
Segurança em Banco de dados
        Proprietário (Oracle)


    O Oracle Security Server Manager (OSS) pode ser
    utilizado para implementar uma estrutura mais complexa de
    segurança para dados mais sensíveis, com os seguintes
    aspectos:



    Autenticação de usuário através de credenciais eletrônicas;

    Assinatura Digital;

    Single Sign On (SSO) .
Segurança em Banco de dados
          Proprietário (Oracle)


    Por se tratar de um banco de dados multiplataforma, sua
    segurança não pode ser resguardada na segurança do sistema
    operacional em que foi instalado.

    Para isso, a instalação do Oracle segue uma política de depender
    o mínimo possível do sistema operacional, através da
    implementação de diversas medidas de segurança.

    A primeira, e também mais básica, é a alteração das senhas dos
    usuários padrão do banco.

      Usuários como System (senha: manager), Sys (senha:
    change_on_install) e DBSNMP (senha: dbsnmp) são instalados
    com tais senhas padrão e têm um alto nível de acesso ao banco,
    o que pode comprometer por completo a segurança do mesmo.
Segurança em Banco de dados
        Proprietário (Oracle)



    O servidor Oracle fornece controle arbitrário de acesso, o que é
    um meio de restringir o acesso às informações privilegiadas.

    O privilégio apropriado deve ser atribuído por um usuário para
    que ele acesse um objeto de esquema.

    Os usuários com privilégios apropriados podem concedê-los a
    outros segundo o seu critério.

    O Oracle gerencia a segurança do banco de dados usando
    diversos recursos diferentes.

    Entre eles: usuários, domínio de segurança, privilégios,
    Papeis e auditoria.
Opções de Autenticação (Oracle)

    Para acesso ao banco de dados, existem quatro formas de
    autenticação:
           Através de um arquivo de senhas;
            Autenticação herdada do sistema operacional (usuário
    autenticado previamente no sistema operacional);
           Arquivo de senhas e do sistema operacional;
           Autenticação nativa do banco de dados.

    As três primeiras vão herdar confiabilidade do sistema operacional,
    o que pode vir a causar problemas.

    A política é sempre confiar no banco de dados, autenticando
    somente por ele e implementando uma boa política de senhas.

    Tal método de autenticação consta na view
    V$SYSTEM_PARAMETER
Usuários (Oracle)

    Abrange usuários e esquema do banco de dados onde cada
    banco de dados tem uma lista de nomes de usuários.

    Para acessar um banco de dados, um usuário deve tentar uma
    conexão com um nome de usuário valido.

    Cada nome de usuário tem uma senha associada para evitar o
    uso sem autorização.

    São implementados ainda diferentes perfis de usuário para
    diferentes tarefas no Oracle, tendo em vista que cada
    aplicação/usuário tem a sua necessidade de acesso.

    Existe ainda a possibilidade de proteger os perfis com senha, o
    que é uma excelente medida.

    Além dessas medidas, existe o uso de cotas que aumenta a
    restrição de espaço em disco a ser utilizado por
    usuários/aplicativos.
Domínio de Segurança (Oracle)


    Conjunto de propriedades que determinam restrições como :
           Ações (privilégios e papeis) disponíveis para o usuário;
           Cota de tablespaces (espaço disponível em disco) do
    usuário;
           Limites de recursos de sistema do usuário.

    Cada usuário tem um domínio de segurança,

    As tabelas (tablespaces) do sistema, como a system, devem ser
    protegidas de acessos de usuários diferentes dos usuários de
    sistema.

    A liberação de escrita e alteração de dados em tais tabelas é
    totalmente desaconselhável em ambientes de produção.
Privilégios (Oracle)


    Um privilégio é um direito para executar um determinado
    tipo de declaração SQL.

    Alguns exemplos de privilégios incluem:
    Direito de conectar-se ao banco de dados;
    Direito de criar uma tabela em seu esquema;
    Direito de selecionar linhas da tabela de outra pessoa;
    Direito de executar o procedimento armazenado de outra
    pessoa.

    Os privilégios são concedidos aos usuários para que eles
    possam acessar e modificar os dados do banco de dados.
Privilégios (Oracle)
Os privilégios de um banco de dados Oracle podem se dividir em
  duas categorias distintas:

    Privilégios de sistema
    Permitem que os usuários executem determinada ação no nível
    de sistema ou em determinado tipo de objeto de esquema.
    Alteração de qualquer linha de uma tabela por exemplo, são
    privilégios do sistema.

    Privilégios do objeto de esquema
    Permitem que os usuários executem determinada ação em um
    objeto de esquema também especifico.
    O privilegio de exclusão de uma linha em uma tabela especifica
    por exemplo, é um privilegio de objeto.
Papéis (Oracle)


    Os papéis são grupos nomeados de privilégios
    relacionados que são concedidos aos usuários ou a outros
    papeis.





    O Oracle fornece o gerenciamento fácil e controlado dos
    privilégios por meio dos papéis.
Auditoria (Oracle)



    Atividade que tem como fim o exame/avaliação das
    operações, processos, sistemas e responsabilidades
    gerenciais de uma determinada entidade, com intuito de
    verificar sua conformidade com certos objetivos e políticas
    institucionais, orçamentos, regras, normas ou padrões.



    O Oracle permite a auditoria seletiva (monitoramento
    registrado) das ações do usuário para auxiliar na
    investigação de um suposto uso suspeito do banco de
    dados.
Auditoria (Oracle)


    A auditoria pode ser executada em três níveis diferentes:
    Auditoria de declaração :
           Faz a auditoria nas instruções SQL pelo tipo de
    instrução independente dos objetos de esquema
    específico que estão sendo acessados
    Auditoria de privilegio :
        Audita os privilégios de sistema, como por exemplo,
    CREATE TABLE ou ALTER INDEX.
    Auditoria de objeto de esquema:
          Audita as instruções específicas que operam em
    um específico objeto de esquema
Auditoria (Oracle)


    Para todos os tipos de auditoria, o Oracle permite a
    auditoria seletiva das execuções bem-sucedidas das
    declarações, das execuções que falharam ou de ambas.

    Isso permite o monitoramento de declarações suspeitas,
    independente do usuário que a emite ter os privilégios
    apropriados ou não para produzi-la.

    O uso de disparadores (triggers) para gravar
    informações personalizadas adicionais que não estão
    incluídos automaticamente nos registros de auditoria
    junto com a auditoria do sistema são indispensáveis para
    manter o sistema sempre otimizado e resguardado de
    acessos indevidos.
Auditoria (Oracle)

    Para habilitar a auditoria, é necessário mudar o parâmetro de
    inicialização audit_trail, para que o Oracle inicie e possa reconhecer o
    tipo de auditoria.

    Como o audit_trail não é um parâmetro dinâmico, é necessário que ele
    seja mudado em nível de SPFILE.

    Ele suporta os seguintes valores, cada um com a seguinte função:
    OS: Auditoria Habilitada, os registros vão ser gravados em diretórios do
    sistema em arquivos de auditoria.
    DB ou TRUE: Auditoria é habilitada, os registros de auditoria serão
    armazenadas no database (SYS.AUD$)
    XML: Auditoria é habilitada, os registros serão armazenados em formatos
    XML.
    NONE ou FALSE: Auditoria é desabilitada.
    DB_EXTENDED: Trabalha igual ao parâmetro DB, mais as colunas
    SQL_BIND e SQL_TEXT são preenchidas.

    Quando se seleciona os modos OS ou XML, arquivos são criados com os
    registros de auditoria, eles se localizam no parâmetro audit_file_dest.
Auditoria (Oracle)
Fases de uma Auditoria



    Planejamento
     Analisar e estabelecer os recursos necessários para a
    execução dos trabalhos (auditoria), a área de verificação,
    metodologias, os objetivos de controle e os
    procedimentos a serem adotados.

    Execução
    Junção de evidências que sejam suficientemente
    confiáveis, relevantes e úteis para a realização dos
    objetivos da auditoria.

    Relatório
    Informação sobre a organização auditada, que contenham
    comprovações, recomendações e/ou determinações.
Auditoria (Oracle)
Para verificar ou ativar a auditoria devemos fazer o seguinte:



    Conectar ao banco como sys : connect / as sysdba;

    Checar se a auditoria está ativada : show parameter
    audit;

    Se AUDIT_TRAIL=NONE não está ativa, então
    executamos:
    alter system set audit_trail=db SCOPE=spfile;

    Baixar o banco : shutdown immediate;

    Levantar de novo : startup open;

    Consultar os parâmetros novamente : show parameter
    audit;
Dicas de Segurança (Oracle)

A Oracle indica 5 principais itens de segurança básica
  para aumentar o nível de segurança em Bancos de
  Dados Oracle 10G:



    Proteger o dicionário de dados;
    Configurar o valor do parâmetro de sistema
    O7_DICTIONARY_ACCESSIBILITY para FALSE.
    Isso impede que usuários com privilégios ANY TABLE
    acessem tabelas do dicionário de dados, além de forçar o
    usuário SYS a se conectar como SYSOPER ou SYSDBA.
Dicas de Segurança (Oracle)


    Revogar privilégios públicos em packages que
    oferecem riscos de segurança;
    Revogar os privilégios de execução pública nas packages
    UTL_SMTP, UTL_TCP, UTL_HTTP, UTL_FILE e
    DBMS_OBFUSCATION_TOOLKIT.
    Isso impede que usuários maliciosos executem essas
    packages de forma indevida, reduzindo deste modo, os
    riscos de segurança.

    Restringir privilégios administrativos aos usuários
    do BD;
    Se um ou mais usuário(s) possuir(em) a role DBA e/ou o privilégio
    de sistema SYSDBA, sem necessidade ou indevidamente devem
    ter esse privilégio retirado.
Dicas de Segurança (Oracle)

    Restringir acesso aos diretórios do Sistema Operacional ;
    Verificar o valor do parâmetro de sistema UTL_FILE_DIR.
    Se este parâmetro tiver um valor apontando para um ou mais
    diretório(s) do sistema de arquivos, configure no Sistema
    Operacional, privilégios de gravação reduzidos (valor de cota
    máxima de gravação em disco) neste(s) diretório(s) para o usuário
    do SO que executa os processos do Oracle (normalmente usuário
    "oracle").
    Se isso não for possível, pode-se configurar no parâmetro
    UTL_FILE_DIR um diretório em um volume lógico separado do
    volume lógico em que estão os arquivos e software Oracle.
    Isso reduz o risco de um script malicioso ser executado no BD para
    gravar arquivos nesta pasta até estourar o limite de tamanho do
    volume lógico e "parar" o Banco de Dados quando o volume lógico
    "estourar".
Dicas de Segurança (Oracle)


    Desativar autenticação remota do Sistema
    Operacional
    Na configuração padrão do Oracle 10G, o Banco de Dados
    permite que usuários autenticados no sistema operacional
    façam conexão local sem fornecer usuário e senha do Banco
    de Dados.
     Para permitir esse modo de conexão somente para usuários
    locais do Sistema Operacional, deve-se configurar o valor do
    parâmetro REMOTE_OS_AUTHENT para FALSE.
    Essa configuração evita que usuários remotos (usuários de
    qualquer computador em uma rede) se conectem no Banco
    de Dados sem fornecer usuário e senha.
Consequencias

    Sabe o que essas empresas tem em
    comum ?
Consequencias de Banco de Dados não
                 seguros.
Invasão em banco de dados coloca em risco 2 milhões de clientes da Honda



  Clientes da Honda estão correndo risco. Não, não se trata de um recall
  nos automóveis fabricados, mas sim uma invasão no banco de dados
  de e-mails dos clientes da empresa. Cerca de dois milhões de
  endereços foram roubados, além de informações pessoais como
  endereço, senha e modelo e identificação do veículo.

  A empresa está investigando como o crime aconteceu e tentando
  identificar os principais culpados. Até agora, quem está na mira da
  investigação é a empresa de marketing Silverpop Systems,
  responsáveis pelas newsletters da fabricante.

  A Honda avisou todos os clientes em um comunicado oficial enviado
  ao e-mail de cada um. Afinal, com posse de todos esses dados, é
  simples receber um comunicado como se fosse o representante Honda
  local, com todos os seus dados e pedindo mais informações pessoais.
  Um perigo.
Fonte: http://bit.ly/gJoUcW
Consequencias de Banco de Dados não
              Seguros.

Utilizando técnica de injeção de SQL, dupla de invasores obteve lista
   de credenciais de acesso de diversos domínios ligados ao produto
   da Oracle.
O site MySQL.com, para clientes do banco de dados adquirido pela
  Oracle com a compra da Sun, foi aparentemente comprometido no
  fim de semana por uma dupla de hackers que publicaram nomes de
  usuários - e, em alguns casos, senhas - dos usuários dos site.
Identificando-se como "TinKode" e "Ne0h", os hackers afirmaram ter
   utilizado - ironicamente - um ataque de injeção SQL, mas não
   forneceram detalhes sobre a operação. Os domínios vulneráveis
   foram listados como www.mysql.com, www.mysql.fr, www.mysql.de,
   www.mysql.it e www-jp.mysql.com.
De acordo com um post da lista de discussão de bugs Full Disclosure,
  o MySQL.com mantém diversos bancos de dados internos em um
  servidor web Apache. A informação postada incluiu diversos
  códigos hash de senhas - algumas das quais já foram quebradas.
Consequencias de Banco de Dados não
              Seguros.
Entre as credenciais que constavam de uma lista de dados publicada
  no Pastebin estavam senhas para diversos usuários dos bancos de
  dados MySQL instalados no servidor, e as senhas admin para blogs
  corporativos de dois ex-funcionários da MySQL: o ex-diretor de
  gerenciamento de produtos Robin Schumacher e o ex-vice-
  presidente de relações com a comunidade, Kaj Arnö.
Schumacher é atualmente diretor de estratégia de produtos na
  EnterpriseDB, enquanto Arnö trabalha como vice-presidente
  executivo de produtos na SkySQL. O blog de Schumacher não foi
  tocado desde junho de 2009; o de Arnö está inativo desde janeiro
  de 2010.
A Oracle, que obteve o controle da MySQL com a aquisição da Sun
  Microsystems em abril de 2009, não comentou o incidente.
Uma empresa de segurança que monitora ataques feitos a sites,
  Sucuri, aconselhou aos usuários com uma conta no MySQL.com a
  mudar suas senhas o mais rapidamente possível, especialmente se
  eles usam a mesma senha em vários sites.
Fonte: http://bit.ly/eU3CN6
Recomendações para um ambiente
               seguro


    Nunca fornecer a ninguém (exceto aos usuários administrativos)
    acesso a tabela da ACL, caso uma pessoa tenha acesso as senhas
    de acesso da ACL, ela poderá facilmente se conectar ao banco com
    qualquer conta;

    Conceder apenas os privilégios necessários para cada usuário,
    nunca mais do que isso;

    Não manter senhas em texto puro no banco de dados, em vez disso,
    utilizar alguma função de criptografia de via única, com SHA1 ou
    MD5;

    Não escolher senhas que contenham palavras existentes em
    dicionários;

    Utilizar um firewall;

    Não confiar em nenhum dado inserido pelos usuários, muitos deles
    podem tentar atacar o sistema inserindo caracteres especiais nas
    entradas dos formulários contendo algum.
Referências
KORTH, Henry F.; SILBERSCHATZ, Abraham. Sistemas de Banco de Dados. 3 ed.São Paulo.
  Makron Books, 1999.

MANUAL DE REFERÊNCIA DO MYSQL. Como o Sistema de Privilégios Funciona. 2008b
  Disponível em < http://dev.mysql.com/doc/refman/4.1/pt/privileges.html>. Acesso em 01
  abr. 2011,

Marcos SÊMOLA . A importância da gestão de segurança da informação. 2003. Disponível
   em <http://www.linorg.cirp.usp.br/SSI/SSI2003/Palest/P03-Apresentacao.pdf>. Acesso em
   01 abr. 2011.

SQL Injection FAQ. Disponível em
  <http://www.sqlsecurity.com/FAQs/SQLInjectionFAQ/tabid/56/Default.aspx>. Acesso em
  01 abr. 2011.

Maico KRAUSE. Segurança em Banco de Dados. Disponível em <http://bit.ly/i9diim>. Acesso
   em 20 mar. 2011.

Wikipédia. Segurança da informação. Disponivel em <http://pt.wikipedia.org/wiki/Seguran
   %C3%A7a_da_informa%C3%A7%C3%A3o>. Acesso em 25 mar. 2011.

SQL Injection. Disponivel em
  <http://imasters.com.br/artigo/5179/sql_injection_no_php_o_que_e_e_como_se_proteger
  >. Acesso em 01 abr. 2011.

* Alguns dos links estão usando encurtador de URLs*

Contenu connexe

Tendances

Seguranca da Informação - Introdução - Novo
Seguranca da Informação - Introdução - NovoSeguranca da Informação - Introdução - Novo
Seguranca da Informação - Introdução - Novo
Luiz Arthur
 

Tendances (20)

Aula 5 banco de dados
Aula 5   banco de dadosAula 5   banco de dados
Aula 5 banco de dados
 
Modelagem de dados
Modelagem de dadosModelagem de dados
Modelagem de dados
 
Apresentação Sistemas Distribuídos - Conceito
Apresentação Sistemas Distribuídos - ConceitoApresentação Sistemas Distribuídos - Conceito
Apresentação Sistemas Distribuídos - Conceito
 
Arquitetura Cliente-Servidor
Arquitetura Cliente-ServidorArquitetura Cliente-Servidor
Arquitetura Cliente-Servidor
 
Arquitetura peer to-peer (p2p)
Arquitetura peer to-peer (p2p)Arquitetura peer to-peer (p2p)
Arquitetura peer to-peer (p2p)
 
Seguranca da Informação - Introdução - Novo
Seguranca da Informação - Introdução - NovoSeguranca da Informação - Introdução - Novo
Seguranca da Informação - Introdução - Novo
 
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de DadosBanco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
Banco de Dados I - Aula 03 - Conceitos de Sistemas de Banco de Dados
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER
 
Backup
Backup   Backup
Backup
 
Introdução a Bancos de Dados
Introdução a Bancos de DadosIntrodução a Bancos de Dados
Introdução a Bancos de Dados
 
Introdução a modelagem de dados - Banco de Dados
Introdução a modelagem de dados - Banco de DadosIntrodução a modelagem de dados - Banco de Dados
Introdução a modelagem de dados - Banco de Dados
 
Segurança da Informação - Aula 4 - Malwares
Segurança da Informação - Aula 4 - MalwaresSegurança da Informação - Aula 4 - Malwares
Segurança da Informação - Aula 4 - Malwares
 
Seminario seguranca da informacao
Seminario seguranca da informacaoSeminario seguranca da informacao
Seminario seguranca da informacao
 
LGPD Lei Geral de Proteção de Dados Pessoais
LGPD Lei Geral de Proteção de Dados PessoaisLGPD Lei Geral de Proteção de Dados Pessoais
LGPD Lei Geral de Proteção de Dados Pessoais
 
Banco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de DadosBanco de Dados I - Aula 09 - Normalização de Dados
Banco de Dados I - Aula 09 - Normalização de Dados
 
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
5- Modelo entidade Relacionamento - Cardinalidade - Profª Cristiane Fidelix
 
Banco de Dados II: MER (aula 1)
Banco de Dados II: MER (aula 1)Banco de Dados II: MER (aula 1)
Banco de Dados II: MER (aula 1)
 
Segurança da Informação
Segurança da InformaçãoSegurança da Informação
Segurança da Informação
 
Aula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdfAula 01 - Fundamentos de Banco de Dados (2).pdf
Aula 01 - Fundamentos de Banco de Dados (2).pdf
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 

En vedette

Fundamentos de banco de dados 02 caracteristicas e vantagens sgbd
Fundamentos de banco de dados   02 caracteristicas e vantagens sgbdFundamentos de banco de dados   02 caracteristicas e vantagens sgbd
Fundamentos de banco de dados 02 caracteristicas e vantagens sgbd
Rafael Pinheiro
 
Não faça como Bin Laden e Abadia - Utilize a Esteganografia Digital para o BEM
Não faça como Bin Laden e Abadia - Utilize a Esteganografia Digital para o BEMNão faça como Bin Laden e Abadia - Utilize a Esteganografia Digital para o BEM
Não faça como Bin Laden e Abadia - Utilize a Esteganografia Digital para o BEM
Semana da Computação da UFSCar
 
Apresentacao banco de dados moveis
Apresentacao   banco de dados moveisApresentacao   banco de dados moveis
Apresentacao banco de dados moveis
Diogenes Freitas
 
Integridade de dados e administração de segurança em SGBDs
Integridade de dados e administração de segurança em SGBDsIntegridade de dados e administração de segurança em SGBDs
Integridade de dados e administração de segurança em SGBDs
Semana da Computação da UFSCar
 
Apostila auditoria e segurança de sistemas
Apostila auditoria e segurança de sistemasApostila auditoria e segurança de sistemas
Apostila auditoria e segurança de sistemas
Capitu Tel
 

En vedette (20)

Segurança banco de dados
Segurança banco de dadosSegurança banco de dados
Segurança banco de dados
 
Banco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de ConcorrênciaBanco de Dados - Transações e Controle de Concorrência
Banco de Dados - Transações e Controle de Concorrência
 
Auditoria de sistemas de informação
Auditoria de sistemas de informaçãoAuditoria de sistemas de informação
Auditoria de sistemas de informação
 
Fundamentos de banco de dados 02 caracteristicas e vantagens sgbd
Fundamentos de banco de dados   02 caracteristicas e vantagens sgbdFundamentos de banco de dados   02 caracteristicas e vantagens sgbd
Fundamentos de banco de dados 02 caracteristicas e vantagens sgbd
 
Aula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoAula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de Interação
 
DER - Diagrama de Entidade e Relacionamentos
DER - Diagrama de Entidade e RelacionamentosDER - Diagrama de Entidade e Relacionamentos
DER - Diagrama de Entidade e Relacionamentos
 
SGBD
SGBDSGBD
SGBD
 
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativos
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativosSegurança da informação - Aula 3 - Ciclo de vida, classificação de ativos
Segurança da informação - Aula 3 - Ciclo de vida, classificação de ativos
 
Banco de Dados Conceitos
Banco de Dados ConceitosBanco de Dados Conceitos
Banco de Dados Conceitos
 
Modelos de banco de dados
Modelos de banco de dadosModelos de banco de dados
Modelos de banco de dados
 
The Woman
The WomanThe Woman
The Woman
 
Controle de Acesso
Controle de AcessoControle de Acesso
Controle de Acesso
 
Não faça como Bin Laden e Abadia - Utilize a Esteganografia Digital para o BEM
Não faça como Bin Laden e Abadia - Utilize a Esteganografia Digital para o BEMNão faça como Bin Laden e Abadia - Utilize a Esteganografia Digital para o BEM
Não faça como Bin Laden e Abadia - Utilize a Esteganografia Digital para o BEM
 
ITIL Security - Uma Visão de Segurança por Processos
ITIL Security - Uma Visão de Segurança por ProcessosITIL Security - Uma Visão de Segurança por Processos
ITIL Security - Uma Visão de Segurança por Processos
 
Segurança no MySQL
Segurança no MySQLSegurança no MySQL
Segurança no MySQL
 
Apresentacao banco de dados moveis
Apresentacao   banco de dados moveisApresentacao   banco de dados moveis
Apresentacao banco de dados moveis
 
Integridade de dados e administração de segurança em SGBDs
Integridade de dados e administração de segurança em SGBDsIntegridade de dados e administração de segurança em SGBDs
Integridade de dados e administração de segurança em SGBDs
 
Sistemas Distribuídos - Modelos Arquitetônicos
Sistemas Distribuídos - Modelos ArquitetônicosSistemas Distribuídos - Modelos Arquitetônicos
Sistemas Distribuídos - Modelos Arquitetônicos
 
Iso27001 sgsi
Iso27001 sgsiIso27001 sgsi
Iso27001 sgsi
 
Apostila auditoria e segurança de sistemas
Apostila auditoria e segurança de sistemasApostila auditoria e segurança de sistemas
Apostila auditoria e segurança de sistemas
 

Similaire à Segurança em banco de dados

Introdução a segurança da informação
Introdução a segurança da informaçãoIntrodução a segurança da informação
Introdução a segurança da informação
neemiaslopes
 
Estudo de caso segurança computação distribuída
Estudo de caso   segurança computação distribuídaEstudo de caso   segurança computação distribuída
Estudo de caso segurança computação distribuída
Ricardo Nagel
 
Segurança de informação1
Segurança de informação1Segurança de informação1
Segurança de informação1
Simba Samuel
 
Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS
Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAASSistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS
Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS
Adriano Teixeira de Souza
 

Similaire à Segurança em banco de dados (20)

Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
Banco de Dados II: Aspectos de Segurança em Banco de Dados (aula 13)
 
Seguranca e Criptografia de Dados
Seguranca e Criptografia de DadosSeguranca e Criptografia de Dados
Seguranca e Criptografia de Dados
 
Aula 2 banco de dados
Aula 2   banco de dadosAula 2   banco de dados
Aula 2 banco de dados
 
Tech segurança na nuvem
Tech   segurança na nuvemTech   segurança na nuvem
Tech segurança na nuvem
 
Segurança em sistemas distribuídos
Segurança em sistemas distribuídosSegurança em sistemas distribuídos
Segurança em sistemas distribuídos
 
Modelo de segurança OPC UA
Modelo de segurança OPC UAModelo de segurança OPC UA
Modelo de segurança OPC UA
 
Bd rel
Bd relBd rel
Bd rel
 
Introdução a segurança da informação
Introdução a segurança da informaçãoIntrodução a segurança da informação
Introdução a segurança da informação
 
Estudo de caso segurança computação distribuída
Estudo de caso   segurança computação distribuídaEstudo de caso   segurança computação distribuída
Estudo de caso segurança computação distribuída
 
Introdução a segurança da informação e mecanismo e proteção
Introdução a segurança da informação e mecanismo e proteçãoIntrodução a segurança da informação e mecanismo e proteção
Introdução a segurança da informação e mecanismo e proteção
 
Introdução a Segurança da Informação e mecanismos de Proteção
Introdução a Segurança da Informação e mecanismos de ProteçãoIntrodução a Segurança da Informação e mecanismos de Proteção
Introdução a Segurança da Informação e mecanismos de Proteção
 
Segurança de informação1
Segurança de informação1Segurança de informação1
Segurança de informação1
 
Aula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de DadosAula 4 - Sistemas Gerenciadores de Banco de Dados
Aula 4 - Sistemas Gerenciadores de Banco de Dados
 
Sql server 2016 discovery day
Sql server 2016   discovery daySql server 2016   discovery day
Sql server 2016 discovery day
 
Criptografia P2P - Comunicadores Instantâneos
Criptografia P2P - Comunicadores InstantâneosCriptografia P2P - Comunicadores Instantâneos
Criptografia P2P - Comunicadores Instantâneos
 
SEGURANÇA DE REDES.ppt
SEGURANÇA DE REDES.pptSEGURANÇA DE REDES.ppt
SEGURANÇA DE REDES.ppt
 
Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS
Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAASSistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS
Sistemas Distribuídos - Aspectos de Segurança em Sistemas Distribuídos e JAAS
 
Artigo Cloud Computing
Artigo Cloud ComputingArtigo Cloud Computing
Artigo Cloud Computing
 
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
Aula 04 - Curso GRATUITO EAD de Desenvolvimento Seguro de Software com Alcyon...
 
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_sox
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_soxAuditoria de banco_de_dados_sql_server_em_conformidade_com_a_sox
Auditoria de banco_de_dados_sql_server_em_conformidade_com_a_sox
 

Segurança em banco de dados

  • 1. Segurança em Banco de Dados  Arthur Henrique Ataíde de Azevedo  Edkarla Andrade de Castro  Paulo Roberto de Lima Serrão
  • 2. Segurança em Banco de Dados  Aspectos Gerais de segurança;  Evitar violação de consistência dos dados;  Segurança de acesso(usuários e aplicações);  Segurança contra falhas(recovery);  Manutenção de histórico de atualizações (Log) e backups do BD;
  • 3. Segurança em Banco de Dados  Segurança com Banco de dados livres (mysql);  Segurança com Banco de dados proprietários (Oracle);  Consequencias de não ter um ambiente seguro;  Recomendações para um ambiente seguro;  Referências.
  • 4. Aspectos Gerais de Segurança Porque devemos ter segurança em um Banco de Dados? Possuir informação hoje é ganhar agilidade, competitividade, previsibilidade, dinamismo, portanto, possuir informação é o mesmo que possuir um diferencial, uma vantagem competitiva. Uma informação útil pode ser usada a favor ou contra você ou sua empresa. Por isso é importante que se possua informações corretas e uma forma eficiente de protegê-las, já que se algum dado crítico for alterado, destruído, ou divulgado sem autorização pode acarretar em prejuízos tanto para a empresa ou instituição, como para seus clientes ou usuários.
  • 5. Aspectos Gerais de Segurança Os princípios da segurança da informação são:  confidencialidade: garantia de que a informação é acessível somente por pessoas autorizadas a terem acesso;  integridade: a informação é alterada somente pelas pessoas autorizadas;  disponibilidade: garantia de que as pessoas autorizadas obtenham acesso à informação e aos ativos correspondentes sempre que necessário. Dessa forma, garantir a segurança da informação é fazer com que as informações permaneçam confidenciais, integras e disponíveis para a pessoa certa na hora certa.
  • 6. Aspectos Gerais de Segurança De acordo com SÊMOLA (2003, p.12), os principais motivos para se proteger uma informação são : o seu valor, o impacto de sua ausência, o impacto resultante de seu uso por terceiros, a importância de sua existência e a relação de dependência com a sua atividade, e a informação deve ser protegida em todo o seu ciclo de vida, desde sua criação, manuseio, armazenamento transporte e descarte. Os SGBDs para garantir a segurança das informações, devem possuir controles de redundancia, concorrencia e a capacidade de manter os dados integros, aplicando as restrições de integridade.
  • 7. Controle de Redundância  A redundância é caracterizada pela presença de um elemento de informação duplicado.  Sistemas de banco de dados devem ter capacidade de garantir que os dados não sejam redundantes.  Esse controle é usualmente conhecido como integridade referencial.  O controle de redundância não permite incluir dois registros com a mesma chave primária e excluir um registro que possua relacionamento com outras tabelas (chave estrangeira).  Com isto, o controle de redundância evita a inconsistência de dados.  Este padrão de integridade é o fundamento do modelo relacional, por isso é necessário que o banco de dados tenha a capacidade de gerenciar o controle de redundância.
  • 8. Controle de Concorrência  É um esquema usado para garantir que as transações são executadas de forma segura.  Uma das qualidades dos sistemas desenvolvidos é a multiprogramação que permite a execução de diversas transações visando o compartilhamento do processador. Nesse ambiente multiprogramado diversas transações podem executar concorrentemente. Por isso os sistemas precisam controlar a interação entre transações concorrentes com o objetivo de prevenir a violação da consistência do banco de dados.  Esse controle é feito por um conjunto de mecanismos definidos como esquemas de controle de concorrência.  Quando as transações são executadas concorrentemente a consistência do banco pode ser violada mesmo que cada transação individual esteja correta.  Cabe ressaltar que nesse ambiente é importante o conceito da seriabilidade. É necessário que qualquer escalonamento produzido ao se processar um conjunto de transações concorrentemente seja computacionalmente equivalente a um escalonamento produzindo executando essas transações serialmente em alguma ordem.  Diz-se que um sistema que garante esta propriedade assegura a seriabilidade.
  • 9. Controle de Concorrência  Os escalonamentos podem ser seriais e não-seriais.  Escalonamentos seriais consistem de uma seqüência de instruções de várias transações onde as instruções pertencentes a uma única transação aparecem juntas.  No escalonamento não serial as operações de uma transação são executadas intercaladas com operações de outra transação.  Os mecanismos de controle de concorrência são classificados em mecanismos otimistas e pessimistas.  Os mecanismos de controle de concorrência pessimistas são aqueles que buscam impedir antecipadamente os tipos de acesso concorrente a dados que podem gerar inconsistências. Isso pode ser feito bloqueando temporariamente o acesso de dados a algumas aplicações enquanto outra está acessando.  Os mecanismos de controle de concorrência otimistas, ao invés de tentar evitar antecipadamente acessos inconsistentes permitem o livre acesso.  No final da execução das aplicações é iniciado um processo que examina a incidência de inconsistência nos dados graças ao acesso concorrente.
  • 10. Restrição de Integridade  As restrições de integridade oferecem meios de assegurar que mudanças feitas no banco de dados por usuários autorizados não resultem em perda de consistência dos dados.  As restrições de integridade podem resguardar o banco de dados contra danos acidentais.  Uma restrição de integridade pode ser um predicado arbitrário que reaplica ao banco de dados.  No entanto, os predicados arbitrários podem ser custosos para testes. Dessa forma é preciso limitar-se em restrições de integridade que possam ser testadas com um mínimo custo adicional.  A forma mais elementar de restrição de integridade é a restrição de domínio.  Em um sistema é possível que diversos atributos tenham um mesmo domínio.  A definição de restrição de domínio não somente permite testar os valores inseridos no banco de dados como possibilita testar as consultas assegurando que as comparações façam sentido.
  • 11. Restrição de Integridade  A integridade referencial é usada para garantir que um valor que aparece em uma relação para um dado conjunto de atributos também apareça para um certo conjunto de atributos em outra relação.  No modelo E-R (Entidade – Relacionamento), o esquema do banco de dados relacional derivado de diagramas E-R resulta em um conjunto de relacionamentos que possui regras de integridade referencial.  Outro ponto de origem de restrições de integridade referencial são os conjuntos de entidades fracas. Isto porque o esquema relacional para cada conjunto de entidades fracas inclui uma chave estrangeira que leva a uma restrição de integridade referencial.  As modificações em banco de dados podem violar as regras de integridade referencial.
  • 12. Evitar violação de consistência dos dados Para evitar a violação dos dados e garantir a consistência, confiabilidade, podemos adotar algums mecanismos de segurança entre esses mecanismos podemos destacar: Mecanismos de controles fisicos  portas / trancas / paredes / blindagem /etc... Mecanismos de controles lógicos  Mecanismos de criptografia  Assinatura digital  Mecanismos de garantia da integridade da informação  Mecanismos de controle de acesso e etc... Dentre os mecanismos de controle lógico, vamos destacar a criptografia.
  • 13. Criptografia A Criptografia é a técnica pela qual a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário, o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ler a informação com facilidade.
  • 14. A criptografia tem quatro objetivos principais :  confidencialidade da mensagem: só o destinatário autorizado deve ser capaz de extrair o conteúdo da mensagem da sua forma cifrada. Além disso, a obtenção de informação sobre o conteúdo da mensagem (como uma distribuição estatística de certos caracteres) não deve ser possível, uma vez que, se o for, torna mais fácil a análise criptográfica.  integridade da mensagem: o destinatário deverá ser capaz de determinar se a mensagem foi alterada durante a transmissão.  autenticação do remetente: o destinatário deverá ser capaz de identificar o remetente e verificar que foi mesmo ele quem enviou a mensagem.  não-repúdio ou irretratabilidade do emissor: não deverá ser possível ao emissor negar a autoria da mensagem.
  • 15. Criptografia  Nem todos os sistemas ou algoritmos criptográficos são utilizados para atingir todos os objetivos listados acima.  Normalmente, existem algoritmos específicos para cada uma destas funções.  Mesmo em sistemas criptográficos bem concebidos, bem implementados e usados adequadamente, alguns dos objetivos acima não são práticos (ou mesmo desejáveis) em algumas circunstâncias. Por exemplo, o remetente de uma mensagem pode querer permanecer anônimo, ou o sistema pode destinar-se a um ambiente com recursos computacionais limitados.  Tipos de Criptografia, MD2, MD4, SHA, Hash, MD5, MD6 (não utilizavél).  Os mais indicados e comuns são o MD5, o SHA e o Hash
  • 16. Criptografia  MD5 (Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, e muito utilizado por softwares com protocolo ponto-a-ponto (P2P, ou Peer-to-Peer, em inglês) na verificação de integridade de arquivos e logins.  Foi desenvolvido em 1991 por Ronald Rivest para suceder ao MD4 que tinha alguns problemas de segurança. Por ser um algoritmo unidirecional, uma hash md5 não pode ser transformada novamente no texto que lhe deu origem. O método de verificação é, então, feito pela comparação das duas hash (uma da mensagem original confiável e outra da mensagem recebida).  O MD5 também é usado para verificar a integridade de um arquivo através, por exemplo, do programa md5sum, que cria a hash de um arquivo. Isto pode-se tornar muito útil para downloads de arquivos grandes, para programas P2P que constroem o arquivo através de pedaços e estão sujeitos a corrupção dos mesmos. Como autenticação de login é utilizada em vários sistemas operacionais unix e em muitos sites com autentificação.
  • 17. Criptografia  SHA (Secure Hash Algorithm) está relacionada com as funções criptográficas. A função mais usada nesta família, a SHA-1, é usada numa grande variedade de aplicações e protocolos de segurança, incluindo TLS, SSL, PGP, SSH, S/MIME e IPSec. SHA-1 foi considerado o sucessor do MD5. Ambos têm vulnerabilidades comprovadas. Em algumas correntes, é sugerido que o SHA-256 ou superior seja usado para tecnologia crítica. Os algoritmos SHA foram desenhados pela National Security Agency (NSA) e publicados como um padrão do governo Norte-Americano.  O primeiro membro da família, publicado em 1993, foi oficialmente chamado SHA; no entanto, é frequentemente chamado SHA-0 para evitar confusões com os seus sucessores. Dois anos mais tarde, SHA-1, o primeiro sucessor do SHA, foi publicado. Desde então quatro variantes foram lançadas com capacidades de saída aumentadas e um design ligeiramente diferente: SHA-224, SHA- 256, SHA-384, e SHA-512 — por vezes chamadas de SHA-2 .
  • 18. Segurança de acesso (usuários e aplicações)  A preocupação com a criação e manutenção de ambientes seguros têm sido tarefas cruciais de administradores de redes, de sistemas operacionais e de bancos de dados.  Pesquisas mostram que boa parte dos ataques, roubos de informações e acessos não-autorizados são feitos por pessoas que pertencem à organização alvo.  Isso faz com que estes profissionais se desdobrem para criar e usar artifícios para eliminar os acessos não-autorizados ou minimizar as chances de sucesso das tentativas de invasão (internas ou externas).  Os controles de acesso em sistemas de informação devem assegurar que todos os acessos diretos ao sistema ocorram exclusivamente de acordo com as modalidades e as regras pré-estabelecidas, e observadas por políticas de proteção.
  • 19. Segurança de acesso (usuários e aplicações) A figura abaixo apresenta um sistema de controle de acesso incluindo assuntos (usuários e processos) que alcançam objetos (dados e programas) com as operações (ler, escrever e executar).
  • 20. Segurança de acesso (usuários e aplicações) A figura mostra um sistema de controle de acesso composto basicamente de dois componentes:  as Políticas de Acesso, que indica as modalidades e tipos de acesso a serem seguidas, e  os Procedimentos de Acesso, que, com base nas regras de acesso, os pedidos de acesso podem ser permitidos, negados ou podem ser pedidas modificações no pedido de acesso. Grande parte dos SGBDs atuais controla o acesso aos dados armazenados através de Listas de Controle de Acesso (Access Control List, ACL) . As ACLs são tabelas especiais que possuem informações sobre os privilégios que cada usuário pode ter em determinado banco de dados.
  • 21. Segurança de acesso (usuários e aplicações)  Quando um usuário se conecta ao banco de dados “sua identidade” é determinada pela máquina de onde ele conectou e o nome de usuário que ele especificou.  O sistema concede privilégios de acordo com sua identidade e com o que ele deseja fazer.  Assim é possível que usuários provenientes de diferentes lugares da internet possuam o mesmo nome de usuário e privilégios totalmente diferentes um do outro.  O controle de acesso é feito em duas etapas: primeiramente o servidor confere se você pode ter acesso ou não, em seguida, assumindo que você pode conectar, o servidor verifica cada requisição feita para saber se você tem ou não privilégios suficientes para realizar a operação. Por exemplo, se você tentar selecionar linha de uma tabela em um banco de dados ou apagar uma tabela do banco de dados, o servidor se certifica que você tem o privilégio select para a tabela ou o privilégio drop para o banco de dados.
  • 22. SQL injection O que é ? A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entrada de dados de uma aplicação.
  • 23. SQL injection  Para ilustrar o conceito de SQL Injection, a seguinte simulação pode ser realizada. Imaginemos que um script de validação de acesso de usuários tenha sido desenvolvido como segue:  Nas linhas 3 e 4, as variáveis $usuario e $senha, respectivamente, recebem o conteúdo submetido por um formulário através do método POST. Eis a fonte do problema.  Suponha que a seguinte entrada tenha sido informada no campo usuário no formulário chamador do script de validação.
  • 24. SQL injection  Logo, a query string resultante será:  Se nenhuma outra validação for realizada, o usuário mal intencionado terá efetuado login no sistema, sem ao menos informar um usuário contido na tabela. Isto foi possível pois o valor de entrada informado não recebeu o tratamento devido, sendo adicionado à instrução para ser executado. Vale ressaltar que as validações apresentadas no exemplo são apenas ilustrativas, havendo a necessidade de checagens mais eficazes para um script de validação de acesso.
  • 25. SQL injection Impossibilitando o uso de SQL Injection  Para que se esteja livre da utilização da SQL Injection, certas providências devem ser tomadas. Algumas das ações serão realizadas no servidor de banco de dados, outras devem ser garantidas pelo código fonte.  Deve-se tomar cuidado com a configuração do usuário que estabelece a conexão com o banco de dados.  O ideal é que as permissões de acesso deste usuário estejam restritamente limitadas às funções que irá realizar, ou seja, para a exibição de um relatório, a conexão com o banco de dados deve ser realizada por um usuário com permissões de leitura e acesso somente às tabelas necessárias para sua operação.
  • 26. SQL injection  Todos os valores originados da coleta de dados externos, devem ser validadas e tratadas a fim de impedir a execução de eventuais instruções destrutivas ou operações que não sejam as esperadas.  Um tratamento básico para a execução de querys com variáveis contendo valores informados pelo usuário:
  • 27. SQL injection  Com a utilização da função addslashes() será adicionada uma barra invertida antes de cada aspa simples e aspa dupla encontrada, processo conhecido como escape. Se a diretiva de configuração do PHP magic_quotes_gpc estiver ativada, o escape é realizado automaticamente sobre os dados de COOKIES e dados recebidos através dos métodos GET e POST. Neste caso, não deve ser efetuado o tratamento com addslashes(). A função get_magic_quotes_gpc(), disponível nas versões do PHP a partir da 3.0.6, retorna a configuração atual da diretiva magic_quotes_gpc.  Abaixo, a query string resultante da aplicação do tratamento mencionado:
  • 28. SQL injection  Em muitos bancos de dados, existem funções específicas para o tratamento de variáveis em query strings, o que diminui a compatibilidade do código fonte para operação com outros sistemas de banco de dados.  Outra dica importante é evitar a exibição das mensagem de erro em um servidor de aplicação em produção, pois geralmente nos erros ou alertas são exibidos caminhos de diretórios do sistema de arquivos e informações à respeito do esquema do banco de dados, podendo comprometer a segurança do sistema.
  • 29. Segurança contra falhas (recovery)  A recuperação/tolerância a falhas tem por objetivo restaurar o BD para um estado de integridade, após a ocorrência de uma falha;  Os mecanismos de recuperação baseiam-se na utilização de formas de redundância que quase duplicam o BD, utilizando: Backup e transaction log
  • 30. Manutenção de histórico de atualizações(Log) e backups do BD  Os backups são cópias de segurança do BD, que são executados periodicamente e constituem um ponto de partida para a recuperação do BD após a ocorrência de uma falha, independentemente da sua gravidade;  Refletem uma situação passada, donde a reposição a partir de um backup implica perder todas as atualizações posteriores à realização do mesmo.
  • 31. Manutenção de histórico de atualizações(Log) e backups do BD  Uma forma de minimizar esta situação é aumentando a periodicidade dos backups, o que é um processo pesado, consumidor de recursos e que pode obrigar a paradas dos sistemas;  A periodicidade dos backups depende do valor dos dados, do seu volume e da frequência com que são acedidos e alterados;
  • 32. Manutenção de histórico de atualizações(Log) e backups do BD  O backup é um mecanismo de reposição do BD.  Os transaction logs são mecanismos de repetição das transacções ocorridas desde o último backup (rollforward);  Normalmente para se refazer uma transação é necessário o ficheiro de transaction log, onde está guardada uma identificação da transação e uma cópia dos dados atualizados por ela (after image);
  • 33. Manutenção de histórico de atualizações(Log) e backups do BD  Sendo esta a forma mais comum de resolver os problemas provocados por uma falha, têm que existir outros mecanismos que permitam o roll back das transacções não terminadas, ocorridos durante a execução não sucedida das mesmas;  Donde o ficheiro transaction log necessita igualmente de guardar os dados anteriores ao início da execução da transacção (before- images)
  • 34. Manutenção de histórico de atualizações(Log) e backups do BD É da conjugação destes dois mecanismos - backups e transaction logs , que se garantem duas das características fundamentais das transações:  Atomicidade (desfazendo uma transação não sucedida)  Persistência (refazendo os efeitos de uma transação bem sucedida)
  • 35. Tipo de Falhas Falha de disco - o(s) disco(s) onde o BD está armazenado fica(m) inutilizado(s). É a falha considerada mais grave e que obriga à reconstrução de todo o SGBD; Falha de sistema - pode resultar de problemas de hardware ou software, não sendo possível garantir a validade dos dados. Implica repor a BD a partir do seu último estado de integridade.
  • 36. Tipo de Falhas Falha de transação - é a mais inofensiva e recupera-se recorrendo ao ficheiro transaction log e às before images da transação que não foi bem sucedida. Em qualquer processo de recuperação recorre- se ao rollback das transações efetuadas até ao momento em que os transaction log e os ficherios da base estão sincronizados, para se poderem desfazer todas as transações decorridas desde então.
  • 37. Tipo de Falhas Esse momento coincide com o último backup, o qual se muito afastado no tempo, obriga a um processo moroso e complexo de recuperação do BD. Tn Tn+1 Tn+2 Tn+3 Último backup Falha de disco
  • 38. Tipo de Falhas Para evitar este tipo de situações, recorre- se a marcas de segurança, conhecidas por checkpoints. Basicamente, para reduzir o número de acessos aos discos, nos ficheiros de transaction log as atualizações são realizadas na memória RAM, em buffers, sendo posteriormente escritos em disco;
  • 39. Tipo de Falhas Quando ocorre uma falha, o conteúdo desses buffers pode perder-se, ou pelo menos pode não existir uma garantia de validade do seu conteúdo; Assim os checkpoints registram os momentos em que o conteúdo dos buffers foi escrito nos discos, definindo-se um momento em que o transaction log e o BD estão sincronizados.
  • 40. Tipo de Falhas Tn Tn+1 Tn+2 Tn+3 Último backup Falha de Sistema
  • 41. Auditoria em Banco de Dados  É o conjunto de ações para verificar o que os usuários estão fazendo.  Muitas empresas fazem isso para os fins de segurança. Isso é para garantir que usuários não autorizados não estão acessando uma parte do banco de dados ou a estrutura principal que não é permitida.  A maioria das informações críticas de uma empresa, 90% ou mais, é mantida no banco de dados.  É por isso que a auditoria do banco de dados é tão crucial para a proteção da segurança.  Se determinada informação é comprometida, ela pode ser crítica para suas operações.
  • 42. Segurança em Banco de dados Livres (Mysql)  O MySQL sem dúvida nenhuma, é o banco de dados open source mais conhecido do mercado e provavelmente o mais utilizado.  Ele é rápido, simples, funcional e hoje implementa recursos que o colocam próximo a grandes nomes como Oracle.  Até pouco tempo um recurso extremamente útil e que era fator que impedia utilização em várias empresas, é o suporte à transação. Desde o lançamento da versão MAX,o MySQL já dá suporte a transações, derrubando este impecílio à sua utilização. Mais tarde, com a introdução das tabelas InnoDB, o MySQL ganhou mais um poderoso recurso: integridade referencial.  Assim o MySQL passa a implementar os principais conceitos que aprendemos nos livros sobre banco de dados, fazendo-o ser uma alternativa viável para ser adotado no desenvolvimento de aplicativos.
  • 43. Segurança no sistema (Mysql)  Antes mesmo de pensar como um administrador de banco de dados (DBA), devemos pensar na segurança do sistema.  Algumas considerações devem ser analisadas para evitar que, mesmo implementando controles de acessos a tabelas, banco de dados, o administrador seja surpreendido pela perda de dados pelo fato de alguém ter "acidentalmente" apagado o repositório do MySQL.  Apesar de implementar um sistema de validação robusto, o MySQL não tem como controlar acessos que deveriam ser bloqueados pelo sistema operacional.  Acesso a arquivos, permissóes de usuários do sistema, ou mesmo do usuário sob o qual roda o servidor devem ser especialmente preparados para evitar que haja corrupção ou quebra da privacidade dos dados.  Resumindo, apenas o banco de dados MySQL deve ter acesso à aos arquivos de dados do MySQL.
  • 44. Sistema de arquivos (Mysql)  Como já foi falado anteriormente, apenas o banco de dados deveria ter acesso aos arquivos onde são armazenados os dados.  No mundo Linux, esta restrição é bem simples de ser implementada, já que ele tem um esquema bem forte de autenticação que restringe o poder dos usuários do sistema.  Apenas o usuário root não pode ter o acesso bloqueado, já que ele pode redefinir as restrições estabelecidas.  Para evitar qualquer tipo de problemas, apenas o usuário sob o qual o servidor vai rodar, deve ter acesso ao diretório onde o MySQL guarda os arquivos de dados.  Qualquer outro usuário deve ter o acesso a este diretório bloqueado tanto para leitura como para escrita.  O acesso de escrita deve ser bloqueado por motivos óbvios: ninguém, a não ser o próprio banco de dados deve escrever nos arquivos de dados.
  • 45. Sistema de arquivos (Mysql) Já a permissão de leitura merece uma explicação mais detalhada.  Ao bloquear o acesso à escrita nos arquivos do MySQL, garantimos que ninguém poderá fazer alterações nos arquivos, porém não conseguimos garantir o sigilo destes dados.  Não é preciso nem decifrar o conteúdo dos arquivos para ler os dados ali armazenados, basta pegar os arquivos e, em outra máquina copiar os arquivos no diretório do MySQL e pronto. Você tem acesso a tudo que o outro banco de dados guardou.  Para preservar o sigilo nos dados portanto, o acesso de leitura também deve ser bloqueado para os outros usuários que não o responsável pelo banco de dados.
  • 46. Usuários do sistema (Mysql)  Para acessar o banco de dados, não é necessário criar uma conta no sistema operacional, pois o MySQL tem sua própria estrutura de validação desvinculando os usuários do banco de dados dos usuários do sistema.  O único usuário do sistema que deve ter um tratamento especial é o que possui o processo servidor.  O MySQL, como qualquer processo no Linux possui um dono e conseqüentemente ele vai ter os mesmos privilégios que este dono tem no sistema.  Assim a política adotada para este usuário é como em qualquer outra: a do menor privilégio.  Se o servidor acessa só o banco de dados, por que dar poder ao dono do processo servidor para ler ou escrever arquivos externos ao banco de dados? Se o propósito do dono do banco de dados é apenas fazer o servidor funcionar, por que dar acesso de login a ele?
  • 47. Usuários do sistema (Mysql)  Existem algumas situações que o admistrador deve dar acesso ao sistema de arquivos para o dono do banco de dados, pois algumas funções no MySQL precisam deste acesso (LOAD DATA por exemplo).  Se este for o caso, o administrador deve ter o cuidado para não deixar aberto acesso a arquivos importantes. É óbvio, mas existem administradores que esquecem deste detalhe.  Com um banco de dados preparado e um comando LOAD DATA é possível pegar, por exemplo, os dados do arquivo /etc/passwd para tentar obter as senhas dos usuários.  Uma observação importante é que o dono do banco de dados NUNCA deve ser o root.  O motivo é óbvio: este usuário tem acesso a tudo, e acabamos de ver acima que este acesso indesejado é extremamente perigoso ao sistema.
  • 48. Usuários do sistema (Mysql)  Um administrador inexperiente poderia pensar que apenas o super- usuário do sistema pode ter acesso ao banco de dados e assim ele estaria seguro, mas o que acontece é que do outro lado, existe alguém desconhecido que vai enviar uma consulta ao banco de dados que está funcionando como super-usuário e que pode fazer qualquer coisa.  O ideal portanto é que exista um usuário apenas para o banco de dados, sem direito a fazer mais nada que não seja manipular os dados do próprio banco de dados.  Aplicando estes procedimentos no servidor, estaremos garantindo a integridade do sistema, pois o usuário dono do servidor MySQL não tem privilégios.  Também garantimos o sigilo dos dados, pois nenhum outro usuário vai ter acesso aos arquivos do banco de dados.  Assim estamos implementando segurança no MySQL antes mesmo de fazer o servidor MySQL funcionar.
  • 49. Sistema de autenticação (MySQL)  O MySQL implementa um sistema de autenticação bastante robusto que é realizado em dois estágios. O primeiro verifica se o usuário pode conectar ao banco de dados e o segundo verifica se o usuário tem privilégios para realizar operações no banco de dados. O segundo estágio, portanto, é verificado a cada operação realizada pelo usuário.  Este sistema de privilégios é armazenado usando a própria estrutura do sistema em um banco de dados especial chamado mysql.  Pela natureza dos dados que este banco de dados armazena, ele deve ter o acesso permitido apenas para o usuário root do MySQL.  Os usuários comuns não necessitam de acessar este banco de dados, principalmente a tabela user, onde estão armazenadas as senhas dos usuários.
  • 50. Sistema de autenticação (MySQL)  Para aceitar a conexão de um usuário, o MySQL não considera apenas o próprio usuário, mas também a máquina de onde o usuário está conectando. Dessa forma, você pode permitir o acesso de um determinado usuário somente de algumas máquinas específicas, bloqueando seu acesso de outros hosts que podem não ser confiáveis.  Existem duas maneiras de conceder privilégios aos usuários: Usando os comandos GRANT e REVOKE, ou Alterando diretamente as tabelas do banco de dados mysql.  A melhor escolha é usar os comandos GRANT/REVOKE, pois o MySQL já altera as tabelas automaticamente, não sendo necessário entender em detalhes o significado de cada tabela e suas respectivas colunas.  Se você alterar os privilégios manualmente além do risco de manipular dados de forma errada, vocé pode se esquecer de executar o comando FLUSH PRIVILEGES para tornar as alterações ativas.
  • 51. Sistema de autenticação (MySQL)  Ao criar um novo banco de dados, deixe que apenas o administrador do banco de dados tenha acesso completo.  Aos usuários comuns permita apenas acesso aos dados, evitando o acesso à estrutura do banco de dados.  Assim um usuário comum com acesso "completo" deveria ter acesso aos comandos INSERT, DELETE, UPDATE e SELECT.  Apenas o administrador do banco de dados deve ter acesso a comandos como DROP, CREATE ou ALTER.  Dessa forma vocé está permitindo a cada um apenas o que ele necessita para o processamento de dados.  Exemplificando, vamos definir um certo "Alfredo" como administrador do banco de dados "expedicao" que vai ter como usuários um tal "Luciano" que, por ser desenvolvedor, pode alterar a estrutura do banco de dados e o "Thiago" que é o usuário final, ou seja, ele apenas precisa manipular os dados armazenados.
  • 52. Sistema de autenticação (MySQL)  Para definir estes três usuários, basta executar a seguinte seqüência de comandos SQL:  > GRANT ALL PRIVILEGES ON expedicao.* TO Alfredo@localhost IDENTIFIED BY ’senha_do_alfredo’;  > GRANT SELECT,INSERT,UPDATE,DELETE,DROP,ALTER ON expedicao.* TO Luciano@localhost IDENTIFIED BY ’senha_do_luciano’;  > GRANT SELECT,INSERT,UPDATE,DELETE ON expedicao.* TO Thiago@localhost IDENTIFIED BY ’senha_do_thiado’;  Note que no exemplo acima, todos os usuários cadastrados têm acesso ao banco de dados apenas se estiverem conectando da máquina local, ou seja diretamente na máquina onde o servidor MySQL está rodando.  Para permitir acesso de outros hosts basta repetir a consulta para um usuário alterando localhost para o nome ou endereço IP da máquina de onde será permitido ao usuário conectar ao banco de dados.
  • 53. Sistema de autenticação (MySQL)  Você poderia ainda usar o curinga ’%’ indicando que o usuário pode se conectar de qualquer host, mas isto não é recomendado, pois a priori você não deve confiar em máquinas às quais você não tem informações.  É muito importante que o administrador entenda pelo menos basicamente o funcionamento do sistema de privilégios do MySQL para evitar conceder a um usuário mais poder do que ele necessita.  São vários tipos de privilégios que um determinado usuário pode ter além de SELECT,INSERT,UPDATE,DELETE,DROP e ALTER mostrados acima.  É altamente recomendado fazer uma leitura no manual do MySQL para ver os privilégios disponíveis e como utilizá-los de forma correta.
  • 54. Conexão via rede (MySQL)  Ao conectar ao servidor MySQL localmente, tendo um sistema bem configurado o MySQL já pode ser considerado bem seguro.  Ao disponibilizar o acesso via rede, porém, criamos mais um ponto de vulnerabilidade deixando o sistema à mercê de ataques dos mais variados tipos.  O simples fato de deixar uma porta aberta já aguça a curiosidade de certos usuários para tentar usar esta porta aberta como entrada para derrubar serviços ou outras formas de "atrapalhar" o funcionamento do sistema.  Em sua instalação padrão, o MySQL inicia permitindo conexões locais e conexões via rede.  Na seção anterior, vimos como permitir que um usuário se conecte a partir de um host. O simples fato de não permitir a conexão de um usuário não siginifica que não teremos mais problemas porque a porta continua aberta para a rede.  Pensando nesta "porta aberta", é necessário implementar mecanismos para que os dados que trafegam por esta porta não sejam lidos por alguém que não o servidor e o cliente.
  • 55. Conexão via rede (MySQL)  Para ajudar a decidir como "esconder" os dados de crackers, devemos ter em mente como será desenvolvido o aplicativo que vai usar o banco de dados.  Se for um ambiente web, onde o servidor web e o MySQL estejam na mesma máquina, não há motivos para liberar o acesso via rede.  Neste caso o servidor deve ser iniciado com a opção --skip- networking que faz com que o MySQL funcione apenas com conexões locais via sockets. Se o aplicativo estiver em uma máquina e o servidor em outra como em ambientes cliente/servidor, ou mesmo web onde o servidor web está em uma máquina e o servidor MySQL em outra, esta opção não pode ser utilizada.  Nos casos onde o acesso a rede deve ser necessário, a primeira providência a ser tomada é permitir conexões aos usuários apenas das máquinas de onde eles têm permissão para acessar o banco de dados. Isto deve ser feito através dos comandos GRANT e REVOKE vistos anteriormente.
  • 56. A segunda providência é estabelecer uma conexão segura com o servidor. A senha no momento da autenticação não é transmitida em texto plano, porém o algoritmo de criptografia não é forte e pode ser facilmente quebrado.  Outro problema com a conexão estabelecida entre cliente e servidor é que todos os dados (requisições SQL e retorno dos dados) trafegam em texto plano e qualquer um rodando um sniffer pode ver o diálogo entre o servidor e o cliente.  Existem pelo menos duas soluções para este problema. A partir da versão 4.0.0, o MySQL tem suporte a SSL, que é um protocolo que utiliza diferentes algoritmos de criptografia para assegurar que os dados recebidos por uma rede pública são confiáveis.  Outra solução é criar uma VPN usando aplicativos como SSH que criam um túnel criptográfico entre dois hosts e o host remoto passa a enxergar o servidor como se estivesse rodando localmente.  Usando o MySQL com suporte a SSL, você pode, ao criar um usuário, informar ao servidor que este usuário precisa ser autenticado usando também atributos do SSL além dos dados padrão (usuário, senha, nome/IP do host). Basta para isto acrescentar a cláusula REQUIRE no comando GRANT.
  • 57. Exemplificando, vamos fazer com que a autenticação do usuário Alfredo seja feita com SSL.  > GRANT ALL PRIVILEGES ON expedicao.* TO Alfredo@localhost IDENTIFIED BY ’senha_do_alfredo’ REQUIRE SSL;  O manual do MySQL dá todas as informações passo a passo para criar certificados para o MySQL e como configurar o MySQL para utilizar acesso seguro via SSL. Recomendamos a sua leitura para implementar este recurso.  Se o servidor MySQL deve ser visto apenas na rede local, o acesso externo deve ser bloqueado. Você pode fazer isto com o próprio esquema de privilégios do MySQL, mas assim apenas o acesso ao banco de dados estará restrito e a porta continuará aberta para a rede externa. A melhor alternativa para evitar este acesso indesejado é com a implementação de um firewall. Se a rede externa não deve acessar o MySQL o próprio firewall se encarrega de filtrar o acesso. Dessa forma a porta de acesso ao MySQL será fechada para conexões externas.
  • 58. Segurança em Banco de dados Proprietário (Oracle)  A segurança do banco de dados pode ser classificada em duas categorias distintas: segurança de sistema e segurança de dados.  A segurança de sistema contém os mecanismos que controlam o acesso e o uso do banco de dados em um determinado nível do sistema.  Os mecanismos de segurança do sistema verificam se um usuário está autorizado a se conectar ao banco de dados, se a auditoria do banco de dados está ativa e quais operações de sistemas um usuário pode executar.  A segurança de sistema inclui combinações válidas de nome de usuários e senha, a quantidade de espaço em disco disponível para os objetos de esquema de um usuário e os limites de recurso de um usuário.
  • 59. Segurança em Banco de dados Proprietário (Oracle)  A segurança de dados inclui os mecanismos que controlam o acesso e o uso do banco de dados no nível de objeto de esquema incluindo quais usuários têm acesso a um objeto e a tipos específicos de ações que cada um pode executar.  Existem ferramentas adicionais que incrementam a segurança do Oracle Server, possibilitando um ambiente multiplataforma de maior escala. Entre elas podemos citar : Oracle Enterprise Manager (conhecido como OEM) Oracle Security Server Manager (conhecido como OSS).
  • 60. Segurança em Banco de dados Proprietário (Oracle) O Oracle Enterprise Manager ( OEM) é um conjunto de utilitários que são disponibilizados numa interface gráfica em modo usuário (GUI), que provêm meios para gerenciar uma ou mais bases de dados de um único computador. O OEM é composto por:  Um conjunto de ferramentas administrativas;  Um monitor de eventos que pode ser configurado para inspecionar situações específicas em sua base de dados;  Um agendador de tarefas para executar tarefas de manutenção em horários definidos;  Uma interface gráfica para o Recovery Manager Tools.
  • 61. Segurança em Banco de dados Proprietário (Oracle)  O Oracle Security Server Manager (OSS) pode ser utilizado para implementar uma estrutura mais complexa de segurança para dados mais sensíveis, com os seguintes aspectos:  Autenticação de usuário através de credenciais eletrônicas;  Assinatura Digital;  Single Sign On (SSO) .
  • 62. Segurança em Banco de dados Proprietário (Oracle)  Por se tratar de um banco de dados multiplataforma, sua segurança não pode ser resguardada na segurança do sistema operacional em que foi instalado.  Para isso, a instalação do Oracle segue uma política de depender o mínimo possível do sistema operacional, através da implementação de diversas medidas de segurança.  A primeira, e também mais básica, é a alteração das senhas dos usuários padrão do banco.  Usuários como System (senha: manager), Sys (senha: change_on_install) e DBSNMP (senha: dbsnmp) são instalados com tais senhas padrão e têm um alto nível de acesso ao banco, o que pode comprometer por completo a segurança do mesmo.
  • 63. Segurança em Banco de dados Proprietário (Oracle)  O servidor Oracle fornece controle arbitrário de acesso, o que é um meio de restringir o acesso às informações privilegiadas.  O privilégio apropriado deve ser atribuído por um usuário para que ele acesse um objeto de esquema.  Os usuários com privilégios apropriados podem concedê-los a outros segundo o seu critério.  O Oracle gerencia a segurança do banco de dados usando diversos recursos diferentes.  Entre eles: usuários, domínio de segurança, privilégios, Papeis e auditoria.
  • 64. Opções de Autenticação (Oracle)  Para acesso ao banco de dados, existem quatro formas de autenticação: Através de um arquivo de senhas; Autenticação herdada do sistema operacional (usuário autenticado previamente no sistema operacional); Arquivo de senhas e do sistema operacional; Autenticação nativa do banco de dados.  As três primeiras vão herdar confiabilidade do sistema operacional, o que pode vir a causar problemas.  A política é sempre confiar no banco de dados, autenticando somente por ele e implementando uma boa política de senhas.  Tal método de autenticação consta na view V$SYSTEM_PARAMETER
  • 65. Usuários (Oracle)  Abrange usuários e esquema do banco de dados onde cada banco de dados tem uma lista de nomes de usuários.  Para acessar um banco de dados, um usuário deve tentar uma conexão com um nome de usuário valido.  Cada nome de usuário tem uma senha associada para evitar o uso sem autorização.  São implementados ainda diferentes perfis de usuário para diferentes tarefas no Oracle, tendo em vista que cada aplicação/usuário tem a sua necessidade de acesso.  Existe ainda a possibilidade de proteger os perfis com senha, o que é uma excelente medida.  Além dessas medidas, existe o uso de cotas que aumenta a restrição de espaço em disco a ser utilizado por usuários/aplicativos.
  • 66. Domínio de Segurança (Oracle)  Conjunto de propriedades que determinam restrições como : Ações (privilégios e papeis) disponíveis para o usuário; Cota de tablespaces (espaço disponível em disco) do usuário; Limites de recursos de sistema do usuário.  Cada usuário tem um domínio de segurança,  As tabelas (tablespaces) do sistema, como a system, devem ser protegidas de acessos de usuários diferentes dos usuários de sistema.  A liberação de escrita e alteração de dados em tais tabelas é totalmente desaconselhável em ambientes de produção.
  • 67. Privilégios (Oracle)  Um privilégio é um direito para executar um determinado tipo de declaração SQL.  Alguns exemplos de privilégios incluem: Direito de conectar-se ao banco de dados; Direito de criar uma tabela em seu esquema; Direito de selecionar linhas da tabela de outra pessoa; Direito de executar o procedimento armazenado de outra pessoa.  Os privilégios são concedidos aos usuários para que eles possam acessar e modificar os dados do banco de dados.
  • 68. Privilégios (Oracle) Os privilégios de um banco de dados Oracle podem se dividir em duas categorias distintas:  Privilégios de sistema Permitem que os usuários executem determinada ação no nível de sistema ou em determinado tipo de objeto de esquema. Alteração de qualquer linha de uma tabela por exemplo, são privilégios do sistema.  Privilégios do objeto de esquema Permitem que os usuários executem determinada ação em um objeto de esquema também especifico. O privilegio de exclusão de uma linha em uma tabela especifica por exemplo, é um privilegio de objeto.
  • 69. Papéis (Oracle)  Os papéis são grupos nomeados de privilégios relacionados que são concedidos aos usuários ou a outros papeis.  O Oracle fornece o gerenciamento fácil e controlado dos privilégios por meio dos papéis.
  • 70. Auditoria (Oracle)  Atividade que tem como fim o exame/avaliação das operações, processos, sistemas e responsabilidades gerenciais de uma determinada entidade, com intuito de verificar sua conformidade com certos objetivos e políticas institucionais, orçamentos, regras, normas ou padrões.  O Oracle permite a auditoria seletiva (monitoramento registrado) das ações do usuário para auxiliar na investigação de um suposto uso suspeito do banco de dados.
  • 71. Auditoria (Oracle)  A auditoria pode ser executada em três níveis diferentes: Auditoria de declaração : Faz a auditoria nas instruções SQL pelo tipo de instrução independente dos objetos de esquema específico que estão sendo acessados Auditoria de privilegio : Audita os privilégios de sistema, como por exemplo, CREATE TABLE ou ALTER INDEX. Auditoria de objeto de esquema: Audita as instruções específicas que operam em um específico objeto de esquema
  • 72. Auditoria (Oracle)  Para todos os tipos de auditoria, o Oracle permite a auditoria seletiva das execuções bem-sucedidas das declarações, das execuções que falharam ou de ambas.  Isso permite o monitoramento de declarações suspeitas, independente do usuário que a emite ter os privilégios apropriados ou não para produzi-la.  O uso de disparadores (triggers) para gravar informações personalizadas adicionais que não estão incluídos automaticamente nos registros de auditoria junto com a auditoria do sistema são indispensáveis para manter o sistema sempre otimizado e resguardado de acessos indevidos.
  • 73. Auditoria (Oracle)  Para habilitar a auditoria, é necessário mudar o parâmetro de inicialização audit_trail, para que o Oracle inicie e possa reconhecer o tipo de auditoria.  Como o audit_trail não é um parâmetro dinâmico, é necessário que ele seja mudado em nível de SPFILE.  Ele suporta os seguintes valores, cada um com a seguinte função: OS: Auditoria Habilitada, os registros vão ser gravados em diretórios do sistema em arquivos de auditoria. DB ou TRUE: Auditoria é habilitada, os registros de auditoria serão armazenadas no database (SYS.AUD$) XML: Auditoria é habilitada, os registros serão armazenados em formatos XML. NONE ou FALSE: Auditoria é desabilitada. DB_EXTENDED: Trabalha igual ao parâmetro DB, mais as colunas SQL_BIND e SQL_TEXT são preenchidas.  Quando se seleciona os modos OS ou XML, arquivos são criados com os registros de auditoria, eles se localizam no parâmetro audit_file_dest.
  • 74. Auditoria (Oracle) Fases de uma Auditoria  Planejamento Analisar e estabelecer os recursos necessários para a execução dos trabalhos (auditoria), a área de verificação, metodologias, os objetivos de controle e os procedimentos a serem adotados.  Execução Junção de evidências que sejam suficientemente confiáveis, relevantes e úteis para a realização dos objetivos da auditoria.  Relatório Informação sobre a organização auditada, que contenham comprovações, recomendações e/ou determinações.
  • 75. Auditoria (Oracle) Para verificar ou ativar a auditoria devemos fazer o seguinte:  Conectar ao banco como sys : connect / as sysdba;  Checar se a auditoria está ativada : show parameter audit;  Se AUDIT_TRAIL=NONE não está ativa, então executamos: alter system set audit_trail=db SCOPE=spfile;  Baixar o banco : shutdown immediate;  Levantar de novo : startup open;  Consultar os parâmetros novamente : show parameter audit;
  • 76. Dicas de Segurança (Oracle) A Oracle indica 5 principais itens de segurança básica para aumentar o nível de segurança em Bancos de Dados Oracle 10G:  Proteger o dicionário de dados; Configurar o valor do parâmetro de sistema O7_DICTIONARY_ACCESSIBILITY para FALSE. Isso impede que usuários com privilégios ANY TABLE acessem tabelas do dicionário de dados, além de forçar o usuário SYS a se conectar como SYSOPER ou SYSDBA.
  • 77. Dicas de Segurança (Oracle)  Revogar privilégios públicos em packages que oferecem riscos de segurança; Revogar os privilégios de execução pública nas packages UTL_SMTP, UTL_TCP, UTL_HTTP, UTL_FILE e DBMS_OBFUSCATION_TOOLKIT. Isso impede que usuários maliciosos executem essas packages de forma indevida, reduzindo deste modo, os riscos de segurança.  Restringir privilégios administrativos aos usuários do BD; Se um ou mais usuário(s) possuir(em) a role DBA e/ou o privilégio de sistema SYSDBA, sem necessidade ou indevidamente devem ter esse privilégio retirado.
  • 78. Dicas de Segurança (Oracle)  Restringir acesso aos diretórios do Sistema Operacional ; Verificar o valor do parâmetro de sistema UTL_FILE_DIR. Se este parâmetro tiver um valor apontando para um ou mais diretório(s) do sistema de arquivos, configure no Sistema Operacional, privilégios de gravação reduzidos (valor de cota máxima de gravação em disco) neste(s) diretório(s) para o usuário do SO que executa os processos do Oracle (normalmente usuário "oracle"). Se isso não for possível, pode-se configurar no parâmetro UTL_FILE_DIR um diretório em um volume lógico separado do volume lógico em que estão os arquivos e software Oracle. Isso reduz o risco de um script malicioso ser executado no BD para gravar arquivos nesta pasta até estourar o limite de tamanho do volume lógico e "parar" o Banco de Dados quando o volume lógico "estourar".
  • 79. Dicas de Segurança (Oracle)  Desativar autenticação remota do Sistema Operacional Na configuração padrão do Oracle 10G, o Banco de Dados permite que usuários autenticados no sistema operacional façam conexão local sem fornecer usuário e senha do Banco de Dados. Para permitir esse modo de conexão somente para usuários locais do Sistema Operacional, deve-se configurar o valor do parâmetro REMOTE_OS_AUTHENT para FALSE. Essa configuração evita que usuários remotos (usuários de qualquer computador em uma rede) se conectem no Banco de Dados sem fornecer usuário e senha.
  • 80. Consequencias  Sabe o que essas empresas tem em comum ?
  • 81. Consequencias de Banco de Dados não seguros. Invasão em banco de dados coloca em risco 2 milhões de clientes da Honda Clientes da Honda estão correndo risco. Não, não se trata de um recall nos automóveis fabricados, mas sim uma invasão no banco de dados de e-mails dos clientes da empresa. Cerca de dois milhões de endereços foram roubados, além de informações pessoais como endereço, senha e modelo e identificação do veículo. A empresa está investigando como o crime aconteceu e tentando identificar os principais culpados. Até agora, quem está na mira da investigação é a empresa de marketing Silverpop Systems, responsáveis pelas newsletters da fabricante. A Honda avisou todos os clientes em um comunicado oficial enviado ao e-mail de cada um. Afinal, com posse de todos esses dados, é simples receber um comunicado como se fosse o representante Honda local, com todos os seus dados e pedindo mais informações pessoais. Um perigo. Fonte: http://bit.ly/gJoUcW
  • 82. Consequencias de Banco de Dados não Seguros. Utilizando técnica de injeção de SQL, dupla de invasores obteve lista de credenciais de acesso de diversos domínios ligados ao produto da Oracle. O site MySQL.com, para clientes do banco de dados adquirido pela Oracle com a compra da Sun, foi aparentemente comprometido no fim de semana por uma dupla de hackers que publicaram nomes de usuários - e, em alguns casos, senhas - dos usuários dos site. Identificando-se como "TinKode" e "Ne0h", os hackers afirmaram ter utilizado - ironicamente - um ataque de injeção SQL, mas não forneceram detalhes sobre a operação. Os domínios vulneráveis foram listados como www.mysql.com, www.mysql.fr, www.mysql.de, www.mysql.it e www-jp.mysql.com. De acordo com um post da lista de discussão de bugs Full Disclosure, o MySQL.com mantém diversos bancos de dados internos em um servidor web Apache. A informação postada incluiu diversos códigos hash de senhas - algumas das quais já foram quebradas.
  • 83. Consequencias de Banco de Dados não Seguros. Entre as credenciais que constavam de uma lista de dados publicada no Pastebin estavam senhas para diversos usuários dos bancos de dados MySQL instalados no servidor, e as senhas admin para blogs corporativos de dois ex-funcionários da MySQL: o ex-diretor de gerenciamento de produtos Robin Schumacher e o ex-vice- presidente de relações com a comunidade, Kaj Arnö. Schumacher é atualmente diretor de estratégia de produtos na EnterpriseDB, enquanto Arnö trabalha como vice-presidente executivo de produtos na SkySQL. O blog de Schumacher não foi tocado desde junho de 2009; o de Arnö está inativo desde janeiro de 2010. A Oracle, que obteve o controle da MySQL com a aquisição da Sun Microsystems em abril de 2009, não comentou o incidente. Uma empresa de segurança que monitora ataques feitos a sites, Sucuri, aconselhou aos usuários com uma conta no MySQL.com a mudar suas senhas o mais rapidamente possível, especialmente se eles usam a mesma senha em vários sites. Fonte: http://bit.ly/eU3CN6
  • 84. Recomendações para um ambiente seguro  Nunca fornecer a ninguém (exceto aos usuários administrativos) acesso a tabela da ACL, caso uma pessoa tenha acesso as senhas de acesso da ACL, ela poderá facilmente se conectar ao banco com qualquer conta;  Conceder apenas os privilégios necessários para cada usuário, nunca mais do que isso;  Não manter senhas em texto puro no banco de dados, em vez disso, utilizar alguma função de criptografia de via única, com SHA1 ou MD5;  Não escolher senhas que contenham palavras existentes em dicionários;  Utilizar um firewall;  Não confiar em nenhum dado inserido pelos usuários, muitos deles podem tentar atacar o sistema inserindo caracteres especiais nas entradas dos formulários contendo algum.
  • 85. Referências KORTH, Henry F.; SILBERSCHATZ, Abraham. Sistemas de Banco de Dados. 3 ed.São Paulo. Makron Books, 1999. MANUAL DE REFERÊNCIA DO MYSQL. Como o Sistema de Privilégios Funciona. 2008b Disponível em < http://dev.mysql.com/doc/refman/4.1/pt/privileges.html>. Acesso em 01 abr. 2011, Marcos SÊMOLA . A importância da gestão de segurança da informação. 2003. Disponível em <http://www.linorg.cirp.usp.br/SSI/SSI2003/Palest/P03-Apresentacao.pdf>. Acesso em 01 abr. 2011. SQL Injection FAQ. Disponível em <http://www.sqlsecurity.com/FAQs/SQLInjectionFAQ/tabid/56/Default.aspx>. Acesso em 01 abr. 2011. Maico KRAUSE. Segurança em Banco de Dados. Disponível em <http://bit.ly/i9diim>. Acesso em 20 mar. 2011. Wikipédia. Segurança da informação. Disponivel em <http://pt.wikipedia.org/wiki/Seguran %C3%A7a_da_informa%C3%A7%C3%A3o>. Acesso em 25 mar. 2011. SQL Injection. Disponivel em <http://imasters.com.br/artigo/5179/sql_injection_no_php_o_que_e_e_como_se_proteger >. Acesso em 01 abr. 2011. * Alguns dos links estão usando encurtador de URLs*