0

我正在使用Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production并尝试使用 ftp 包 (UTL_TCP)。这里的程序:

declare 
    l_conn UTL_TCP.connection;
    l_list ftp.t_string_table   := ftp.t_string_table(); 
begin
    l_conn := ftp.login('ftp.myhost.com', 21, 'user', 'password');
    ftp.nlst(p_conn => l_conn,p_dir  => 'outbox',p_list => l_list);
    ftp.logout(l_conn);
end;

ftp.nlst引发错误。

我以这种方式配置了 ACL:select * from dba_network_acls;返回

HOST           | LOWER_PORT | UPPER_PORT | ACL                   | ACLID            | ACL_OWNER
-----------------------------------------------------------------------------------------------
ftp.myhost.com |  null      | null       | /myaclspath/myacl.xml | 00000000800027C5 | SYS
*              |  null      | null       | NETWORK_ACL_5A1900... | 0000000080002724 | SYS

select * from dba_network_acl_privileges返回

ACL                   | ACLID            | PRINCIPAL | PRIVILEGE | IS_GRANT | INVERT | START_DATE | END_DATE | ACL_OWNER
------------------------------------------------------------------------------------------------------------------------
/myaclspath/myacl.xml | 00000000800027C5 | MYDBUSER  | resolve   | true     | false  |            |          |SYS
/myaclspath/myacl.xml | 00000000800027C5 | MYDBUSER  | connect   | true     | false  |            |          |SYS

我在这里读到了类似的错误,并检查了 ACL 的设置,我无法弄清楚为什么登录后网络访问被拒绝。

提前感谢任何建议。

4

1 回答 1

0

为了他人的利益回答我自己的问题。

查看此处找到的步骤,我检查了 ftp 包,并意识到每个“命令”在执行之前都会发送一个 PASV。在这种情况下,PASV 会更改使用登录建立的连接。

由于ftp.myhost.com的 ACL 登录成功,但随后的每个 ftp 命令都失败,因为它不是作为ftp.myhost.com发送的,而是作为相对 IP 的111.222.333.444发送的。为 IP 添加 ACL 可解决 ORA-24247 错误。

我的解决方案在这里明确提到,我没有仔细检查正确的文档是我的错,但我想在这里分享这个问题。

于 2018-10-12T15:44:16.807 回答