Oracle限制用户只能从指定IP登录
2015-12-22 11:08
531 查看
为了数据库安全,有时候需要限制某些数据库用户只有特定的IP才能登陆,使用触发器,获取登录用户的IP就可以实现上述功能。
SQL语句如下:
使用USER1用户登录,会报如下错误,禁止登录:
代码优化,只允许特定数据库用户远程登录
SQL代码如下:
其中,
表cux_local_ip,代表本地IP,允许登录所有用户
cux_acess_remoteip_user,字段user_name代表哪些可以在对应的IP登录,access_ip为登录IP(ALL代表所有IP都能登录)
SQL语句如下:
CREATE OR REPLACE TRIGGER system.check_ip_addresses AFTER logon ON DATABASE BEGIN IF USER IN ('USER1', 'USER2') THEN IF sys_context('USERENV', 'IP_ADDRESS') NOT IN ('192.168.0.101', '192.168.0.102') THEN raise_application_error(-20000, 'Can not log in from this IP address (' || sys_context('USERENV', 'IP_ADDRESS') || ')'); END IF; END IF; END;
使用USER1用户登录,会报如下错误,禁止登录:
代码优化,只允许特定数据库用户远程登录
SQL代码如下:
CREATE OR REPLACE TRIGGER system.check_ip_addresses AFTER logon ON DATABASE BEGIN DECLARE l_count NUMBER; BEGIN SELECT COUNT(1) INTO l_count FROM cux_local_ip lip WHERE lip.ip = sys_context('USERENV', 'IP_ADDRESS'); IF l_count = 0 THEN SELECT COUNT(1) INTO l_count FROM cux_acess_remoteip_user ru WHERE ru.user_name = USER AND (ru.access_ip = 'ALL' OR sys_context('USERENV', 'IP_ADDRESS') = ru.access_ip); IF l_count = 0 AND USER !='SYSTEM' THEN raise_application_error(-20000, 'Login error,Permission denied!'); END IF; END IF; END; END;
其中,
表cux_local_ip,代表本地IP,允许登录所有用户
cux_acess_remoteip_user,字段user_name代表哪些可以在对应的IP登录,access_ip为登录IP(ALL代表所有IP都能登录)
相关文章推荐
- Oracle数据库 DGbroker三种保护模式的切换
- oracle 分页
- ora-01033:oracle initialization or shutdown in progress;
- Oracle数据库执行脚本常用命令小结
- PLSQL往Oracle数据库插入中文后变为问号 和 启动PLSQL时提示NLS_LANG在客户端不能确定的解决办法
- oracle 命令创建表空间以及用户、授权
- Oracle JDBC通过占位符可以查询可变长字段,不可查询固定长度字段
- Oracle 汉字在不同字符集下所占字节
- oracle 中rownum 使用技巧
- Oracle 特殊字符模糊查询的方法
- Oracle数据库SQL语句操作记录
- db2 数字转换字符 oracle和db2的sql语句区别
- Oracle查询所有默认密码的用户
- hibernate连接oracle,主键自动生成
- oracle insert 转义&
- Oracle常见查询(持续更新)
- Oracle查看表、存储过程、触发器、函数等对象定义语句的方法
- 连接Oracle与Hadoop(4) Oracle使用OSCH访问Hive表
- oracle database link
- Oracle数据库执行脚本常用命令小结