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アクセス制限について説明する完全な例

  1. ルートSYSユーザーとして接続しているときに、CDBルートがcdb1_pdb0cdb1_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/'
  2. ロックダウン・プロファイルを作成して、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');
  3. JAVA_PROFILEをPDBのpdb5に関連付けます。
        alter session set container = cdb1_pdb5;
        alter system set pdb_lockdown = java_profile ;
  4. データベースをシステムの変更後に再起動します。
        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
  5. ユーザーADMINに、ファイル・アクセス操作の権限を付与します。
    call dbms_java.grant_permission('ADMIN', 'SYS:java.io.FilePermission',  
    '/d1/pdbs/pdb5/-', 'read,write,delete');
  6. cdb1_pdb5の一般ユーザーを作成します。
        create user juser identified by juser;
        grant create session to juser;
  7. 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');

関連項目: