quarta-feira, 20 de junho de 2012

Configurando o Informix com Segurança

Label-based Access Control (LBAC) como recurso de segurança

Label-based access control (LBAC) é um meio pelo qual o sistema de banco de dados controla o acesso a objetos de tabela . O sistema de banco de dados controla o acesso anexando rótulos de segurança para os objetos de tabelas e compara com os rótulos de segurança concedios aos usuários que tentarem acessar o objeto.

O sistema controla o acesso de banco de dados , anexando rótulos de segurança para os objetos de mesa e comparar com as etiquetas de segurança concedidos aos usuários que tentarem acessar esse objeto. Ele concede acesso se os dois combinarem, caso contrario nega o acesso.

Existem três tipos de rotulos de segurança :

  1. Rotulo de segurança por linha (row): Um rótulo de segurança associada a uma linha de dados ou um registro em uma tabela do banco de dados
  2. Rotulo de segurança por coluna (column): Um rotulo de segurança associada com uma coluna em uma tabela do banco de dados
  3. Rotulo de segurança por usuário: Um rotulo de segurança concedido a um usuario do banco de dados. Um usuario pode ter acesso para leitura ou acesso para escrita.

Um rotulo de segurança pode conter um ou mais componentes. Há três tipos de componentes de rotulos de segurança:

  1. Set: Um set é uma coleção de elementos onde a ordem que esses elementos aparecem não é importante
  2. Array: Um array é um conjunto ordenado. Em um array, a ordem em que aparecem os elementos é importante porque indica o grau de sensibilidade dos dados
  3. Tree: Uma Tree representa uma hierarquia que podem ter multiplos nós e ramos. Por exemplo, trees podem ser usados para representar organogramas e para identificar os diferentes serviços dentro da organização.

Uma politica de segurança define o conjunto de componentes dos rotulos de segurança. DBSECADM é requirido para minupular objetos LBAC.

PAM - Pluggable Authentication Modules para sistemas rodando em UNIX ou Linux

O Pluggable Authentication Module (PAM) foi escrito originalmente pela Sun Microsystems para suportar diferentes modulos de autenticação. PAM permite ao administrador de sistemas implementar diferentes metodos de autenticação para diferentes aplicações.

Serviços de autenticação estão ligados aos niveis de aplicações. Por exemplo, um esquema de autenticação para  para um banco de dados pode ser diferente para o programa de login do UNIX.

Outras caracteristicas do PAM é o modulo de empilhamento. Onde muitos modulos podem ser empilhados um sobre o outro, fornecendo autenticação para uma aplicação de varias maneiras. Pam fornece um conjunto de API’s para suportar varios tipos de autenticação – gerenciamento de contas, gerenciamento de sessão e gerenciamento de senhas.

O Administrador do sistema pode habilitar ou desabilitar o uso do PAM.

Pluggable Authentication Modules são suportados em em ambos modos de 32-bit e 64-bit no Solaris, Linux, HP-UX, and AIX®.

 

Suporte à Autenticação LDAP no Windows.

Você pode usar o suporte para os modulos de autenticação LDAP quando você quiser usar o servidor LDAP para autenticar seus usuarios. LDAP no Windows é configurado similarmente ao Pluggable Authentication Module no UNIX e Linux, mas não suporta as caracteristicas do modulo de empilhamento. Ele apenas fornece um único módulo de autenticação.

A autenticação DLL esta localizada no diretorio %INFORMIXDIR%\dbssodir\lib\security. Os parametros de configuração são listados no arquivo %INFORMIXDIR% \dbssodir\pam.conf. O codigo-fonte para o Modulo de Autenticação LDAP e  exemplos de arquivos de configuração requeridos estão no diretorio %INFORMIXDIR% \demo\authentication.

O administrador de sistemas pode habilitar ou desabilitar a autenticação.

terça-feira, 19 de junho de 2012

CURRENT nao é a data e hora real quando dentro de procedure

Estou postando aqui um email que recebi de um amigo/irmão, o Carlos.

Carlão um abraço e obrigado por compartilhar conosco.

abaixo segue o email dele.

Pessoal,

Tivemos um problema ao fazer uma procedure que usa o comando CURRENT para recuperar a data e hora do sistema.

Verificamos que se utilizado mais de uma vez dentro da procudure o mesmo retorna sempre a mesma informacao, mesmo depois de levar varios segundos/minutos entre um comando e outro;

No site da IBM explica que ele congela essa data e hora quando chamado uma procedure para retornar sempre a mesma informacao ate o termino da execução dela.

Por conta disso fomos atrás de outra forma de obte-la e encontramos a seguinte:

  SELECT DBINFO('utc_to_datetime', sh_curtime)

  FROM sysmaster:sysshmvals;

Como esse comando é bem mais complicado, criei uma função para retornar mais facilmente a data/hora, podendo ser chamada em suas procedures:

DROP FUNCTION current_time;

CREATE FUNCTION current_time()

RETURNING DATETIME YEAR TO FRACTION;

  DEFINE current_time DATETIME YEAR TO FRACTION;

  SELECT DBINFO('utc_to_datetime', sh_curtime)

  INTO current_time

  FROM sysmaster:sysshmvals;

  RETURN current_time;

END FUNCTION;

Exemplo de utilizacao:

select current_time() from empresa;

Para comparar a diferença basta fazer uma query com processamento demorado e comparar, o campo CURRENT vai mostrar a mesma data/hora para todos os registros, enquanto que a funcao CURRENT_TIME() apresentará a data/hora que 'printou' cada linha;

select current, current_time() from estoque_trans

by callprog