RDSADMIN.RDS_FILE_UTIL.LISTDIR работает из блока, а не в процедуре

#oracle #amazon-web-services #amazon-s3

#Oracle #amazon-веб-сервисы #amazon-s3

Вопрос:

Сегодня я следовал приведенным инструкциям для выполнения интеграции Oracle RDS с S3 для импорта файлов из корзины S3 в каталог базы данных.

Я смог хорошо выполнить все шаги и смог увидеть файлы, импортированные из моей корзины S3 в DATA_PUMP_DIR каталоге экземпляра RDS.

Когда я запускаю запрос

 SELECT filename FROM table(rdsadmin.rds_file_util.listdir('DATA_PUMP_DIR')) order by mtime;
  

Я получаю вывод со списком файлов, которые я импортировал.

Теперь я планирую получить эти файлы в блоке PLSQL, и здесь возникает проблема. Когда я запускаю что-то вроде этого:

 DECLARE
BEGIN
  FOR fn in (SELECT * FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime)
  LOOP
    dbms_output.put_line('File name is ' || fn.filename);
  END LOOP;  
END;
  

Я вижу результат в окне вывода СУБД.

Однако, когда я пытаюсь вызвать это внутри процедуры следующим образом:

 CREATE OR REPLACE PROCEDURE test1 IS
BEGIN
  FOR fn in (SELECT * FROM table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by mtime)
  LOOP
    dbms_output.put_line('File name is ' || fn.filename);
  END LOOP;  
END test1;
  

Я получаю сообщение об ошибке:

3/14 PL / SQL: игнорируется инструкция SQL
3/43 PL / SQL: ORA-01031: недостаточные привилегии

Я искал эту ошибку в Интернете и не смог получить никаких результатов.

Я попытался написать процедуру с правами вызывающего

 CREATE OR REPLACE PROCEDURE test1 AUTHID CURRENT_USER IS
  

и это все еще выдавало мне ту же ошибку.

Может кто-нибудь, пожалуйста, пролить свет на это?

Комментарии:

1. Можете ли вы проверить, является ли это проблемой с привилегиями роли, выполнив set role none и посмотрев, не ошибка ли вашего прямого запроса и анонимного блокирования now?

2. Привет, Алекс, я тоже так делал… И это ошибка: ORA-01031: недостаточные привилегии 01031. 00000 — «недостаточные привилегии» * Причина: была предпринята попытка выполнить операцию с базой данных без необходимых привилегий. * Действие: Попросите вашего администратора базы данных или назначенного администратора безопасности предоставить вам необходимые привилегии

3. Верно, что подтверждает проблему с привилегиями, предоставленными через роль; но тогда странно, что authid current_user ее не решили. Интересно. Можете ли вы получить необходимые привилегии, предоставленные непосредственно владельцу процедуры? (Это могут быть привилегии каталога, а не привилегии пакета.)

4. Алекс, есть какой-нибудь запрос, который может перечислить привилегии в каталоге? Я не уверен, правильно ли я понял ваше предложение..

Ответ №1:

Вам понадобятся следующие разрешения владельцу процедуры. Вероятно, из вашего администратора базы данных.

Предоставьте выполнение для rdsadmin.RDSADMIN_S3_TASKS <procedure_Owner>;