通过数据库级的trigger能够限制用户从某个IP登录到数据库. 但是这个trigger却有一定的限制如拥用dba权限能绕过这个限制等等. CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE DECLARE VAR_USER_IP VARCHAR(30); BEGIN select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL; IF VAR_USER_IP='192.168.0.1' THEN RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon'); END IF ; END; 这个是限制所有除DBA权限的用户从指定的IP登录 下面这个是可以对具体某个用户从指定的IP登录: 需要在数据库下建表SYSUSER$IP,我建在了SYS方案下 表结构只要USERNAME和IP字段就可以了。 CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE DECLARE VAR_USER_IP VARCHAR(30); VAR_USER VARCHAR(30); USERIP VARCHAR(30); BEGIN select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL; select user INTO VAR_USER FROM DUAL; select IP INTO USERIP FROM SYS.SYSUSER$IP WHERE USERNAME=VAR_USER; IF (VAR_USER_IP != USERIP) THEN RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon'); END IF ; END;跟大家分享一下!
通过数据库级的trigger能够限制用户从某个IP登录到数据库. 但是这个trigger却有一定的限制如拥用dba权限能绕过这个限制等等. CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE DECLARE VAR_USER_IP VARCHAR(30); BEGIN select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL; IF VAR_USER_IP='192.168.0.1' THEN RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon'); END IF ; END; 这个是限制所有除DBA权限的用户从指定的IP登录
http://forums.oracle.com/forums/thread.jspa?threadID=651208&tstart=0http://forums.oracle.com/forums/thread.jspa?threadID=616176&start=15&tstart=0
tcp.validnode_checking=yes #确定是否对客户机IP地址进行检查
tcp.invited_nodes=(ip1,ip2......) #列举允许连接的客户机的IP地址,以逗号分隔重启监听:
lsnrctl stop
lsnrctl start就搞定了。
我的目的是限制不同的用户使用不同的ip地址登录。"majy" 的帮助好像是我需要的。但还不太清楚怎么做,我先研究研究。
如果能再解释一下就更好了谢谢二位大侠的回答!
http://hi.baidu.com/edeed/blog/item/45479245bc3861398794739f.html以前还看到过通过profile和其他的方法来进行类似的限制的,不过现在记不清楚了,找到了总结在blog里
还是谢谢你们!分就散给你们了
但是这个trigger却有一定的限制如拥用dba权限能绕过这个限制等等.
CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE
DECLARE
VAR_USER_IP VARCHAR(30);
BEGIN
select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL;
IF VAR_USER_IP='192.168.0.1' THEN
RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon');
END IF ;
END;
这个是限制所有除DBA权限的用户从指定的IP登录
下面这个是可以对具体某个用户从指定的IP登录:
需要在数据库下建表SYSUSER$IP,我建在了SYS方案下
表结构只要USERNAME和IP字段就可以了。
CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE
DECLARE
VAR_USER_IP VARCHAR(30);
VAR_USER VARCHAR(30);
USERIP VARCHAR(30);
BEGIN
select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL;
select user INTO VAR_USER FROM DUAL;
select IP INTO USERIP FROM SYS.SYSUSER$IP WHERE USERNAME=VAR_USER;
IF (VAR_USER_IP != USERIP) THEN
RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon');
END IF ;
END;跟大家分享一下!
但是这个trigger却有一定的限制如拥用dba权限能绕过这个限制等等.
CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE
DECLARE
VAR_USER_IP VARCHAR(30);
BEGIN
select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL;
IF VAR_USER_IP='192.168.0.1' THEN
RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon');
END IF ;
END;
这个是限制所有除DBA权限的用户从指定的IP登录