16/06/2009 Conceitos Segurança ≠ Integridade Segurança refere-se à proteção de dados contra a divulgação, alteração ou destruição não autorizadas. Banco de Dados II URI-FW Garante que usuários têm permissão para fazer o que estiverem tentando. Integridade refere-se à precisão ou validade dos dados. Considerações Gerais • Para proteger um banco de dados devemos tomar medidas de segurança em vários níveis: – Físico: A sala do computador (servidor) ou terminal (cliente) devem estar protegidas contra intrusos. – Humano: Os usuários devem ser cuidadosamente autorizados para reduzir a chance de qualquer fornecimento de acesso a um intruso em troca de suborno ou outros favores. – Sistema Operacional: A debilidade na segurança do SO pode servir como meio de acesso não autorizado ao BD. – Rede: A segurança em nível de SW de rede, para BDs que permitem acesso remoto, é tão importante quanto a segurança física. – Sistema de BD: Alguns usuários de sistemas de BD devem ter autorização de acesso somente a uma porção limitada do BD. É responsabilidade do sistema de BD garantir que essas restrições de acesso não sejam violadas. Autorização Além das formas de autorização de acesso aos dados, pode ser concedida autorização a um usuário para modificar esquemas do banco de dados: – Autorização index: permite a criação e remoção de índices. – Autorização resource: permite a criação de novas relações (tabelas). – Autorização alteration: permite a adição ou remoção de atributos em uma relação (tabela) – Autorização drop: permite a remoção de relações (tabelas). Garante que as coisas que estão tentando fazer são corretas. Autorização Um usuário pode ter várias formas de autorização sobre partes do banco de dados. Dentre elas estão as seguintes: – Autorização read: permite a leitura, mas não modificações de dados. – Autorização insert: permite a inserção de novos dados, mas não a modificação de dados existentes. – Autorização update: permite a modificação, mas não a remoção de dados. – Autorização delete: permite a remoção de dados. • Um usuário pode receber todos, nenhum ou uma combinação desses tipos de autorização. Autorização no SQL Server Os recursos de segurança do SQL Server permitem determinar: Quais usuários podem usar o SQL Server. Quais usuários podem acessar cada banco de dados. As permissões de acesso para cada objeto de banco de dados e para cada usuário. As permissões de acesso para cada comando SQL em cada banco de dados, para cada usuário. 1 16/06/2009 Autorização no SQL Server Modos de Segurança SQL Server Existem quatro barreiras para que os usuários possam acessar Modo de segurança do Windows Recursos avançados de segurança Adicionar grupos como uma conta. Acesso rápido. dados em um servidor SQL Server: O sistema operacional de rede; o usuário deve efetuar logon na rede. A autenticação do SQL Server; o usuário deve ter uma conta no SQL Server. A autenticação de banco de dados; o ID do usuário deve existir em uma tabela de sistema do banco de dados (mais especificamente, a tabela sysusers) A autenticação de objetos; o usuário deve ter permissões para acessar qualquer objeto (tabelas, visões, entre outros). Modo de Segurança Mista Clientes não-Windows e usando browser podem usar esse modo para conectar-se. Camada adicional de segurança sobre o Windows Autorização Visões (Views) A última forma de autorização é aquela dada ao administrador do banco de dados (DBA). Visão - é uma forma diferente de ver uma relação (escondendo dados que não precisam ser vistos ou visualizando os dados resultantes de uma determinada consulta). – O nível de autorização dado ao DBA é análoga aquele fornecido a um super-usuário (root) de um sistema operacional. – Controle total sobre o sistema de banco de dados. • Embora possa ser negado o acesso direto de um usuário a uma relação, pode ser permitido ao usuário acessar parte daquela relação por meio de uma visão. Exemplo Exemplo Sistema Bancário: Em SQL a visão pode ser definida como: Considere um caixa que precise dos nomes de todos os create view cliente_agência as (select nome_ag, nome_cli from depositante, conta where depositante.número_conta = conta.número_conta) Agência = (nome_ag, cidade_ag, fundos). Conta = (nome_ag, número_conta, saldo) Depositante = (nome_cli, número_conta) clientes que têm conta em cada agência. Porém, este caixa não está autorizado a ver as demais informações da conta do cliente. – Desta forma, o acesso à tabela CONTA deve ser negado para o caixa. – O acesso deve ser concedido através de uma visão que fornece somente as informações necessárias. • O caixa poderá, então, fazer a seguinte consulta: select * from cliente_agência 2 16/06/2009 Autorização sobre Visões Especificação de Segurança em SQL O usuário que cria uma visão recebe somente os privilégios que não fornecem autorização adicional além daquelas que ele já possui. O padrão SQL possui comandos para • Exemplo: um usuário não pode ter a autorização de update sobre uma visão caso ele não tenha a autorização de update sobre as relações usadas na visão. • No exemplo anterior, o criador da visão deve ter autorização read sobre as duas relações utilizadas. conceder e revogar privilégios. O padrão SQL inclui os privilégios delete, insert, select (read) e update. O padrão SQL também inclui um privilégio references que restringe a declaração de chaves estrangeiras pelo usuário quando cria relações. Permite que usuários criem chaves estrangeiras que se refiram a outras relações. Especificação de Segurança em SQL Especificação de Segurança em SQL A declaração grant é usada para conferir Por default, não é permitido a um usuário que recebeu um privilégio em SQL conceder esse privilégio a outro usuário. autorização. Forma básica: grant <lista de privilégios> on <nome da relação ou nome da visão> to <lista de usuários> • Exemplo: Exemplos: grant select on agência to U1,U2,U3 – grant select on agência to U1 with grant option Concede aos usuários U ,U ,U a autorização select sobre a relação agência. 1 2 3 Grant update (nome_cli) on depositante to U1,U2,U3 • Se desejamos conceder um privilégio e permitir ao receptor passar esse privilégio a outros usuários, anexamos a condição with grant option ao comando grant apropriado. A autorização update pode tanto ser conferida a todos os atributos da relação como a apenas um deles • Pode ser utilizado o privilégio all privileges, para ser utilizadas como forma abreviada para todos os privilégios e public, da mesma forma, para todos os usuários. Especificação de Segurança em SQL Especificação de Segurança em SQL A declaração revoke é usado para revogar uma autorização. As opções cascade e restrict: Forma básica: revoke <lista de privilégios> on <nome da relação ou visão> from <lista de usuário> [restrict | cascate] Exemplos: revoke select on agência from U1, U2, U3 cascade revoke update (nome_cli) on depositante from U1, U2, U3 A revogação de um privilégio concedido a um usuário pode fazer com que outros usuários também percam esse privilégio. Para que isto aconteça utiliza-se a opção cascade. revoke select on agência from U1, U2, U3 cascade Para impedir a revogação em cascata utiliza-se a opção restrict. Neste caso, haverá a emissão de uma mensagem de erro caso haja qualquer revogação em cascata, e a ação de revogar não será implementada. revoke select on agência from U1, U2, U3 restrict 3 16/06/2009 Papéis (Roles) Criptografia Na sua essência, um papel [role] é um grupo de usuários que têm necessidades semelhantes de acesso ao SQL Server. As diversas medidas que um sistema de banco de dados utiliza para impedir o acesso de intrusos às informações pode não ser suficiente. Solução: Criptografar os dados. Diferentes de papéis do SQL Server, incluindo os seguintes: Papéis predefinidos de servidor Papéis predefinidos de bancos de dados roles O papel público Papéis personalizados de bancos de dados Criptografia Uma boa técnica de criptografia tem as seguintes propriedades: (Substituição de cada caracter pelo próximo caracter do alfabeto) teste Algoritmo de Criptografia uftuf Criptografia Simétrica Chave de codificação = chave de decodificação. É relativamente simples para os usuários autorizados codificar e decifrar os dados. O esquema de criptografia não depende do segredo do algoritmo, mas de um parâmetro do algoritmo chamado chave de criptografia. É extremamente difícil para um intruso determinar a chave de criptografia. Existem 3 tipos de esquemas criptográficos. Simétricos Assimétricos Híbridos Deve-se ter cuidado ao passar a chave para o receptor. (intrusos não devem interceptá-la) Esse esquema tem como principal vantagem a performance. Um exemplo de algoritmo usando esse esquema é o DES – Data Encryption Standard, desenvolvido na década de 70 pela IBM. Criptografia Simétrica Criptografia Assimétrica Chave de Codificação ≠ Chave de decodificação Cada participante possui um par de chaves (uma pública e uma privada) Todos disponibilizam suas chaves públicas e guardam suas chaves privadas. Quando José quer mandar uma mensagem para Maria, codifica-a com a chave pública de Maria. Desta forma, só Maria terá a chave privada para decifrar a mensagem. Vantagem: Maior segurança Desvantagem: Menor desempenho. Um exemplo de algoritmo usando esse esquema é o RSA desenvolvido por Rivest, Shamir and Adleman no início da década de 80 4 16/06/2009 Criptografia Assimétrica Criptografia Híbrida Esquemas simétricos e assimétricos são utilizados em conjunto. A chave simétrica é usada para codificar a mensagem. A chave pública do receptor da mensagem é usada para codificar a chave simétrica. Vantagens Melhor performance Maior segurança. Exemplo O protocolo SET (Secure Electronic Transaction) utiliza o esquema híbrido de criptografia. Exercício Criar uma base de dados com as tabelas abaixo: - Agência = (NumAg, Cidade) - Conta = (NumA, NumConta , CodCli, saldo) - Cliente = (CodCli, NomeCli) 2. Inserir Dados nas tabelas 3. Criar uma View que mostre a cidade e o nome do cliente. 4. Criar um usuário com o seu nome 5. Setar a permissão de select na View criada para o novo usuário . 6. Fechar o SQL Server, e fazer o login com o novo usuário 7. Fazer um Select que mostre os clientes Cadastrados 8. Fazer um Select na View Criada 1. 5