10 Oracle Database Javaアプリケーションのセキュリティ
セキュリティの範囲は広く、接続に関するネットワーク・セキュリティ、オペレーティング・システム・リソースまたはJava仮想マシン(JVM)定義クラスやユーザー定義クラスのアクセス制御および実行制御などがあります。また、外部ソースからインポートされたJavaアーカイブ(JAR)ファイルのバイトコードの検証も含まれます。この章では、Oracle Database内でJavaアプリケーションに使用できる様々なセキュリティ・サポートについて説明します。
10.1 マルチテナント環境のデータベース・セキュリティ
Oracle Multitenant Isolationは、Oracle Multitenant Architectureで実装されたセキュリティ原則のセットです。オンプレミス・データベースとOracle Cloud Infrastructureの両方で、各テナントのデータとOracle Databaseのすべての側面の全体的なパフォーマンスの整合性をガードするように設計されています。
PDB分離は、Oracle Multitenant Isolation機能の一部であり、それぞれのPDBが実行できる内容を定義します。このリリースでは、次の方法でOracle JVMによるPDB分離のサポートを強化します。
PATH_PREFIX句のサポート
PATH_PREFIX
句が有効な場合、Oracle JVMはすべてのファイル・アクセスAPIのファイル・パスのチェックを実行して、PATH_PREFIX
以外のファイル・アクセスをブロックします。
PDB_OS_CREDENTIAL初期化パラメータのサポート
PDB_OS_CREDENTIAL
初期化パラメータが有効なときに、そうしたPDBのユーザーにかわってOracle JVMがruntime.exec
プロセスをフォークする場合、そのようなフォーク・プロセスには対応するOS資格証明が関連付けられます。
Oracle JVM OSアクセス制限の柔軟な指定
PDB分離機能の機能拡張により、PDBロックダウン・プロファイルでOracle JVMオペレーティング・システム(OS)アクセス制限を指定する際の柔軟性が追加されています。
JAVA_OS_ACCESSロックダウン・プロファイル機能の新しいロール
既存のJAVA_OS_ACCESS
ロックダウン・プロファイル(Java権限のjava.io.FilePermission
を制御する)機能には、新しい密接に関連するロールが割り当てられています。Oracle JVMランタイムのファイル・アクセス・チェックは、それによって制御するようになりました。この新しいロールは、ファイル・アクセス権を制御する既存のロールと適切に調和します。
OS_ACCESSロックダウン機能バンドル
既存のOS_ACCESS
ロックダウン・プロファイル機能バンドルは、その構成機能のJAVA_OS_ACCESS
がOracle JVMのファイル・アクセス・チェックを有効にするように構成されていないかぎり、Oracle JVMランタイムのファイル・アクセスのアクセスを無効にするために今までどおりに使用できます。
拡張されたOracle JVM OSアクセス制限の例
この項では、拡張されたOracle JVM OSアクセス制限の利用方法について説明します。
以前は、JavaからのすべてのOSアクセスを無効するために、次のコマンドを使用していました。
ALTER LOCKDOWN PROFILE my_profile1 DISABLE FEATURE ('OS_ACCESS');
現在は、ファイル・アクセスを除くJavaからのすべてのOSアクセスを無効にするために、次のコマンドを使用できます。
ALTER LOCKDOWN PROFILE my_profile2 DISABLE FEATURE ('OS_ACCESS');
ALTER LOCKDOWN PROFILE my_profile2 ENABLE FEATURE ('JAVA_OS_ACCESS');
完全な例
次の操作について説明する完全な例を示します。
PATH_REFIX
句の値を設定した新しいPDBの作成- Javaファイル操作を除いて、すべてのタイプのOSアクセスを無効にする新しいロックダウン・プロファイルの作成
- PDBへの新しいロックダウン・プロファイルのリンク
PATH_PREFIX
内のファイルの読取りと書込みができる新しいPDBのユーザーの管理
例10-1 Oracle JVMの拡張されたOSアクセス制限について説明する完全な例
- ルート
SYS
ユーザーとして接続しているときに、CDBルートがcdb1_pdb0
のcdb1_pdb5
という名前のPDBを作成します。create pluggable database cdb1_pdb5 admin user admin identified by manager file_name_convert = ('cdb1_pdb0','cdb1_pdb5') path_prefix='/d1/pdbs/pdb5/'
- ロックダウン・プロファイルを作成して、
OS_ACCESS
機能とNETWORK_ACCESS
機能は無効になるように設定し、JAVA_OS_ACCESS
機能は有効になるように設定します。create lockdown profile java_profile; alter lockdown profile java_profile disable feature=('OS_ACCESS'); alter lockdown profile java_profile disable feature=('NETWORK_ACCESS'); alter lockdown profile java_profile enable feature=('JAVA_OS_ACCESS');
JAVA_PROFILE
をPDBのpdb5
に関連付けます。alter session set container = cdb1_pdb5; alter system set pdb_lockdown = java_profile ;
- データベースをシステムの変更後に再起動します。
alter session set container = cdb1_pdb0; -- this is the root shutdown abort startup pfile = t_initvm1.ora alter pluggable database all open; alter session set container = cdb1_pdb5; grant create session, create procedure, create public synonym to admin; grant create table to admin; -- add other grants to the local PDB admin as required
- ユーザー
ADMIN
に、ファイル・アクセス操作の権限を付与します。call dbms_java.grant_permission('ADMIN', 'SYS:java.io.FilePermission', '/d1/pdbs/pdb5/-', 'read,write,delete');
cdb1_pdb5
の一般ユーザーを作成します。create user juser identified by juser; grant create session to juser;
juser
に、ファイル・アクセス操作の権限を付与します。call dbms_java.grant_permission('JUSER', 'SYS:java.io.FilePermission', '/d1/pdbs/pdb5/file1.txt', 'read'); call dbms_java.grant_permission('JUSER', 'SYS:java.io.FilePermission', '/d1/pdbs/pdb5/file2.txt', 'read,write');
Oracle JVMネットワーキング・アクセス制限の追加の柔軟性
PDB分離機能の機能拡張により、PDBロックダウン・プロファイルでOracle JVMネットワーキング・アクセス制限を指定する際の柔軟性が追加されています。
UTL_TCPロックダウン・プロファイル機能の新しいロール
既存のUTL_TCP
ロックダウン・プロファイル(PL/SQL TCP機能を制御する)機能には、新しい密接に関連するロールが割り当てられています。Oracle JVMランタイムのTCP操作は、それによって制御するようになりました。この新しいロールは、PL/SQL TCP接続を制御する既存のロールと適切に調和します。
UTL_HTTPロックダウン・プロファイル機能の新しいロール
既存のUTL_HTTP
ロックダウン・プロファイル(PL/SQL HTTP機能を制御する)機能には、新しい密接に関連するロールが割り当てられています。Oracle JVMランタイムのHTTP接続は、それによって制御するようになりました。この新しいロールは、PL/SQL HTTP接続を制御する既存のロールと適切に調和します。
NETWORK_ACCESSロックダウン・プロファイル機能バンドル
既存のNETWORK_ACCESS
ロックダウン・プロファイル機能バンドルは、Oracle JVMランタイム全体のネットワークを無効にするために今までどおりに使用できます。
拡張されたOracle JVMネットワーキング・アクセス制限の例
以前は、Javaを使用して提供されるアクセスを含めて、すべてのネットワーキング・アクセスを無効にするために、次のコマンドを使用していました。
ALTER LOCKDOWN PROFILE my_profile1 DISABLE FEATURE ('NETWORK_ACCESS');
次の各例では、拡張されたOracle JVMネットワーキング・アクセス制限の利用方法を示します。
例1
次の項目を除くすべてのタイプのネットワーキングを無効にするには、次のコマンドを使用します。
UTL_HTTP
PL/SQLパッケージを使用して実行されるネットワーキング- JDKクラスの
HttpURLConnection
およびHttpsURLConnection
を使用したOracle JVM HTTP操作
ALTER LOCKDOWN PROFILE my_profile2 DISABLE FEATURE ('NETWORK_ACCESS');
ALTER LOCKDOWN PROFILE my_profile2 ENABLE FEATURE ('UTL_HTTP');
例2
次の項目を除くすべてのタイプのネットワーキングを無効にするには、次のコマンドを使用します。
UTL_TCP
PL/SQLパッケージを使用して実行されるネットワーキング- HTTPを含むOracle JVM TCP操作
ALTER LOCKDOWN PROFILE my_profile3 DISABLE FEATURE ('NETWORK_ACCESS');
ALTER LOCKDOWN PROFILE my_profile3 ENABLE FEATURE ('UTL_TCP');
データベース管理者に向けた重要な注意点
このリリースでは、CDBデータベース管理者が、Oracle JVMからのファイル・アクセスを許可するPDBに対して、安全なロックダウンを詳細に構成できるようになっています。セキュリティと分離については、PDBに対してどのようなタイプのファイル・アクセスも許可する場合、常にPATH_PREFIX
句を使用します。
この項では、CDB管理者のPDB分離機能に実施された重要な機能拡張の概要を示します。
- 以前は、ロックダウン・プロファイルで
OS_ACCESS
機能を無効にすると、JavaからのすべてのOSアクセスが、ファイル操作を含めて無効化されていました。現在は、ロックダウン・プロファイルでJavaのファイル操作のみを有効して、それ以外のタイプのJavaからのOSアクセスを無効にできるようになりました。ALTER LOCKDOWN PROFILE my_profile DISABLE FEATURE ('OS_ACCESS'); ALTER LOCKDOWN PROFILE my_profile ENABLE FEATURE ('JAVA_OS_ACCESS');
- 以前は、ロックダウン・プロファイルで
NETWORK_ACCESS
機能を無効にすると、Javaからのすべてのネットワーク・アクセスが無効になりました。現在は、ロックダウン・プロファイルで選択的にHTTP接続(PL/SQLおよびOracle JVM)を有効にして、それ以外のタイプのネットワーキングを無効のままにできるようになりました。ALTER LOCKDOWN PROFILE my_profile DISABLE FEATURE ('NETWORK_ACCESS'); ALTER LOCKDOWN PROFILE my_profile ENABLE FEATURE ('UTL_HTTP');
- 以前は、ロックダウン・プロファイルで
NETWORK_ACCESS
機能を無効にすると、Javaからのすべてのネットワーク・アクセスが無効になりました。現在は、ロックダウン・プロファイルで選択的にTCP接続(PL/SQLおよびOracle JVM)を有効にして、それ以外のタイプのネットワーキングを無効のままにできるようになりました。ALTER LOCKDOWN PROFILE my_profile DISABLE FEATURE ('NETWORK_ACCESS'); ALTER LOCKDOWN PROFILE my_profile ENABLE FEATURE ('UTL_TCP');
関連項目:
- Oracle Multitenant Isolationホワイト・ペーパー
- 「ALTER LOCKDOWN PROFILE」: PDBロックダウン・プロファイル機能の説明
- 「CREATE PLUGGABLE DATABASE」:
PATH_PREFIX
句の詳細 - 「PDB_OS_CREDENTIAL」:
PDB_OS_CREDENTIAL
初期化パラメータの詳細