在oracle中限制对特定IP地址的模式访问

时间:2013-12-26 06:22:08

标签: oracle plsql

我想限制模式访问特定IP地址,我尝试了下面的代码,但仍然可以访问所有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; 
/

2 个答案:

答案 0 :(得分:0)

你的问题在这里:

  IF USER IN ('abc') THEN

用户将始终以大写形式返回用户,即“ABC”,除非你做了疯狂的事情并在定义用户时使用双引号。

因此,请将您的代码更改为:

  IF USER IN ('ABC') THEN

它应该有用。

希望有所帮助。

答案 1 :(得分:0)

试试这个:

SYS_CONTEXT('USERENV','HOSTNAME')

IP_ADDRESS指令并不总是有效。您可以通过在select中运行它来判断,如下所示:

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