Tudo relacional Sistemas de Gerenciamento de Banco de Dados fornecer algum tipo de mecanismo de segurança intrínseco projetado para minimizar as ameaças de perda de dados, corrupção de dados ou roubo de dados. Eles variam desde a proteção de senha simples oferecida por Microsoft Access para a estrutura complexa de usuário / função suportada por bancos de dados relacionais avançados, como Oráculo eMicrosoft SQL Servidor. Alguns mecanismos de segurança são comuns a todos os bancos de dados que implementam oLinguagem de consulta estruturada.
Segurança em nível de usuário
Bancos de dados baseados em servidor suportam um do utilizador conceito semelhante ao usado em sistemas operacionais de computador. Se você estiver familiarizado com a hierarquia de usuário / grupo encontrada em Microsoft Windows NT e Windows 2000, você descobrirá que os agrupamentos de usuário / função suportados pelo SQL Server e Oracle são semelhantes.
Crie contas de usuário de banco de dados individuais para cada pessoa com acesso ao seu banco de dados.
Evite provisionar contas genéricas acessíveis por várias pessoas diferentes. Em primeiro lugar, essa prática elimina a responsabilidade individual - se um usuário fizer uma alteração em seu banco de dados (digamos por dando a si mesmo um aumento de $ 5.000), você não será capaz de rastreá-lo de volta a uma pessoa específica por meio do uso de auditoria Histórico. Em segundo lugar, se um usuário específico deixar sua organização e você desejar remover seu acesso do banco de dados, você deve alterar a senha da qual todos os usuários dependem.
Os métodos para criar contas de usuário variam de plataforma para plataforma e você terá que consultar a documentação específica do DBMS para o procedimento exato. Os usuários do Microsoft SQL Server devem investigar o uso do sp_adduser procedimento armazenado. Os administradores de banco de dados Oracle encontrarão o CRIAR USUÁRIO comando útil. Você também pode querer investigar esquemas de autenticação alternativos. Por exemplo, o Microsoft SQL Server oferece suporte ao uso da Segurança Integrada do Windows NT. Sob este esquema, os usuários são identificados no banco de dados por suas contas de usuário do Windows NT e não são obrigados a inserir um ID de usuário e senha adicionais para acessar o banco de dados. Esta abordagem é popular entre os administradores de banco de dados porque ela desloca o fardo da conta gerenciamento para a equipe de administração de rede e fornece a facilidade de um único login para o usuário final.
Segurança em nível de função
Se você estiver em um ambiente com um pequeno número de usuários, provavelmente descobrirá que criar contas de usuário e atribuir permissões diretamente a eles é suficiente para suas necessidades. No entanto, se você tiver um grande número de usuários, ficará sobrecarregado por manter contas e permissões adequadas. Para aliviar esse fardo, os bancos de dados relacionais oferecem suporte papéis. As funções de banco de dados funcionam de maneira semelhante aos grupos do Windows NT. As contas de usuário são atribuídas a funções e as permissões são atribuídas à função como um todo, e não às contas de usuário individuais. Por exemplo, você pode criar uma função de DBA e, em seguida, adicionar as contas de usuário de sua equipe administrativa a essa função. Depois disso, você pode atribuir uma permissão específica a todos os administradores atuais (e futuros) simplesmente atribuindo a permissão à função. Mais uma vez, os procedimentos para criar funções variam de plataforma para plataforma. Os administradores do MS SQL Server devem investigar o sp_addrole procedimento armazenado enquanto os DBAs Oracle devem usar o CRIAR PAPEL sintaxe.
Concessão de permissões
Agora que adicionamos usuários ao nosso banco de dados, é hora de começar a fortalecer a segurança adicionando permissões. Nosso primeiro passo será conceder permissões apropriadas de banco de dados aos nossos usuários. Faremos isso por meio do uso da instrução SQL GRANT.
Esta é a sintaxe da instrução:
CONCEDER.
[SOBRE.
PARA.
[COM OPÇÃO DE CONCESSÃO]
Agora, vamos dar uma olhada nesta declaração linha por linha. A primeira linha, CONCEDER , nos permite especificar as permissões de tabela específicas que estamos concedendo. Elas podem ser permissões de nível de tabela (como SELECT, INSERT, UPDATE e DELETE) ou permissões de banco de dados (como CREATE TABLE, ALTER DATABASE e GRANT). Mais de uma permissão pode ser concedida em uma única instrução GRANT, mas as permissões em nível de tabela e permissões em nível de banco de dados não podem ser combinadas em uma única instrução.
A segunda linha, SOBRE
Finalmente, a quarta linha, COM OPÇÃO DE GRANT, é opcional. Se esta linha for incluída na instrução, o usuário afetado também tem permissão para conceder essas mesmas permissões a outros usuários. Observe que WITH GRANT OPTION não pode ser especificado quando as permissões são atribuídas a uma função.
Concessões de banco de dados de exemplo
Vejamos alguns exemplos. Em nosso primeiro cenário, contratamos recentemente um grupo de 42 operadores de entrada de dados que irão adicionar e manter registros de clientes. Eles devem acessar as informações na tabela Clientes, modificar essas informações e adicionar novos registros à tabela. Eles não devem ser capazes de excluir totalmente um registro do banco de dados.
Primeiro, devemos criar contas de usuário para cada operador e, em seguida, adicioná-los a uma nova função, Entrada de dados. Em seguida, devemos usar a seguinte instrução SQL para conceder a eles as permissões apropriadas:
GRANT SELECT, INSERT, UPDATE.
Clientes ON.
PARA DataEntry.
Agora vamos examinar um caso em que atribuímos permissões no nível do banco de dados. Queremos permitir que membros da função DBA adicionem novas tabelas ao nosso banco de dados. Além disso, queremos que eles possam conceder permissão a outros usuários para fazer o mesmo. Aqui está a instrução SQL:
GRANT CREATE TABLE.
PARA DBA.
COM OPÇÃO DE CONCESSÃO.
Observe que incluímos a linha WITH GRANT OPTION para garantir que nossos DBAs possam atribuir essa permissão a outros usuários.
Removendo permissões
O SQL inclui o comando REVOKE para remover as permissões concedidas anteriormente. Esta é a sintaxe:
REVOGAR [OPÇÃO DE CONCESSÃO]
SOBRE.
A PARTIR DE.
Você notará que a sintaxe desse comando é semelhante à do comando GRANT. A única diferença é que WITH GRANT OPTION é especificado na linha de comando REVOKE, e não no final do comando. Como exemplo, vamos imaginar que queremos revogar a permissão concedida anteriormente a Mary para remover registros do banco de dados Clientes. Usaríamos o seguinte comando:
REVOGAR EXCLUIR.
Clientes ON.
DE Mary.
Há um mecanismo adicional compatível com o Microsoft SQL Server que vale a pena mencionar - o comando DENY. Este comando pode ser usado para negar explicitamente a um usuário uma permissão que ele poderia ter por meio de uma associação de função atual ou futura. Esta é a sintaxe:
NEGAR.
SOBRE.
PARA.