Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции СУБД.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.32 Mб
Скачать

24.6.3 Файловый ввод/вывод (модуль utl_file)

Выше было рассказано о том, что в PL/SQL не предусмотрены встроенные средства для ввода и вывода информации, однако эти функции реализуют через вспомогательные программные модули. Ввод/вывод данных на экран осуществляется с помощью модуля DBMS_OUTPUT. PL/SQL 2.3 расширяет эту функциональную возможность, обеспечивая ввод/вывод текстовых файлов посредством модуля UTL_FILE. С помощью UTL_FILE невозможно осуществлять вывод информации непосредственно в двоичные файлы.

В ORACLE можно считывать файлы двоичного формата при помощи объектов BFILE, которые представляют собой особую форму внешних объектов LOB. В данном параграфе рассказывается о том, как функционирует модуль UTL_FILE.

Безопасность

В клиентском PL/SQL имеется модуль, подобный UTL_FILE, так называемый ТЕХТ_IO. Однако в отношении безопасности информации эти модули различны. Файлы, создаваемые с помощью клиентского модуля ТЕХТ IO, можно размещать в любом месте на станции клиента при наличии необходимых привилегий для работы с операционной системой. При выполнении клиентских операций файлового ввода/вывода каких-либо привилегий для работы с PL/SQL и собственно базой данных не требуется.

Безопасность базы данных

На сервере необходимо поддерживать безопасность информации на более высоком уровне. Для этого выделяются специальные каталоги, в которые модуль UTL_FILE может записывать данные. Такие каталоги называются доступными (accessible directories). Они определяются параметром UTL_FILE_DIR инициализационного файла базы данных. Каждый доступный каталог указывается в этом файле отдельной строкой:

UTL FILE DIR = имя_каталога

Вид спецификации имя каталога зависит от применяемой операционной системы.

Для того чтобы обратиться к файлу с помощью модуля UTL_FILE, нужно передать функции FOPEN имя каталога и имя файла в виде отдельных параметров. Имя каталога сопоставляется со списком доступных каталогов, и если оно там найдено, операция разрешается (при соблюдении ограничений безопасности операционной системы). Если в FOPEN указано имя недоступного каталога, выдается сообщение об ошибке. Подкаталоги доступных каталогов можно использовать только тогда, когда они также указаны как доступные явным образом.

Безопасность операционной системы

Операции файлового ввода/вывода выполняются модулем UTL_FILE в режиме пользователя ORACLE (пользователь ORACLE – это владелец файлов, обеспечивающих функционирование базы данных, и процессов, составляющих экземпляр базы данных). Следовательно, пользователь ORACLE должен иметь привилегии операционной системы на чтение из всех доступных каталогов и на запись в них. Если пользователю ORACLE не предоставлены соответствующие привилегии на доступные каталоги, то выполнение всех операций над ними запрещается операционной системой.

Все файлы, создаваемые в результате работы модуля UTL_FILE, будут принадлежать пользователю ORACLE. Кроме того, файлы будут создаваться с привилегиями, установленными операционной системой для пользователя ORACLE по умолчанию. Если с этими файлами должны работать другие пользователи, обращаясь к ним не из модуля UTL_FILE, системный администратор обязан изменить полномочия на эти файлы.