3.8 只限制来自特定节点的访问
背景 在许多情况下,只有指定的客户机集将连接到数据库服务器。以下是一个典型的体系结构:
此处,数据库服务器为 findb01 和 hrdb01,且数据库名为 FINDB(财务数据库)和 HRDB(HR 数据库)。HR 部门中的客户机只连接到 HRDB;如果它们需要 FINDB 中的某些数据,则连接到在财务部门的服务器上运行的应用程序并获取数据。同样,财务部门中的应用服务器从不直接连接到 HRDB。
如果财务部门中的客户机 finas01 尝试连接到 HRDB,则将出现什么情况?只要它知道有效的用户 ID 和口令,便可以成功连接。通常,您应保护用户的口令,但有时存在一些使用已知口令的普通用户。例子包括使用不安全口令(如“hrapp”、“password”甚至“abc123”)的应用程序用户。即使实施了口令管理策略(如第 4 阶段所述),口令仍有可能是为人所熟知的。
因此,必须在服务器周围构建一个防护墙,以防计算机授权列表以外的客户机连接到这些服务器。 策略 如何确保只允许来自 HR 部门的客户连接进入数据库 HRDB?方法有两种,即登录触发器和监听器节点验证。
登录触发器。在该方法中,您将创建一个触发器,它在登录时引发,检查 IP 地址,然后当 IP 地址不在允许的计算机列表中时失败。此触发器如下所示: 1 create or replace trigger valid_ip
2 after logon on database
3 begin
4 if sys_context('USERENV','IP_ADDRESS') not in (
5 '100.14.32.9'
6 ) then
7 raise_application_error (-20001,'Login not allowed from this IP');
8 end if;
9* end;
在第 5 行中,您可以设置有效客户机的所有 IP 地址(括在引号中并由逗号分隔)。在此触发器生效后,当 SCOTT 尝试从触发器列表以外的 IP 地址连接时: $ sqlplus scott/tiger@hrdb
ERROR:
ORA-00604:error occurred at recursive SQL level 1
ORA-20001:Login not allowed from this IP
ORA-06512:at line 5
注意错误 ORA-20001:Login not allowed from this IP,该错误置于触发器中。您可以根据需要使此消息具备说明性。还可以使触发器更强大,以收集有用信息(如将类似尝试记录在表中)。
但请注意一个非常重要的问题:由于登录触发器不会对 DBA 用户触发,因此不要在启用 DBA 角色的情况下禁止某人以用户身份登录。该风险并非想象那样恐怖;实际上,您可能需要让 DBA 从任何客户机登录。
监听器节点验证。另一个方法是在监听器本身禁用登录尝试。监听器禁止指向数据库服务器的连接尝试,因此并不需要触发器。要启用节点验证,只需在服务器 hrdb01 上的文件 $ORACLE_HOME/network/admin/sqlnet.ora 中设置以下行。 tcp.validnode_checking = yes
tcp.invited_nodes = (hrdb01, hras01, hras02)
此处,您已经指定了允许连接到监听器的客户机(hras01 和 hras02)。还可以将主机名指定为 IP 地址。将所有节点名称置于由逗号分隔的单个不中断行中(非常重要)。别忘了添加数据库服务器名称 (hrdb01)。
重新启动后,如果客户端尝试从 hras01 或 hras02 以外的计算机登录,则将收到错误 $ sqlplus scott/tiger@hrdb
ERROR:
ORA-12537:TNS:connection closed
这个非常不直观的错误是由在监听器级发生的过滤导致的。当监听器本身终止连接尝试时,您将收到 connection closed 错误。即使用户具有 DBA 角色也会出现该错误,这是因为该尝试尚未到达数据库。
节点验证是一个非常强大的特性。有关该特性的详细信息,请阅读我撰写的 DBAzine 文章“使用 Oracle Net 构建一个简单的防火墙”。
(编辑:aniston)
|