DECLARE
  v_session  sys.GV$SESSION%rowtype;
  --instance   sys.v$instance.instance_name%type;
BEGIN
    -- select sys_context('USERENV','IP_ADDRESS') into ip from dual;
    --
    --instance := userenv('instance');
    --
    select * into v_session from gv$session where sid = userenv('sid') and inst_id = userenv('instance');
    --select * into v_session from gv$session  where audsid = userenv('SESSIONID') and OSUSER= SYS_CONTEXT('USERENV','OS_USER');
    --
    --raise_application_error('-20000',v_session.username||' '||v_session.inst_id);
    -- Verifica se o usuário de banco tem acesso
    IF (UPPER(v_session.username) NOT IN ('SYS','ADMIN','DBSNMP','SYSMAN')) then
       -- Verifica se o usuário de Sistema Operacional tem acesso - Funcionário com perfil de DBA/AD/DW
       If UPPER(v_session.osuser) NOT IN ('MARCO.LIMA','GABRIELA.MARQUES','YURI.ADAME', -- DBA
       'ANDERSON.MOTA','DEIVISON.MUNIZ','JAQUELINE.GISMONTI','GUSTAVO.SILVA','ALINE.MAGALHAES','CHRISTIANO.MATOS','NATANAEL.SLEITE') then
          -- Trava de usuário com problema
          --if UPPER(v_session.username) in ('CONSULTA_DBSVS_WEB') then
          --raise_application_error('-20000','Usuário bloqueado!');
          --end if;
          --Verifica se as conexões são provenientes dos servidores ANVSSDFxx
          if (upper(v_session.machine) like '%ANVSSDF%') then
             null;
          elsif (upper(v_session.terminal) like '%ANVSSDF%') then
             null;
          --Verifica se as conexões são provenientes dos servidores WWW1.ANVISA.GOV.BR
          elsif (upper(v_session.machine) like '%WWW1.ANVISA.GOV.BR%') then
             null;
          elsif (upper(v_session.terminal) like '%WWW1.ANVISA.GOV.BR%') then
             null;
          --Libera o acesso temporário de migração
          elsif (upper(v_session.machine) like '%WWW1N%') then
             null;
              --###############################################################
             --Libera o acesso da máquina MarcelloAndrade do analista MARCELLO.ANDRADE do projeto PRIMOR
          elsif v_session.machine in ('nbk-0050','GESTAO\NBK-0050') and  UPPER(v_session.username) IN ('CONS_PRIMOR') then
          null;
            --###############################################################
          --Libera o acesso da máquina FSOARES-BR  - Consultar Oracle Felipe temporario
          --elsif v_session.machine in ('FSOARES-BR') and  UPPER(v_session.username) IN ('CONS_BAM') then
          --null;
          --Libera o acesso do usuário Luiz.Vassoler  - Consultar Oracle Felipe temporario
          elsif upper(v_session.osuser) in ('LUIZ.VASSOLER') and  UPPER(v_session.username) IN ('DWUNIMIX') then
          null;
          --Libera o acesso da máquina an041387 da usuaria Carolina.Pigret e da maquina AN042791 do Ricardo.Borges
          elsif (upper(v_session.terminal) in ('AN064166','AN064809','AN064183','AN064170'))
          and   (upper(v_session.osuser)   in ('CAROLINA.PINGRET','RICARDO.BORGES','MARCELO.ANGELO','FABIO.ALMEIDA'))
          and   (upper(v_session.username) = 'CONS_ESTAT_GGMED') and  ((upper(v_session.server) = 'DEDICATED')) then
             null;
          elsif (upper(v_session.program) in ('JDBC THIN CLIENT')) and  UPPER(v_session.username) IN ('ETIQUETA_WEB') then
             null;                              
          -- Acesso para o setor de Arrecadação do sistema SAT
          elsif UPPER(v_session.osuser) in ('FREDERICO.FERNANDES','JULIANA.QUARTIN','JORGE.NASCIMENTO') and (upper(v_session.username) = 'CADEMPRESA_WEB') then
             null;
          -- Libera o acesso para o usuário de banco CONS_PPS_DATAVISA
          elsif upper(v_session.osuser) in ('STELA.MELCHIOR','MARIA.VICENTE','CARLA.CRUZ','GUILHERME.BUSS','CARLOS.FORNAZIER','MARIO.CHAVES')
          and   upper(v_session.username) = 'CONS_PPS_DATAVISA' then
             null;
          --Acesso para Sammed
          --elsif (upper(v_session.username) = 'SAMMED_WEB') then
          --null;
          -- Acesso para a GGREM
          elsif UPPER(v_session.osuser) in ('ALESANDRE.SANTOS') and (upper(v_session.username) = 'MON_WEB') then
             null;
          --Verifica se as conexões são proveniente de um APLICATIVO autorizado
          elsif upper(v_session.program) in ('AGENDATEL.EXE','BAIXABBARRECADACAO.EXE','CODIVA_VS01.EXE','DIVA_VS01.EXE','FINANCEIROSIPAD.EXE',
                                             'INETINFO.EXE','ESTATPAFSEG.EXE','MONITORAMENTO.EXE','PRJ_INTERFACE_DBMON.EXE',
                                             'PDARF.EXE','UNICA.EXE','SNGPC.EXE','SIPAT.EXE','FINANCEIROSIPAD.EXE') then
             null;
          --Elimina as conexões de usuários de SO desconhecidos
          elsif v_session.osuser is null then
             begin
                execute immediate 'ALTER SYSTEM KILL SESSION '||''''||v_session.sid||','||v_session.serial#||',@'||v_session.inst_id||''';';
             EXCEPTION
             when others then
                insert into admin.tb_after_logon values (v_session.OSUSER, v_session.PROGRAM, v_session.username, v_session.machine, v_session.terminal, v_session.logon_time,'Login-Anvisa-1.0');
                commit;
                raise_application_error('-20000','Acesso negado - 1.0!');
             end;
          --Elimina as conexões dos usuário DB*
          elsif (UPPER(v_session.username) like 'DB%') or (UPPER(v_session.username) in ('AD')) then
             begin
                execute immediate 'ALTER SYSTEM KILL SESSION '||''''||v_session.sid||','||v_session.serial#||',@'||v_session.inst_id||''';';
             EXCEPTION
             when others then
                insert into admin.tb_after_logon values (v_session.OSUSER, v_session.PROGRAM, v_session.username, v_session.machine, v_session.terminal, v_session.logon_time,'Login-Anvisa-1.1');
                commit;
               raise_application_error('-20000','Acesso negado - 1.1!');
             end;
          --Elimina as conexões não autorizadas
          else
             If (UPPER(v_session.osuser) NOT IN (
             /* ANALISTA DE SISTEMAS - ANVISA */
             /*'CARLOS.GONCALVES','DANIELLE.MACIEL','EWERTON.MARTINS',*/'HONORIO.MARQUES','PEDRO.ALMEIDA','BRUNO.BEHMOIRAS','VICTOR.LUIZ',
             /*'PAULO.CESAR',*/'NELCI.SANTOS','ORACLE',--'VERANGGE.LOPES','JORGE.CARVALHO',
             /* ANALISTA DE SISTEMAS - MIRANTE */
             'ADEMIR.JUNIOR','ALEXANDRE.MAXIMO','ROGERIO.MIARI','MARCELO.RODRIGUES',
             'BRUNO.SANTOS','DIOGO.CORAZOLLA','LEO.MARRA','JOAO.CHAGAS','CLAUDIO.DASILVA',
             'WILSON.BRITO','DAVID.PEREIRA','RAIMUNDA.CIRILO','HOSANA.MACHADO','RODRIGO.AIRES','FRANCISCO.ADEMILSON','JONAS.GONCALVES' 
             /* DIVERSOS */)) then
                begin
                   execute immediate 'ALTER SYSTEM KILL SESSION '||''''||v_session.sid||','||v_session.serial#||',@'||v_session.inst_id||''';';
                EXCEPTION
                when others then
                   insert into admin.tb_after_logon values (v_session.OSUSER, v_session.PROGRAM, v_session.username, v_session.machine, v_session.terminal, v_session.logon_time,'Login-Anvisa-1.2');
                   commit;
                   --admin.send_mail('ORACLE','dba@anvisa.gov.br',instance||' - '||to_char(sysdate,'dd/mm/yyyy hh24:mi:ss')||' Login-Anvisa-1.1','Login: '||v_session.OSUSER||chr(13)||'Program: '||v_session.PROGRAM||chr(13)||'User DB: '||v_session.username||chr(13)||'Máquina: '||v_session.machine||chr(13)||'Máquina: '||v_session.terminal);
                   raise_application_error('-20000','Acesso negado! Favor entrar em contato com a GESIS para maiores informações. Ramal: 1133.');
                end;
             end if;
          end if;
       End if;
    END IF;
END;

hostgator