限制每个 IP 地址的数据库访问

Dia*_*nto 5 oracle security

我已经过滤了访问数据库服务器的 IP 地址,如下所示:

设置sqlnet.ora

tcp.validnode_checking = YES
tcp.invited_nodes = (localhost, 192.168.100.130, 192.168.100.186)
Run Code Online (Sandbox Code Playgroud)

但是在我的 ORACLE_HOME 中,有 1 个以上的数据库,比如说 DB WORKSHOP 和 DB COURSE

我想问一下每个数据库连接数据库的问题,例如:

DB WORKSHOP only can be access from 192.168.100.130
DB COURSE only can be access from 192.168.100.186
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能做到?

Phi*_*lᵀᴹ 4

我认为执行此操作的唯一纯 Oracle 方法是在 2 个不同 ORACLE_HOME 的不同端口上运行 2 个单独的侦听器,而不是仅使用一个侦听器。

解决此问题的一种更明智的方法是使用其他安全措施...对于此任务来说,单独的用户名和密码很常见 - 我猜您必须使用 LDAP 或阻止此操作的东西。另一种选择是每个数据库上的登录触发器,用于检查远程 IP,如果它不是来自正确的计算机,则断开会话。

select SYS_CONTEXT('USERENV','IP_ADDRESS') from dual;
Run Code Online (Sandbox Code Playgroud)

...会给你远程IP地址。

触发器例如:

CREATE OR REPLACE TRIGGER DENY_LOGIN
AFTER LOGON ON DATABASE
DECLARE
  foo varchar2(128);
BEGIN

  IF ( sys_context('userenv','ip_address') <> '192.168.100.130' )
  THEN
    raise_application_error( -20001, 'Connection not authorised' );
  END IF;

EXCEPTION
WHEN OTHERS THEN
  RAISE;

END;
Run Code Online (Sandbox Code Playgroud)

...将为 DB WORKSHOP 完成这项工作。

(未经测试,但应该没问题)

可能最好添加一个子句,允许 DBA 也从本地主机登录,或者完全排除它们:)