11.4 Oracle DatabaseでのRuntime.exec機能のセキュアな使用

この項はDBAおよびセキュリティ管理者を対象としており、Oracle Databaseで実行されているJavaアプリケーションでJava SE機能のRuntime.execをセキュアに使用するためのガイドラインを示します。java.lang.Runtime.execメソッドはJava SEライブラリにあり、リリース9以降のJava仮想マシン(Java VM)でサポートされており、新しいオペレーティング・システム(OS)プロセスにまたがって、指定されたコマンドおよび引数を新しいプロセスで実行します。SecurityManagerが存在する場合(Java VMがデータベースで実行されている場合は常に存在します)、新しいOSプロセスが開始される前に、関連するパス名に対するファイル実行許可のセキュリティ・チェックが実行されます。DBAまたはセキュリティ管理者は、適切なファイル読取り許可、書込み許可および実行許可を、サーバー側のOSコマンドの実行を認可されているデータベース・ユーザーに選択的に付与する役割を持ちます。さらに、次の各項で説明するように、dbms_java.set_runtime_exec_credentialsプロシージャを使用して、生成されたコマンドのOSユーザー・アイデンティティを制御することを強くお薦めします。

設計上、Runtime.execおよびjava.lang.ProcessBuilderクラスとjava.lang.Processクラスの関連機能は、新しく作成されたプロセスと関連付けられたユーザーのアイデンティティを制御しません。Java VMのデフォルト動作を含むほとんどのJava実装では、分岐プロセスは親プロセスのアイデンティティ(Oracle DatabaseのOracle OSユーザー)を使用して実行されます。セキュリティ上の理由で、Runtime.exec機能により分岐されたプロセスは、弱い権限を付与されたOSアイデンティティを使用して実行することをお薦めします。dbms_java.set_runtime_exec_credentialsプロシージャは、指定されたデータベース・ユーザー/スキーマを特定のOSアカウントにバインドするメカニズムを提供します。DBAは、できるかぎり小さい権限を持つOSアカウントにRuntime.execコールを発行して、データベース・ユーザーをバインドする必要があります。次のコールは、データベース・ユーザー/スキーマDBUSERをOSのosuserアカウントに関連付けます。

dbms_java.set_runtime_exec_credentials('DBUSER', 'osuser', 'ospass');

この結果、DBUSERにより発行されたRuntime.execコマンドを実行するために生成されるOSプロセスは、osuserのアイデンティティを使用して実行されます。set_runtime_exec_credentialsプロシージャを使用するには、SYSユーザーである必要があります。

関連トピック