Pular para o conteúdo
  • Este tópico contém 7 respostas, 6 vozes e foi atualizado pela última vez 16 anos, 1 mês atrás por VitorLeandro.
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #92648
    Lourival
    Participante

      Amigos,

      Fui designado a fazer um tipo de auditoria no uso do BD Oracle 10g
      aqui na empresa.

      Algo do tipo :

      Quem conectou, hora que conectou
      aplicativo usado,hora que desconectou,
      no BD.

      Para começar fiz essa select:

      select username,status,osuser,machine,logon_time,program,state,action from v$session
      where username is not null
      order by machine

      mas para saber hora que desconectou não encontrei um método
      que posso juntar a esse select.

      alguma sugestão?

      Grato,

      #92649
      diegolenhardt
      Participante

        Triggers,

        http://download.oracle.com/docs/cd/B105 … 8trigs.htm

        Mais especificamente os eventos:

        aí tem que testar USERENV(‘USER’)..

        Triggers on LOGON and LOGOFF Events

        LOGON and LOGOFF triggers can be associated with the database or with a schema. Their attributes include the system event and username, and they can specify simple conditions on USERID and USERNAME.

        * LOGON triggers fire after a successful logon of a user.
        * LOGOFF triggers fire at the start of a user logoff.
        

        😉

        #92650
        Lourival
        Participante

          pois é diego,
          mas eu nao posso criar uma trigger,ficaria evidente,
          com o select consegui constatar muita coisa,
          porém preciso de mais algumas informações.

          O Banco játem uma auditoria, feita pelo pessoal do sofware,
          eu pensei em rodar uma query sem comprometer isso.

          Valew,

          #92653
          Avatar photoRegis Araujo
          Participante

            Opa amigo..

            Para pegar o logout é bem complicado heim.. sem uma trigger de logout..

            Mas as demais informações.. vc pode usar o SYS_CONTEXT que irá lhe trazer diversas informações… só que o SYS_CONTEXT só tras informações da sessão que estiver rodando ele.. então vc vai ter q criar uma trigger.. não tem como realizar uma auditoria sem trigger.. pq se for por select.. vc vai ter q schedular um JOB q rode a cada segundo.. e isto é muito custoso para o banco.. Outras maneiras de ativar trigger é via logminer e a propria auditoria do oracle…

            Abaixo um select q retorna as informações do SYS_CONTEXT.. caso vc decida criar uma trigger.. vai te ajudar muito..

            select
            SYS_CONTEXT('USERENV','TERMINAL') terminal,
            SYS_CONTEXT('USERENV','LANGUAGE') language,
            SYS_CONTEXT('USERENV','SESSIONID') sessionid,
            SYS_CONTEXT('USERENV','INSTANCE') instance,
            SYS_CONTEXT('USERENV','ENTRYID') entryid,
            SYS_CONTEXT('USERENV','ISDBA') isdba,
            SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory,
            SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency,
            SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar,
            SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format,
            SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language,
            SYS_CONTEXT('USERENV','NLS_SORT') nls_sort,
            SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
            SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid,
            SYS_CONTEXT('USERENV','SESSION_USER') session_user,
            SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,
            SYS_CONTEXT('USERENV','PROXY_USER') proxy_user,
            SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid,
            SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain,
            SYS_CONTEXT('USERENV','DB_NAME') db_name,
            SYS_CONTEXT('USERENV','HOST') host,
            SYS_CONTEXT('USERENV','OS_USER') os_user,
            SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,
            SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
            SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol,
            SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id,
            SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id,
            SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE')authentication_type,
            SYS_CONTEXT('USERENV','AUTHENTICATION_DATA')authentication_data,
            SYS_CONTEXT('USERENV','CURRENT_SQL') current_sql,
            SYS_CONTEXT('USERENV','CLIENT_IDENTIFIER') client_identifier,
            SYS_CONTEXT('USERENV','GLOBAL_CONTEXT_MEMORY')global_context_memory
            from dual;

            Abraços..!

            #92656
            Ishii
            Participante

              Olá,

              Acho que a criação da trigger pode ser “camuflada” com os seguintes pontos:

              1) Não crie a trigger em um OWNER comum, use o SYS ou o SYSTEM mesmo, assim fica mais difícil para outros saberem se é do Oracle ou não, como será usado no logon ou logoff não há custo significante;
              2) Use um nome na trigger que não demonstre o que está sendo feito. Uma trigger com o nome TR_AUDIT_QUALQUERCOISA fica meio evidente assim como usar tabelas como audit_table_xpto (use algo como OLAP$REPDATA e tabelas com $ ou _ no início ajudam a confundir)
              3) Se você tem programadores ou outros que tenham acesso ao dicionário de objetos assim como o source, criptografe o corpo da trigger, é mais fácil e ainda fica mais “obscura” a sua utilização;
              4) Crie também uma auditoria desta trigger, pois ela não deveria ser desabilitada sem seu conhecimento. E deixe a auditoria da auditoria mais escondida ainda….

              Isso não deve ser custoso para o BD e nem claro para os “xeretas” de plantão. Tenho um monitoramento em uma base de um Cliente que faz essas verificações apesar de ter um ERP de outra empresa, porém isso foi necessário para saber alguns pontos importantes. Às vezes, colocar as coisas na frente do pessoal dificulta para eles saberem onde está… (da série: se quiser esconder algo, mostre para todos sem dizer o que é…)

              []s Ishii

              #92657
              Leonardo Faria Ferreira
              Participante

                Boa Noite.

                Você ainda pode auditar da seguinte forma:

                AUDIT SESSION WHENEVER SUCCESSFUL -> Audita todas as sessões quando conectados com sucesso inclusive sys e system.

                AUDIT SESSION WHENEVER NOT SUCCESSFUL -> Audita todas as sessões quando não conseguem conectar inclusive sys e system.

                NOAUDIT SESSION WHENEVER SUCCESSFUL -> Desabilita a auditoria quando conectado com sucesso.

                NOAUDIT SESSION WHENEVER NOT SUCCESSFUL -> Desabilita a auditoria quando conectado sem sucesso.

                Para usar esta auditoria, você precisará configurar o parâmetro de inicialização: AUDIT_TRAIL.

                []s

                #92670
                Lourival
                Participante

                  Amigos,
                  obrigado pelas dicas.

                  O ponto é que, temos um acesso via VPN da europa,
                  outro acesso é feito de outra cidade.

                  Tem o pessoal de 1 Aplicativo e o pessoal de outro aplicativo,
                  ambos baseados em Java, que ficam verificando o funcionamento do banco diariamente.

                  E ainda tem um pessoal OCP que de vez em quando, sisma de fazer ajustes no BD .

                  a auditoria que farei será temporária, somente em alguns momentos quando um desses 3 grupos estiverem cutucando o BD.

                  Já existe um audit_trail rodando, só preciso saber o logon e o logoff destes “Artistas”.

                  Obrigado

                  #92671
                  VitorLeandro
                  Participante

                    Muito bom Thunder_Catz,

                    Sua lista tem muita coisa interessante!

                    Acrescente a sua lista as seguintes colunas tambem:

                    sys_context(‘USERENV’, ‘MODULE’) , — Programa/Modulo que logou
                    sys_context(‘USERENV’, ‘HOST’) , — Mostra domínio/maquina
                    sys_context(‘USERENV’, ‘SERVER_HOST’) — Caso utilize RAC, saber em qual dos nós o usuário logou

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.