我们为公司的各种客户运行具有多个数据库的 Exadata XM-8。我想将对其中一个数据库的访问限制为一台特定服务器。我知道我可以运行登录触发器并以这种方式限制 IP 地址,但我一直对登录触发器有点害羞。我读过我可以向扫描侦听器添加第二个端口并通过以下命令限制访问。
srvctl modify scan_listener -p “TCP:1521/TCP:1522″
使用端口 1523 添加额外的节点侦听器,例如:srvctl add listener -l LISTENER1523 -p 1523
。
启动新节点侦听器:srvctl start listener -l LISTENER1523
。
使用: 进行双重检查srvctl status listener -l LISTENER1523
。
使用: 进行双重检查lsnrctl status LISTENER1523
。
alter system set local_listener='(DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST="scan address")(PORT=1523))))' scope=BOTH SID='OCRL1';
alter system set remote_listener='scan:1522' scope=BOTH SID='OCRL1';
alter system register;
仔细检查lsnrctl status LISTENER1523
实例是否已注册。
然后在Exadata上的防火墙中我将防火墙设置为限制我想要的服务器对端口1522的访问。
您认为哪一个更好?为什么或者您会做什么?。
一般来说,尝试通过 IP 地址限制数据库访问是毫无意义的,因为客户端可能会欺骗该地址以绕过您设置的任何白名单。也不建议为不同的 SID 创建单独的侦听器端口,因为它只会打开更多端口并很快成为管理噩梦。
如果您有企业版(Exadata 建议使用),请考虑使用 Oracle Connection Manager 通过 IP 地址和 service_name 来限制访问。它并非万无一失,但设置比您建议的更简单。我之前为 Oracle 11g写过这篇文章,但新版本的实现确实没有改变。
还可以考虑使用 SSL 的强身份验证,使用带有证书的钱包来识别特定客户端,然后将钱包和客户端证书限制到您想要允许的特定应用程序服务器。这将为您的侦听器添加一个新端口以支持 TCPS 协议连接,但可用于服务器上的任何/所有数据库。正确设置后,任何没有所需证书的客户端都无法登录。