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.securityjava.lang.reflectおよびoracle.aurora.rdbms.securityパッケージのロードが無条件に制限されます

DBJAVASCRIPTロールは、データベース内のJavaScriptの使用状況を管理するためにDBAが使用します。このロールのみにoracle.DbmsJavaScriptUser権限が付与されます。