我已经过滤了访问数据库服务器的 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)
我该怎么做才能做到?
我认为执行此操作的唯一纯 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 也从本地主机登录,或者完全排除它们:)
归档时间: |
|
查看次数: |
10280 次 |
最近记录: |