B DBMS_JAVASCRIPTパッケージ
DBMS_JAVASCRIPT
パッケージには、その引数で指定した場所からDBMS常駐JavaScriptコードを実行するためのPL/SQLプロシージャが用意されています。
この章のトピックは、次のとおりです:
B.1 DBMS_JAVASCRIPTの概要
DBMS_JAVASCRIPT
パッケージはAUTHID CURRENT_USER
パッケージであり、JavaScriptコードを実行するための単一のプロシージャRUN
が用意されています。RDBMSユーザーは、それぞれのスキーマに格納されているJavaリソース・オブジェクトとしてRDBMS内のJavaScriptコードを管理します。
次の2つのどちらかの方法で、自分のスキーマ内にスクリプトを作成できます。
-
loadjava
ツールを使用するか、dbms_java.loadjava
プロシージャをコール -
CREATE [OR REPLACE] JAVA RESOURCE
コマンドを使用
B.1.1 RUNプロシージャ
このプロシージャは、script_name
引数で指定された名前のJavaリソースを検索するJavaコードを起動します。次に、そのコンテンツを発行して、Nashorn JavaScriptコンパイラとランタイム・エンジンによる構文分析とセマンティック分析、コンパイルおよび評価を実行します。
実行する前に、NashornコードはJavaバイトコードにコンパイルされます。
構文
procedure run(script_name varchar2);
次の方法でこのプロシージャをコールできます。
call dbms_javascript.run('my_script.js');
注意:
-
このプロシージャを実行するには、
DBJAVASCRIPT
ロールが付与されている必要があります。 -
DBMS_JAVASCRIPT.RUN
プロシージャは、JavaScriptのテキストを実行せず、ファイル・システムのスクリプトを検索しません。このプロシージャに対する唯一の有効な入力はJavaリソース名です。
B.2 DBMS_JAVASCRIPTのセキュリティ・モデル
JavaScriptコードを実行できるように、RDBMSユーザーにDBJAVASCRIPTロールを付与する必要があります。
DBMS_JAVASCRIPT.RUN
プロシージャの引数は、ユーザー自身のスキーマに以前にロードされた有効なJavaリソースを指定する文字列である必要があります。このプロシージャは、次のような引数を拒否します。
-
オープン・コードのスクリプト
-
ファイル・パス
-
URL
これらの制限は、JavaScriptインジェクション攻撃に悪用される可能性があるフラグメントからスクリプトを作成するPL/SQLコードをユーザーが作成できないようにする点で重要です。DBMS_JAVASCRIPT.RUN
プロシージャにより起動されるNashornエンジンのスクリプト・モードの拡張機能は無条件で無効になっており、SYS
ユーザーを含むすべてのユーザーが実行できません。エンジンのインスタンス化および使用はoracle.DbmsJavaScriptUser
権限が付与されていれば可能です。また、すべてのNashorn関連のAPIはOracle JVMの制限されたパッケージ領域内にあり、スクリプトがJavaクラスをロードしようとすると、クラス・フィルタリングが無条件に適用されます。クラス・フィルタリングには次の効果があります。
-
SecurityManager
が管理するJavaパッケージ・アクセス・チェックをパスしないすべてのクラスが拒否されます -
ユーザーによる
java.security
、java.lang.reflect
およびoracle.aurora.rdbms.security
パッケージのロードが無条件に制限されます
DBJAVASCRIPT
ロールは、データベース内のJavaScriptの使用状況を管理するためにDBAが使用します。このロールのみにoracle.DbmsJavaScriptUser
権限が付与されます。