Estou tentando montar uma trigger para bloqueio de usuário, até ai, tranquilo! Mas quero bloquear somente alguns usuários de sistema operacional.
Meu exemplo fixa os usuários numa variável, mas eu gostaria de cadastra-los em uma tabela e a trigger realizar a consulta, para que toda vez que fossem delegar privilegios de acesso para este caso, não faria alterações na trigger.
Veja meu exemplo:
CREATE OR REPLACE TRIGGER SYS.BLOCK_LOGIN
AFTER LOGON ON DATABASE
DECLARE
v_prog sys.v_$session.program%TYPE;
v_username sys.v_$session.username%TYPE;
v_osuser sys.v_$session.osuser%TYPE;
v_sid sys.v_$session.sid%TYPE;
v_serial sys.v_$session.sid%TYPE;
--v_inst_id sys.v_$session.sid%TYPE;
BEGIN
SELECT program, username, osuser, sid, serial#
INTO v_prog, v_username, v_osuser, v_sid, v_serial
FROM sys.v_$session
WHERE sid = USERENV('SID')
AND audsid != 0 -- Não verifica conexões do SYS
AND rownum = 1; -- Parallel processes will have the same AUDSID's
IF UPPER(v_osuser) not in ('BR3AMR','BR3CAM8') -- Estes são os usuários
THEN
IF (UPPER(v_username) = 'ADMRMS')
THEN
RAISE_APPLICATION_ERROR(-20000, 'Block Access! ('||v_osuser||' - '||v_username||' - '||v_prog||')');
END IF;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN NULL;
END;
/