如何限定特定IP访问Oracle数据库

0    457    1

Tags:

👉 本文共约7351个字,系统预计阅读时间或需28分钟。

前言部分

导读和注意事项

各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,\~O(∩_∩)O\~:

① 限定IP访问Oracle数据库的3种方法(重点)

② 如何将信息写入到Oracle的告警日志中

③ RAISE_APPLICATION_ERROR不能抛出错误到客户端环境

④ 系统触发器

⑤ 隐含参数:_system_trig_enabled

本文简介

本文详细介绍了3种限制IP地址登录Oracle数据库的办法。

本文实验环境介绍

项目source db
db 类型RAC
db version11.2.0.3.0
db 存储ASM
OS版本及kernel版本RHEL 6.5
数据库服务器IP地址192.168.59.130
客户端IP地址192.168.59.1或192.168.59.129

限定IP访问Oracle数据库的3种办法

利用登录触发器

简单版

客户端登录:

告警日志无输出。

复杂版

复杂版就是需要记录登录日志,并把报错信息输出到告警日志中。

客户端登录:

告警日志:

查询日志表:

SELECT * FROM XB_AUDIT_LOGON_LHR;

注意事项

需要注意的问题:

  1. 触发的对象类型可以为DATABASE,也可以为“用户名.SCHEMA”,如:

AFTER LOGON ON DATABASE

AFTER LOGON ON SCOTT.SCHEMA

  1. 当触发的对象类型为DATABASE的时候,登录用户不能拥有“ADMINISTER DATABASE TRIGGER”的系统权限;当触发的对象类型为“用户名.SCHEMA”的时候,登录用户不能拥有“ALTER ANY TRIGGER”的系统权限。否则,这些用户还是会正常登录到数据库,只是将相应的报错信息写入到告警日志中。所以,拥有IMP_FULL_DATABASE和DBA角色的用户以及SYS和EXFSYS用户将不能通过这种方式限制登录。
  2. 隐含参数“_SYSTEM_TRIG_ENABLED”的默认值是TRUE,即允许DDL和系统触发器。当设置隐含参数“_SYSTEM_TRIG_ENABLED”为FALSE的时候,将禁用DDL和系统触发器。所以,当该值设置为FALSE的时候将不能通过这种方式限制登录。
测试第二点

客户端继续登录,发现不能正常登录。将触发器中的AFTER LOGON ON DATABASE修改为AFTER LOGON ON LHR8.SCHEMA,其他不变,继续测试:

发现可以正常登录了,告警日志:

测试第三点

将触发器中的AFTER LOGON ON LHR8.SCHEMA修改为AFTER LOGON ON DATABASE,其他不变,继续测试:

不能正常登录,下面禁用系统触发器:

进行登录:

发现可以正常登录了。将参数"_system_trig_enabled"修改回原值。

利用登录触发器实现时间段登录

Use Event Triggers

------------------

If you allow the users to log in the database only from Monday to Friday included,

and from 8AM to 6PM, create an event trigger that checks after logon on

database for each user (except the DBA users) that the connection occurs only

within this timeframe.

Example 1

-------

1. No check set up yet: any ordinary user can log into the database:

SQL> connect test_trigger/test_trigger

Connected.

2. The DBA creates an event trigger that checks if the connection occurs

between Monday and Friday , and within working hours: 8AM to 6PM.

Trigger created.

3. It is Friday 5PM : an ordinary user can log into the database:

Example 2

-------

Another example to restrict the logon periods for a users so that they can only

access the database betrween the periods to 17:00 - 24:00 daily.

If the user attempts to logon during a period outside of this range his logon

attempt will fail:

However, users with ADMINISTER DATABASE TRIGGER system privilege can log into

the database any time.

利用sqlnet.ora

第二种是修改\$ORACLE_HOME/network/admin/sqlnet.ora文件,增加如下内容:

之后重新启动监听器即可。这样客户端在登录的时候会报“ORA-12537: TNS:connection closed”的错误。

需要注意的问题:

  1. 需要设置参数TCP.VALIDNODE_CHECKING为YES才能激活该特性。
  2. 一定要许可或不要禁止数据库服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器,而该IP被禁止了,但是通过服务启动或关闭则不影响。
  3. 当参数TCP.INVITED_NODES和TCP.EXCLUDED_NODES设置的地址相同的时候以TCP.INVITED_NODES的配置为主。
  4. 修改之后,一定要重起监听才能生效,而不需要重新启动数据库。
  5. 这个方式只是适合TCP/IP协议。
  6. 这个配置适用于Oracle 9i以上版本。在Oracle 9i之前的版本使用文件protocol.ora。
  7. 在服务器上直接连接数据库不受影响。
  8. 这种限制方式是通过监听器来限制的。
  9. 这个限制只是针对IP检测,对于用户名检测是不支持的。

删除之前创建的触发器,继续测试。

利用防火墙

第3种是修改数据库服务器的IPTABLES(配置文件:/etc/sysconfig/iptables)来限制某些IP登录数据库服务器。如下:

则,192.168.59.129这台主机将不能连接到数据库服务器了,会报“ORA-12170: TNS:Connect timeout occurred”的错误。

测试:

该部分可以参考网络配置,小麦苗从网上找了很多。

我们可以通过以下的iptables的设置来限制用户访问oracle所在linux操作系统的安全。

1、清楚操作系统默认的iptables策略

我本机安装的是centos6.0,安装之后系统会提供iptables默认的policy策略,我们首先要清楚默认的策略

iptables -F

2、开发22和1521端口对局域网的某个IP,在本例中客户端ip是192.168.1.125,oracle所在机器的IP是192.168.1.144,在这里,设置仅有该客户端可以访问22和1521端口,局域网内的其他IP都不允许访问,

iptables -A INPUT -s 192.168.1.125/32 -i eth0 -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -s 192.168.1.125/32 -i eth0 -p tcp --dport 1521 -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j DROP

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 1521 -j DROP

这样同一网段内除192.168.1.125之外其他IP都不能访问数据库服务器,即使ping命令也不可以

3、开发22和1521的OUTPUT链给192.168.1.125,否则已经启动的oracle instance的pmon进程无法动态注册到1521端口中

iptables -A OUTPUT -d 192.168.1.125/32 -p tcp --sport 22 -j ACCEPT

iptables -A OUTPUT -d 192.168.1.125/32 -p tcp --sport 1521 -j ACCEPT

4、保存当前设置的iptables规则

service iptables save

这时系统会将已经设置的规则保存到/etc/sysconfig/iptables文件中

否则重启之后之前设置的规则都会失效

先关闭所有的80端口

开启ip段192.168.1.0/24端的80口

开启ip段211.123.16.123/24端ip段的80口

# iptables -I INPUT -p tcp --dport 80 -j DROP

# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

# iptables -I INPUT -s 211.123.16.123/24 -p tcp --dport 80 -j ACCEPT

以上是临时设置。

1.先备份iptables

# cp /etc/sysconfig/iptables /var/tmp

2.然后保存iptables

# service iptables save

3.重启防火墙

#service iptables restart

以下是端口,先全部封再开某些的IP

iptables -I INPUT -p tcp --dport 9889 -j DROP

iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 9889 -j ACCEPT

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复