[firebase-br] Usuário do banco + segurança (exemplo)

Caio Oliveira news em caiosistemas.com.br
Sáb Fev 18 20:32:48 -03 2006


Olá Fabrício,

Eu desenvolvi uma solução usando triggers no meu sistema; e atendeu 
perfeitamente.

1.Criei uma tabela chamada MONITOR_ARQUIVOS; contendo a seguinte estrutura:

/* Tabela do Monitor de acesso */
CREATE TABLE MONITOR_ARQUIVOS
(
ID         INTEGER NOT NULL PRIMARY KEY ,
DATAHORA    TIMESTAMP,
IP_USER        VARCHAR(20),
ID_EMP    INTEGER,
DOCNUM    VARCHAR(12),
DOCDATA    DATE,
DOCTIPO    VARCHAR(20),
OPERACAO  CHAR(1)
USUARIO  VARCHAR(35)
);

CREATE GENERATOR GEN_MONITOR_ARQUIVOS;

2.Uma trigger para essa tabela que vai alimentar os campos ID, DATAHORA 
e USUARIO automáticamente.

/*
TG_MONITORARQUIVOS
-------------------------------
Essa TRIGGER insere ID e DataHora para a Tabela MONITOR_ARQUIVOS
qdo um novo registro e incluso na mesma.
Autor: Caio José Hugueney Lopes de Oliveira
*/
^
CREATE TRIGGER TG_MONITORARQUIVOS FOR MONITOR_ARQUIVOS
    ACTIVE BEFORE INSERT
    POSITION 0
    AS
    BEGIN
      IF (NEW.ID IS NULL) then
      NEW.ID = GEN_ID( GEN_MONITOR_ARQUIVOS, 1);
      NEW.DATAHORA = CURRENT_TIMESTAMP;
      NEW.USUARIO = CURRENT_USER;
    END;
   ^

3.Para cada tabela do sistema vc. vai instalar uma trigger que verifica: 
inclusões, alterações ou e exclusões; conforme exemplo abaixo:

/* Atualiza Cliente DATA alteracao e monitor */
^
CREATE TRIGGER "TG_CLIENTEALTERA" FOR "CRCL001"
ACTIVE BEFORE UPDATE POSITION 2
AS
    BEGIN
      NEW.DATAHALT = CURRENT_TIMESTAMP;

      /* MONITOR DE ACESSO */
      INSERT INTO MONITOR_ARQUIVOS
      ( ID_EMP, DOCNUM, DOCDATA, DOCTIPO, OPERACAO,
      NOMETABELA, ID_TABELA, DESCRICAOITEM, COMPLEMENTO, USUARIO )
      VALUES
      ( null, OLD.REGISTRO,
      null, 'CLIENTE', 'A', 'CRCL001', OLD.ID_CRCL001,
      OLD.CLIENTE, NEW.CLIENTE, CURRENT_USER  );

    END
  ^

À partir daí vc. tem ao seu dispor, conforme exemplo, sempre que um 
cadastro é alterado, o registro de: qual usuário, data e hora, ID do 
registro na tabela que ocorreu a alteração; vc. pode incluir mais 
informações, mas, aconselho sempre manter o mais resumida possível essa 
tabela de forma à não comprometer a performance geral do seu sistema.

Usando esse método vc. pode facilmente criar consultas SQL para 
verificar qualquer ocorrência (fazer uma auditoria) quando houver 
necessidade.

Espero que possa ajudar!

Abraços!

Caio


Fabrício Fadel Kammer escreveu:
> Salve galera!
> 
>     Eu novamente com esse assunto, mas preciso tomar uma decisão esta
> semana ainda.
> 
>     Como disse em um email na semana passada, meu sistema acessa o banco
> de dados conectando como usuário SYSDBA de todas estações.
>     Cheguei a cogitar a possibilidade de que, para cada usuário do
> sistema, eu tivesse um usuário de mesmo nome no banco de dados, porém
> acho que isso não é a solução ideal para este momento, pois estou muito
> atarefado.
>     Então gostaria da opnião dos amigos de como melhorar a segurança de
> meu banco de dados... Estou pensando em criar um usuário no servidor e
> fazer o acesso ao banco de dados através desse usuário... Também estou
> pensando em setar esse usuário como owner do banco de meu sistema,
> dificultando que o banco fosse aberto em um outro servidor, pois não
> divulgarei o nome desse usuário do banco, será utilizado internamente no
> sistema.
> 
>     Minhas preocupações em usar um usuário do banco para cada usuário do
> sistema são:
>     1 - Posso ter mais de um banco em cada servidor, com usuários comuns
> entre os dois bancos e, os usuários de uma banco não devem ter permissão
> para ver o outro banco;
>     2 - A cada objeto (tabela, procedure,viewer) criado no banco preciso
> liberar permissão de insersão, alteração, consulta e exclusão para os
> usuários atuais do sistema. Sei que consido controlar as permissões por
> roles, porém, qdo eu criar um objeto novo, tenho q lembrar de colocar
> esse objeto na role geral do sistema (que da permissao a todos os
> usuarios), para que os usuários atuais consigam ter acesso ao objeto
> criado. Ou há alguma forma automática de se fazer isso??? Ou seja, todo
> objeto criado no banco pertence automaticamente a role do banco???
>     3 - Se eu decidir trabalhar com um único usuário, diferente do
> SYSDBA, para acessar meu banco de dados, há como eu alterar o owner de
> um banco em produção, sem ter que criar um banco de dados novo e
> importar tudo para dentro dele???
> 
>     O que vocês acham??? qual a melhor solução???
> 
> []s
> 
> Fabrício F. Kammer
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 





Mais detalhes sobre a lista de discussão lista