|
Программирование >> Oracle
1284 Глава 18 Как реализована поддержка внешних процедур? Внешние процедуры выполняются процессом, физически отделенным от процессов сервера. Это сделано из соображений защиты. Хотя технически можно динамически загружать DLL-библиотеку (в Windows) или файл .so (Shared Object code - разделяемый объектный код, скажем, в Solaris) во время выполнения и в существующих процессах сервера, при этом сервер будет подвергаться неоправданному риску. Код библиотеки будет иметь доступ к тому же пространству памяти, что и процессы сервера, в том числе и к системной глобальной области Oracle (SGA). В результате этот посторонний код может случайно повредить базовые структуры данных СУБД, что приведет к потере данных или сбою экземпляра. Чтобы избежать этого, внешние процедуры в1полняются отдельными процессами, не использующими разделяемые области памяти сервера. В большинстве случаев отдельный процесс будет работать от имени пользователя, не являющегося владельцем программного обеспечения Oracle. Причина та же, что и в чае выполнения внешних процедур отдельным процессом - безопасность. Пусть, например, мы собираемся создать внешнюю процедуру, которая сможет записывать файлы на диск (как это делает процедура, рассматриваемая далее). Предположим, сервер работает в среде UNIX, и внешняя процедура выполняется от имени владельца программного обеспечения Oracle. Пользователь вызывает новую функцию и просит ее записать объект BLOB в файл /d0l/oracle/data/system.dbf. Поскольку этот код выполняется от имени пользователя - владельца программного обеспечения Oracle, этот вызов сработает и непреднамеренно запишет содержимое какого-то большого двоичного объекта вместо системного табличного пространства. Мы можем этого даже и не заметить до момента остановки и перезапуска сервера (много дней спустя). Если бы внешняя процедура выполнялась от имени менее привилегированного пользователя, это не могло бы случиться (этот пользователь не имел бы права на запись файла system.dbf) Поэтому в разделе, посвященном конфигурированию сервера для поддержки внешних процедур, мы рассмотрим, как настроить безопасный процесс прослушивания EXTPROC (EXTemal PROCedure), работающий от имени другой учетной записи ОС. Причины такой настройки примерно те же, что и в случае запуска Web-серверов от имени пользователя nobody в UNIX или от имени учетной записи с минимальными привилегиями в Windows. Итак, при вызове внешней процедуры сервер Oracle будет автоматически создавать процесс ОС под названием EXTPROC. Для этого он связывается с процессом прослушивания Net8 (Net8 listener). Процесс прослушивания Net8 будет автоматически создавать процесс EXTPROC точно так же, как он порождает выделенные или разделяемые серверы. В среде Windows NT это можно увидеть с помощью утилиты tlist из набора NT Resource Toolkit, выдающей дерево процессов и подпроцессов. Например, я запустил сеанс, из которого обратился к внешней процедуре, а затем выполнил команду tlist -t и получил следующее: C:\bin>tlist-t System Process (0) System (8) smss.exe (140) csrss.exe (164) Внешние процедуры на языке С 1285 inlogon.exe (160) serices.exe (212) svchost.exe (384) SPOOLS.E (412) svchost.exe (444) regsvc.exe (512) stisvc.exe (600) ORACLE.E (1024) ORADIMI.E (1264) TNSLSNR.EXE (1188) EXTPROC.EXE (972) Isas.e (224) Это показывает, что процесс TNSLSNR.EXE является родительским для процесса EXTPROC.EXE. Процесс EXTPROC и процесс сервера теперь могут взаимодействовать. Что еще важнее, процесс EXTPROC может динамически загружать пользовательские DLL-библиотеки (или файлы .so/.sl/.a в ОС UNIX). Архитектурно это выглядит следующим образом: Происходит следующее. 1. Пользовать подключается к СУБД. При этом либо запускается процесс выделенного сервера, либо используется один из разделяемых серверных процессов. 2. Пользователь вызывает внешнюю процедуру. Поскольку это первый вызов, серверный процесс связывается с процессом TNSLISTENER (процессом прослушивания Net8). 3. Процесс прослушивания Net8 запускает (или находит в пуле запущенных свободный) процесс выполнения внешних процедур для сеанса. Этот процесс загружает запрошенную DLL-библиотеку (или файл .so/.sl/.a в ОС UNIX). 4. Теперь можно взаимодействовать с процессом выполнения внешних процедур, который будет обеспечивать обмен данными между языками SQL и С. Конфигурирование сервера Сейчас я опишу настройку реквизитов, которую необходимо провести, чтобы обеспечить выполнение внешних процедур. Для этого придется настраивать файлы 1286 Глава 18 LISTENER.ORA и TNSNAMES.ORA на сервере, а не на клиентской машине. По полной установки эти файлы должны быть автоматически сконфигурированы для поддержки служб внешних процедур (EXTPROC). В этом случае конфигурационный фа LISTENER.ORA будет иметь примерно такой вид: # LISTENER.ORA. Network Configuration File: # C:\oracle\network\admin\LISTENER.ORA # Generated by Oracle configuration tools. LISTENER = (DESCRIPTION LIST = (DESCRIPTION = (ADDRESS LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = tkyte-del)(TORT = 1521)) (ADDRESS LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) SID LIST LISTENER = (SID LIST = (SID DESC - (SID NAME = PLSExtProc) (ORACLE HOME = C:\oracle) (PROGRAM = extproc) (SID DESC = (GLOBAL DBNAME = tkyte816) (ORACLE HOME = C:\oracle) (SID NAME = tkyte816) Следующие установки в файле процесса прослушивания существенны для использования внешних процедур. # (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)). Задает IPC-адрес. Запомните значение KEY. Это значение может быть произвольным, просто запомните его. В некоторых системах регистр символов в значении KEY существенен, что тоже необходимо учитывать. # (SID DESC = (SID NAME = PLSExtProc,). Запомните значение SID NAME, PLSExtProc или что-то подобное. По умолчанию это значение SID будет равно PLSExtProc. Файл LISTENER.ORA можно сконфигурировать и вручную с помощью простого текстового редактора или с помощью программы Net8 Assistant. Настоятельно рекомендуется использовать программу Net8 Assistant, поскольку минимальная ошибка в конфигурационном файле, например незакрытая круглая скобка, сделает его бесполезным. При использовании Net8 Assistant следуйте процедуре, описанной в системе оператив-
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |