[ОТВЕТИТЬ]
Опции темы
22.03.2013 20:18  
OlegON
Код:
CREATE OR REPLACE TRIGGER BLOCK_TOOLS_FROM_PROD
AFTER LOGON ON DATABASE
DECLARE
V_PROG VARCHAR2 (256);
V_USER VARCHAR2 (64);
V_HOST VARCHAR2 (64);
BEGIN
SELECT SYS_CONTEXT('userenv','module'),
SYS_CONTEXT('userenv','session_user'),
SYS_CONTEXT('userenv','host')
INTO V_PROG, V_USER, V_HOST
FROM dual;
IF V_USER IN ('SUPERMAG') THEN
IF V_HOST NOT IN ('EX','EXCHANGE','kk','KOVALEVSKY','MISHA'||CHR(0),'poseidon','UNKNOWN','VASEK')
THEN
DBMS_LOCK.SLEEP(1000);
RAISE_APPLICATION_ERROR(-20000, V_HOST||':Error #kadum!');
END IF;
IF UPPER(V_PROG) LIKE '%EXCEL%' OR -- MS-EXCEL PLUG-IN
UPPER(V_PROG) LIKE '%ACC%' -- Access
THEN
DBMS_LOCK.SLEEP(1000);
RAISE_APPLICATION_ERROR(-20000, V_HOST||':Block error #nalbe!');
END IF;
END IF;
 
20.06.2013 09:18  
OlegON
Как вариант - выкидывание через джоб, чтобы триггер не генерировал ошибки...

Код:
create or replace procedure disconnect_levosuper is
begin
for c in (select sid,serial# from v$session where username='SUPERMAG' and machine!='GIPERBOX' and machine!='CCSERVER')
loop
begin
execute immediate
'alter system disconnect session ''' || c.sid || ',' || c.serial# || ''' immediate';
exception when others then null;
end;
end loop;
end;
Код:
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'kill_boring',
job_type => 'PLSQL_BLOCK',
job_action => '
begin 
disconnect_levosuper;
disconnect_levosuper;
disconnect_levosuper;
disconnect_levosuper;
disconnect_levosuper;
exception when others then null; 
end;
',
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1;',
enabled => TRUE
);
END;
/
т.е. джобом будут выкидываться все сессии от supermag, установленные не с тех машин, с каких нужно.
 
20.06.2013 13:00  
bayan
Добавив в триггер такой кусок, можно ограничить подключения к БД средствами разработки:
Код:
select upper(program)  
           into my_program  
           from v$session  
           where sid=my_sid;  
    if usr in ('USR1','USR2') and   
        (my_program like '%SQL%' or  
         or my_program like '%MSACCESS%'  
         or my_program like '%DEV%'  
          ) then  
       RAISE_APPLICATION_ERROR (-20000, '!');  
    end if;
Так можно банить по IP
Код:
IP_ADR VARCHAR2(15);
IP_ADR := SYS_CONTEXT('userenv', 'IP_ADDRESS');
if IP_ADR='192.168.1.1' and usr='USR1' then
        RAISE_APPLICATION_ERROR (-20000, '!!!');
   end if;
 
 
Опции темы



Часовой пояс GMT +3, время: 02:54.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.