On в отличие от других баз данных, Oracle не позволяет плагинам получать доступ к собственному адресному пространству. В случае MySQL/PostgreSQL плагин .dll (хранимая процедура C) загружается основным процессом базы данных. Oracle позволит слушателю создать новый процесс extproc
(или extproc32
). Этот процесс загружает общую библиотеку, а остальная часть базы данных ведет переговоры с этим процессом через IPC.
Этот подход более безопасен, поскольку внешняя библиотека не может разбивать базу данных и не испортить данные. С другой стороны, иногда C хранимые процедуры могут быть медленнее, чем Java.
Этот параметр может ограничивать путь для .dlls, который будет загружен extproc. т. е. созданных оператором CREATE LIBRARY
.
PS: использование хранимых процедур C ОЧЕНЬ редко, если вы их не используете, вы можете свободно удалить всю строфу extproc из listener.ora.
PS1: возможный сценарий использования функции extproc
.
- Пользователь должен иметь
CREATE LIBRARY
, которые, как правило, не предоставляется
- EXTPROC не настроен для работы с privs ничьи.
- Пользователь создает вредоносную библиотеку .so, которая будет выполнять что-то «зло» во время ее инициализации.
- Пользователь помещает этот LIB в директорию/TMP
- Пользователь создает Oracle БИБЛИОТЕКУ указывая в/TMP с помощью
CREATE LIBRARY
о
- силы пользователя
extproc
к dlopen
эта библиотека
exproc
будет выполнять вредоносный код с priveledges OS oracle:dba
При использовании этого ограничения EXTPROC_DLLS:ONLY
разработчики должны сотрудничать с администраторами баз данных, и могут использоваться только библиотеки с белым списком.
Итак, пожалуйста, исправьте меня: например, моя программа работает на той же машине, что и в БД. Вместо TCP я использую IPC. Поэтому база данных будет обрабатывать новую процедуру для моей программы «extproc», и моя программа подключается к этой процедуре, которая работает как СУБД. – Ace
@ Возможно, он может сделать это, я не могу быть уверенным, что делает ваша программа. ниже ibre объясняется, когда используется extproc – Moudiz