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
ユーザーである必要があります。
関連トピック