2013-12-26 2 views
2

Я хочу ограничить доступ к схеме для определенного IP-адреса, я попробовал код ниже, но этот db доступен для всех ip-адресов. как я могу achive это из-под кодомОграничение доступа схемы к конкретному IP-адресу в оракуле

CREATE OR REPLACE TRIGGER system.check_ip_addresses 
AFTER LOGON 
ON DATABASE 
DECLARE 
    l_ip_address VARCHAR2(16) := SYS_CONTEXT('USERENV', 'IP_ADDRESS'); 
BEGIN 
    IF USER IN ('abc') THEN 
    IF l_ip_address IN ('189.14.1.54') THEN 
     NULL; 
    ELSE 
     RAISE_APPLICATION_ERROR(-20000, 'Can not log in from this IP address (' || l_ip_address || ')'); 
    END IF; 
    END IF; 
END; 
/

ответ

0

Ваша проблема здесь:

IF USER IN ('abc') THEN 

USER всегда возвращает пользователя в верхнем регистре, т.е. «ABC», если, конечно, вы делаете что-то безумное и используйте двойные кавычки, когда вы определяете пользователя.

Таким образом, изменить код, чтобы быть:

IF USER IN ('ABC') THEN 

и он должен работать.

Надеюсь, что это поможет.

+0

Mark, я попробовал ваше предложение, но его не работает, но я могу подключить базу данных к другим ip-интерфейсам. Есть ли другой способ достичь ip ограничение – Mani

0

Попробуйте это:

SYS_CONTEXT('USERENV','HOSTNAME') 

директива IP_ADDRESS не всегда работает. Вы можете сказать, запустив его в пределах выбора, например:

SQL> select SYS_CONTEXT('USERENV','IP_ADDRESS') from dual; 

SYS_CONTEXT('USERENV','IP_ADDRESS') 
------------------------------------------------------------------- 


SQL> select SYS_CONTEXT('USERENV','HOST') from dual; 

SYS_CONTEXT('USERENV','HOST') 
------------------------------------------------------------------- 
orcl.prod 
Смежные вопросы