quarta-feira, 29 de junho de 2016

Segurança dos Dados

Níveis de Segurança dos Dados Informix

A segurança dos dados esta relacionada a assuntos de proteção dos dados a usuários sem autorização.
Um banco de dados seguro permite aos usuários só ter acesso ou modificar dados para os quais eles estão autorizados. Há vários níveis de privilégios em um banco de dados:
  • Privilégios ao nível de banco de dados
  • Privilégios ao nível de tabela
  • Privilégios ao nível de coluna

Privilégios ao Nível de Banco de Dados

Para ter acesso a um banco de dados, um usuário tem que ter o privilégio CONNECT ou um privilégio superior.

O Privilégio CONNECT

O privilégio CONNECT permite para um usuário especificar o banco de dados em um comando de DATABASE, mas o usuário não pode criar nem excluir tabelas e índices. Embora um usuário com o privilégio CONNECT não possa criar tabelas permanentes, o usuário pode criar views e tabelas temporárias.

O Privilégio RESOURCE

O privilégio RESOURCE dá aos usuários o privilégio CONNECT  e também a habilidade para criar e excluir tabelas e índices no banco de dados.

O Privilégio DBA

Um usuário com privilégio de DBA tem todos os privilégios RESOURCE como também a habilidade para conceder e revogar privilégios CONNECT, RESOURCE e DBA.
A única restrição colocada em usuários com o estado DBA é a inabilidade para revogar o privilégio de DBA deles próprios. Porém, um usuário com status de DBA pode conceder o privilégio a outro usuário que pode revogar isso do então concessor.

Concedendo Privilégios ao Nível de Banco de Dados

GRANT CONNECT TO PUBLIC;

GRANT CONNECT TO amilcar, ajm;

GRANT DBA TO amilcar;

Você pode usar o comando GRANT para conceder privilégios de acesso ao banco de dados a usuários. Os componentes do comando GRANT são:

Privilégio - É um dos tipos de acesso ao nível de banco de dados: CONNECT, RESOURCE ou DBA.
PUBLIC - É a palavra chave que você usa para especificar privilégios de acesso para todos usuários.
user-list - É uma lista de nomes de login para os usuários para quem você esta concedendo privilégios de acesso. Você pode entrar com um ou mais nomes, separados por vírgulas.

Exemplos:
No primeiro exemplo mostrado acima, o privilégio CONNECT é concedido a todos os usuários (PUBLIC).
No segundo exemplo, o privilégio RESOURCE é concedido só aos usuários amilcar e ajm.
No terceiro exemplo, é dado a amilcar o privilégio de DBA.

Privilégios ao Nível de Tabela /  Coluna

ALTER -  adicionar, excluir ou modificar colunas.
DELETE - remover linhas de uma tabela.
INDEX - criar índices em uma tabela.
SELECT - retornar informações das colunas de uma tabela.
UPDATE - alterar as informações das colunas de uma tabela.
INSERT - inserir linhas em uma tabela.
REFERENCES - referenciar colunas através de uma constraint referencial.
ALL - realizar toda e qualquer operação anterior.

Você pode especificar as operações que um usuário pode executar em uma tabela ou colunas dentro de uma tabela que você criou. Os privilégios que você pode conceder e pode revogar são mostrados abaixo.
Nenhum destes privilégios terá efeito até que o usuário tenha pelo menos o privilégio CONNECT ao banco de dados.

Concedendo Privilégios ao Nível de Tabela

GRANT ALL ON customer TO PUBLIC;

GRANT UPDATE ON orders TO amilcar WITH GRANT OPTION;

GRANT INSERT, DELETE ON items TO ajm AS amilcar;

Você pode usar o comando GRANT para especificar as operações que um usuário pode executar em uma tabela que você criou. Os componentes de um GRANT ao nível de tabela são:

Privilégio - é um ou mais tipos de acesso à tabela: ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, REFERENCES, ALL.
Tabela ou View - é o nome da tabela ou View para a qual você concede privilégios de acesso.
PUBLIC - é a palavra chave que você usa para especificar privilégios de acesso para todos usuários.
user list - é uma lista de nomes de login de usuários para quem você esta concedendo os privilégios de acesso. Você pode entrar com um ou mais nomes, separados por vírgula.
WITH GRANT OPTION - Permite ao usuário ou lista de usuários no comando GRANT a habilidade de conceder o mesmo privilégio a outros usuários.
AS [user] - faz outro usuário como o concessor das permissões. Incluindo esta opção renuncia sua habilidade para revogar o privilégio concedido anteriormente.

No primeiro exemplo mostrado acima, são concedidos todos os privilégios a todos usuários (PUBLIC) na tabela customer. No segundo exemplo, amilcar recebe permissões de atualização na tabela order com a habilidade para dar a mesma permissão a outros usuários. No terceiro exemplo o concessor usa amilcar para conceder privilégios de INSERT e DELETE ao usuário ajm.

Concedendo Privilégios ao Nível de Coluna

  • Apenas os privilégios de SELECT, UPDATE e REFERENCES podem ser concedidos ao nível de coluna.
  • Os privilégios ao nível de coluna são concedidos da mesma forma que os privilégios ao nível de tabela, exceto pelo fato de que uma lista de colunas tem de acompanhar o comando GRANT.
Exemplos:
GRANT SELECT (company, fname, lname) ON customer TO PUBLIC;

GRANT INSERT, UPDATE (quantity), SELECT ON items TO amilcar;

Ao conceder privilégios para uma tabela, você pode especificar os privilégios de SELECT, UPDATE e de REFERENCES para aplicar somente sobre certas colunas na tabela.
No primeiro exemplo mostrado acima, o privilégio SELECT é concedido a todos usuários nas colunas company, fname e lname da tabela customer.
No segundo exemplo, o privilégio de UPDATE é concedido só na coluna quantity, mas são concedidos os privilegios de INSERT e SELECT em todas colunas da tabela.

Privilégios Padrão

Ao nível de Banco de Dados

Quando você cria um banco de dados, automaticamente você ja tem privilégios DBA.

Ao Nível de Tabela

Bancos de Dados Non-ANSI: Todos os privilégios, exeto ALTER e REFERENCES são concedidos a todos os usuários.

Bancos de Dados ANSI: nenhum privilégio padrão é concedido.

  • Privilégio Default ao nível de Banco de Dados
    Quando você cria um banco de dados, você é automaticamente o DBA daquele banco de dados e o único que tem acesso ao banco de dados. Se você quiser permitir que outros usuários tenham acesso ao banco de dados, voce tem que conceder a eles privilégios de CONNECT, RESOURCE ou DBA.
  • Privilégio Default ao nível de Tabelas
    Em um banco de dados que não são ANSI, o default é conceder privilégios ao nível de tabela (exceto ALTER) para todos os usuários (PUBLIC). Em um banco de dados ANSI, nenhum privilégio default ao nível de tabela é concedido. Você tem que conceder estes privilégios explicitamente.

Privilégios ao Nível de Store Procedure

Concedendo permissões

REVOKE DELETE ON orders FROM PUBLIC;
GRANT EXECUTE ON delete_proc TO PUBLIC;

Uma Store Procedure consiste de código (comandos SQL e Linguagem da Store Procedure) que é armazenado no banco de dados. Permissões para uma procedure são concedidas e revogadas igualmente com permissões a uma tabela. Você concede e revoga a pemissão de EXECUTE para uma stored procedure especifica.
O exemplo acima revoga de todos os usuários (exeto o dono da tabela) de apagar qualquer linha da tabela orders. O próximo comando GRANT permite aos usuários executar a store procedure delete_proc que pode conter código especial para excluir a tabela orders.

Revogando Privilégios ao Nível de Banco de Dados

Exemplos:
REVOKE CONNECT FROM amilcar;

REVOKE RESOURCE FROM ajm;

Você pode usar o comando REVOKE para revogar os privilégios de acesso ao banco de dados dos usuários. Os componentes de um comando REVOKE são:

Privilégio - é um dos tipos de acesso ao nivel de banco de dados: CONNECT, RESOURCE ou DBA.
PUBLIC- é a palavra chave que você usa para especificar os privilégios de acesso para todos usuários.
user list - é uma lista de nome de login de usuários para quem você está revogando os privilégios de acesso. Você pode entrar com um ou mais nomes separados por vírgula.

Se você revogar o privilégio de DBA ou RESOURCE de um ou mais usuários, eles passam a ter o privilégio CONNECT. Para revogar todos os privilégios no banco de dados dos usuários com status de DBA ou RESOURCE, você tem que revogar o CONNECT como foi revogado o DBA ou RESOURCE. No primeiro exemplo mostrado acima, o privilégio CONNECT é revogado de amilcar. No segundo exemplo, o privilégio de RESOURCE é revogado do usuário ajm. ajm tem agora o privilégio CONNECT.

Revogando Privilégios ao nível de Tabela

Exemplos:
REVOKE ALL ON orders FROM PUBLIC;

REVOKE DELETE, UPDATE ON customer FROM amilcar, ajm;

Você pode usar o REVOKE para prevenir operações especificas que um usuário pode executar em uma tabela que você criou. Os componentes de um comando REVOKE são:

Privilégio - é um ou mais dos tipos de acesso de tabela: ALTER, DELETE, INDEX, INSERT, SELECT, UPDATE, REFERENCES, ALL.
Tabela ou View - é o nome da tabela ou da view da qual você revoga privilégios de acesso.
PUBLIC - é a palavra chave que você usa para especificar os privilégios de acesso de todos os usuários.
user list - é uma lista de nome de login de usuários para quem você está revogando os privilégios de acesso. Você pode entrar com um ou mais nomes separados por vírgula.

Embora você possa conceder privilégios de UPDATE e SELECT para colunas especificas, você não pode revogar estes privilégios coluna a coluna. Se você revogar os privilégios de UPDATE ou SELECT de um usuário, todos os privilégios UPDATE e SELECT que você concedeu a este usuário serão revogados.
No primeiro exemplo mostrado acima, são revogados todos os privilégios de todos os usuários (public) na tabela orders.
No segundo exemplo, são revogados os privilégios de DELETE e UPDATE dos usuarios amilcar e ajm na tabela customer.

Tabelas do Catálogo do Sistema 

  • sysusers  - privilégios concedidos ao nível do banco de dados
  • systabauth - privilégios concedidos ao nível de tabela
  • syscolauth - privilégios concedidos ao nivel de coluna
  • sysfragauth - privilégios concedidos aos fragmentos das tabelas
  • sysprocauth - privilégios concedidos em stored procedures
  • sysroleauth - roles que são concedidos aos usuários