Ошибка процедуры Oracle 11g с пакетами ftp - PullRequest
2 голосов
/ 26 марта 2012

Я столкнулся с проблемой с моей базой данных (версия Oracle 11g).

Что я хотел сделать?

  • Я хочу использовать процедуры для загрузки файла вFTP-сервер.

Как я это сделал?

  • сначала я загрузил ftp.pks и ftp.pkb файлов, и я использую @ **. pks для импорта этих пакетов.

  • , а затем я кодирую процедуры следующим образом:

    DECLARE
      l_conn  UTL_TCP.connection;
    BEGIN
      l_conn := ftp.login('192.168.1.102', '21', 'tony', 'tony');
      ftp.ascii(p_conn => l_conn);
      ftp.put(p_conn      => l_conn,
              p_from_dir  => 'MY_DOCS',
              p_from_file => 'aaa.txt',
              p_to_file   => 'test_put.txt');
      ftp.logout(l_conn);
    END;
    
  • когда я его запускаю, консоль выдает мне эту информацию об ошибке

    ORA-24247: network access rejected by ACL
    ORA-06512: at "SYS.UTL_TCP", line 17
    ORA-06512: at "SYS.UTL_TCP", line 246
    ORA-06512: at "SCOTT.FTP", line 76
    ORA-06512: at line 4
  • и по этой причине ясоздал правила ACL со следующим кодом:

    begin
    
         DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
         acl          => 'ftp_conn.xml',
         description  => 'ftp connection',
         principal    => 'SCOTT',
         is_grant     => TRUE,
         privilege    => 'connect');
    
         DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
          acl         => 'ftp_conn.xml',
          host        => '192.168.1.102',
          lower_port  => 21,
          upper_port => 21);
    
    end;
    

Но, когда я снова запускаю код ftp, он также показывает эту ошибку, поэтому я хочу знать, как это исправить.

ACL может разрешить TCP-соединение, но когда я использую пакет ftp и вызываю 'ftp.put', вывод консоли будет

error at 1 line:
ORA-29260: network error:not connected
ORA-06512: at "SYS.UTL_TCP", line 212
ORA-06512: at "SYS.UTL_TCP", line 432
ORA-06512: at "SCOTT.FTP", line 413
ORA-24247: Network access rejected by acl
ORA-06512: at "SCOTT.FTP", line 491
ORA-06512: at line 6

1 Ответ

0 голосов
/ 26 марта 2012

Попробуйте добавить привилегию разрешения (хотя это звучит странно ...):

begin
 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
 acl          => 'ftp_conn.xml',
 description  => 'ftp connection',
 principal    => 'SCOTT',
 is_grant     => TRUE,
 privilege    => 'connect');

 DBMS_NETWORK_ACL_ADMIN.add_privilege ( 
acl         => 'ftp_conn.xml', 
principal   => 'SCOTT',
is_grant    => FALSE, 
privilege   => 'resolve', 
position    => NULL, 
start_date  => NULL,
end_date    => NULL);

 DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
  acl         => 'ftp_conn.xml',
  host        => '192.168.1.102',
  lower_port  => 21,
  upper_port => 21);

end;
/
COMMIT;
...