他のデータベースとは対照的に、Oracle はプラグインが独自のメモリ アドレス空間にアクセスすることを許可しません。MySQL/PostgreSQL の場合、.dll プラグイン (C ストアド プロシージャ) がメイン データベース プロセスによってロードされます。
extproc
Oracle では、 (または)を呼び出すことによって、リスナーが新しいプロセスを生成できますextproc32
。このプロセスは共有ライブラリをロードし、残りのデータベースは IPC を介してこのプロセスと通信します。
外部ライブラリがデータベースをクラッシュさせたり、データを破損したりすることがないため、このアプローチはより安全です。一方、C ストアド プロシージャは Java ストアド プロシージャよりも遅い場合があります。
このオプションは、extproc によってロードされる .dll のパスを制限できます。つまり、CREATE LIBRARY
ステートメントによって作成されたものです。
PS: C ストアド プロシージャの使用は非常にまれです。使用しない場合は、listener.ora から extproc スタンザ全体を自由に削除できます。
PS1: この機能を悪用するシナリオが考えられextproc
ます。
- ユーザーには が必要ですが
CREATE LIBRARY
、通常は付与されません
- extproc は、誰の特権でも実行するように構成されていませんが、oracle:dba として実行されます
- ユーザーが悪意のある .so ライブラリを作成し、初期化中に何か「悪」を実行します。
- ユーザーはこのライブラリを /tmp ディレクトリに配置します
CREATE LIBRARY
ユーザーはステートメントを使用して /tmp を指す Oracle LIBRARY を作成します
- このライブラリ
extproc
へのユーザー フォースdlopen
exproc
OS権限で悪意のあるコードを実行しますoracle:dba
このEXTPROC_DLLS:ONLY
制限を使用する場合、開発者は DBA と協力する必要があり、ホワイトリストに登録されたライブラリのみを使用およびロードできます。