2 Replies Latest reply on Feb 9, 2019 11:29 PM by J.Laurindo Chiappa

    Auditar Username

    Gustavo Kotarsky

      Estou implementando a auditoria do Oracle AVDF, e atualmente estou tendo problemas para obter o Username e/ou o OS UserName.

      Atualmente tenho 3 bancos sendo auditados, em um dos bancos, onde a auditoria está sendo feita diretamente em comandos dos bancos(onde cada usuário precisa se conectar ao banco pra realizar ações), está tudo certo, a ferramenta retorna os parâmetros de maneira correta.

      Nos outros dois bancos, estão sendo auditas aplicações WEB, e a ferramenta me retorna a conta de serviço e não o usuario que está conectando.

      Existe alguma forma de contornar esse problema?

      Grato.

        • 1. Re: Auditar Username
          J.Laurindo Chiappa

          Blz ? Bem, em primeiro lugar suponho que Oracle AVDF = Oracle Audit Vault and Database Firewall, né ? Sendo isso, eu não conheço em profundidade esse produto (recomendo inclusive tentar localizar um Grupo mais especialista nele, aqui nas Comunidades mesmo, ou em Foruns/Grupos de Discussão de terceiros na Internet) mas até onde eu sei ele usa SIM a facilidade de Auditoria nativa, built-in dentro do database, que portanto só reconhece usuário DE BANCO, usuários de Aplicação estão FORA do escopo dele : simplesmente NÃO TEM COMO vc exigir que o database enxergue / conheça a sua Aplicação, ele só 'enxerga' quem está conectando nele, que no caso é o APP SERVER, sim ?? Afinal, o RDBMS conhece/entende sobre DATABASES, então ele é plenamente capaz de identificar quando alguém conecta NO DATABASE, mas não tem como se querer exigir que ele entenda/reconheça quando o usuário final conectou na Aplicação e a ** APLICACAO ** conectou no banco pra pedir dados e entregar depois pro usuário, certo ? COMO EU DISSE, o DATABASE só enxerga quem conectou nele, DATABASE, sim sim ??? E só um detalhe : pra complicar ainda mais, em aplicações WEB é EXTREMAMENTE COMUM que não só os usuários da aplicação não tenham um usuário de banco correspondente e próprio para usarem (dividindo todas essas pessoas usuários da aplicação um único usuário de banco) como TAMBÉM que (pra melhor performance) as conexões desse único usuário no banco sejam COMPARTILHADAS, ie : uma hora o app server usa a conexão 1 do usuário de banco APPUSER pra trazer dados para o usuário da aplicação ZEZINHO, após isso ter sido feito SEM DESCONECTAR DO BANCO o app server usa essa mesma conexão de banco com o usuário APPUSER pra ler e trazer dados para o usuário LUISINHO da aplicação... Além de serem compartilhadas, ainda pra performance, o APP SERVER assim que sobe a aplicação vai lá no banco e já starta umas dezenas de sessões com o usuário de banco compartilhado e deixa elas sempre abertas, e as vai usando cfrme necessário : Isso é o chamado POOL DE CONEXÔES....

           

          O que fazer para Auditar usuários nesse tipo de ambiente WEB sem que cada usuário da app tenha o seu prório user de banco, E/OU as sessões são compartilhadas num pool ?? Desconsiderando por um momento a questão do OAVDF (que, como disse, não conheço profundamente), normalmente OU se usa alguma solução de Auditoria a nível de aap server , OU a aplicação web TEM que "explicar" pro database quem é o usuário da aplicação que está recebendo os dados da conexão feita com o usuário de banco : isso PODE ser feito gravando esse nome do usuário da aplicação numa tabela, OU num arquivo-texto (tipo um cookie, digamos) que o RDBMS consiga ler, OU (o mais performático e RECOMENDADO), a aplicação bota essa informação numa 'variável global' do database, uma área de memória que todas as sessões/conexões possam acessar - no linguajar Oracle, isso é um APPLICATION CONTEXT.... Aí, com o database SABENDO da informação, vc pode criar uma política de Auditoria que registre essa informação externa ao database, com a package DBMS_FGA, veja https://uhesse.com/2011/09/06/fine-grained-auditing-and-sys_context/ para um exemplo (genérico) da técnica....

           

          No seu caso, como não conheço profundamente o OAVDF, não sei dizer com certeza (e TORNO A RECOMENDAR que vc procure informação específica e especializada nele), mas ACREDITO que deve ser algo nesse estilo de DBMS_FGA com Contexts , ou de solução externa a nível de app server, que vc teria que implementar....

           

          Abraços,

           

          José Laurindo Chiappa

          • 2. Re: Auditar Username
            J.Laurindo Chiappa

            Adicionalmente, https://asktom.oracle.com/pls/apex/asktom.search?tag=auditing-200103 indica também a possibilidade de usar DBMS_SESSION.SET_IDENTIFIER para passar pro database a informação de quem é o usuário da app ... E  exemplos melhores de como passar pro banco a informação num CONTEXT são  http://jko-licorne.com/oracle/?page_id=1120 , https://asktom.oracle.com/pls/apex/asktom.search?tag=can-fga-policy-handlers-rely-on-package-state-when-sql-is-executed-in-parallel ....

             

            Abraços,

             

              Chiappa