Oracle для профессионалов




Генерация списка файлов каталога - часть 2


Сервер Oracle защищается от этого следующим образом: для выполнения небезопасных действий необходимо явно получить соответствующую привилегию. Попытавшись использовать эту процедуру до получения необходимых привилегий, мы получим следующее сообщение об ошибке:

tkyte@TKYTE816> exec get_dir_list('c:\temp'); BEGIN get_dir_list('c:\temp'); END;

* ERROR at line 1: ORA-29532: Java call terminated by uncaught Java exception: java.security.AccessControlException: the Permission (java.io.FilePermission c:\temp read) has not been granted by dbms_java.grant_permission to SchemaProtectionDomain(TKYTE|PolicyTableProxy(TKYTE)) ORA-06512: at "TKYTE.GET_DIR_LIST", line 0 ORA-06512: at line 1

Поэтому предоставим себе право получать список файлов в соответствующем каталоге:

tkyte@TKYTE816> begin 2 dbms_java.grant_permission 3 (USER, 4 'java.io.FilePermission', 5 'c:\temp', 6 'read'); 7 end; 8 /

PL/SQL procedure successfully completed.

И можно выполнять процедуру:

tkyte@TKYTE816> exec get_dir_list('c:\temp');

PL/SQL procedure successfully completed.

tkyte@TKYTE816> select * from dir_list where rownum < 5;

FILENAME ---------------------------------- a.sql abc.dat activation activation8i.zip

Соответствующие права доступа определяются спецификацией Java2 Standard Edition (J2SE) и подробно описаны на странице http://java.sun.com/j2se/1.3/docs/api/java/security/Permission.html. В приложении А мы подробно рассмотрим пакет DBMS_JAVA и его использование.

Есть еще один нюанс, который необходимо учитывать. Oracle 8.1.6 —

первая версия СУБД Oracle, поддерживающая систему прав доступа, задаваемую спецификацией J2SE. В Oracle 8.1.5 для этого приходилось использовать роли. К сожалению, роль была ровно одна: JAVASYSPRIV. Ее использование будет подобно предоставлению роли администратора базы данных каждому пользователю только потому, что ему необходимо создать представление, — это слишком мощная роль для выполнения такого простого действия. При наличии роли JAVASYSPRIV можно делать все, что угодно. Будьте осторожны при использовании этой роли в версии 8.1.5 и постарайтесь перейти на следующие версии, где принята более избирательная модель привилегий.




Содержание  Назад  Вперед