10.5 マルチテナント環境のデータベース・セキュリティ

Oracle Multitenant Isolationは、Oracle Multitenant Architectureで実装されたセキュリティ原則のセットです。オンプレミス・データベースとOracle Cloud Infrastructureの両方で、各テナントのデータとOracle Databaseのすべての側面の全体的なパフォーマンスの整合性をガードするように設計されています。

Oracle Multitenant Isolationは、PDBロックダウン・プロファイル、およびPATH_PREFIXPDB_OS_CREDENTIALなどのPDB初期化オプションによりサポートされます。Oracle JVMでは、Oracle Databaseリリース12c以降でマルチテナント分離がサポートされています。この項では、Oracle JVMで現在サポートされているPDBロックダウン・プロファイル機能およびPDB初期化パラメータについて説明します。

サポートされているPDBロックダウン・プロファイルの機能

機能またはバンドル名 説明
JAVA データベース全体でJavaを無効または有効にします。
OS_ACCESS (バンドル) Javaからのあらゆる種類のOSアクセスを無効または有効にします。
JAVA_RUNTIME java.lang.RuntimePermissionを必要とするJava操作を無効または有効にします。これにより、クラス・ローダーの作成や取得、セキュリティ・マネージャの置換など、リスクのある操作が無効になります。
JAVA_OS_ACCESS JVMのファイル操作、およびjava.io.FilePermissionタイプのJava権限を付与する機能を無効または有効にします。これにより、基本的に、Javaを使用してファイルにアクセスする機能が無効になります。これは、OS_ACCESSバンドル下の機能です。脚注1
NETWORK_ACCESS (バンドル) Javaとの間のすべてのネットワークを無効または有効にします。
JAVA_TCP JavaのTCP操作を無効または有効にします。これは、NETWORK_ACCESSバンドル下の機能です。詳細は、次の項を参照してください。
JAVA_HTTP JavaのHTTP操作を無効または有効にします。これは、NETWORK_ACCESSバンドル下の機能です。詳細は、次の項を参照してください。

脚注1 この機能の名前は過去のものであり、わかりにくい場合があります。この機能は、すべてのJava OS操作ではなく、ファイル・アクセスにのみ関連します。Javaのファイル操作を有効にする方法、および他の種類のOS操作を無効にする方法の詳細は、次の項を参照してください。

サポートされているPDB初期化パラメータおよび句

名前 説明
PATH_PREFIX

(CREATE PLUGGABLE DATABASE文の句)

有効なファイル・アクセス権限付与に関係なく、PATH_PREFIXディレクトリ内のパスへのOSファイル・アクセスを制限します。
PDB_OS_CREDENTIAL

(初期化パラメータ)

Runtime.exec()を介してOSプロセスを分岐する際に、Oracleユーザー・アイデンティティではなく、Oracle JVMでは指定されたOSユーザー・アイデンティティを強制的に使用します。

現在のリリース以降のOracle JVMでは、PDBロックダウン・プロファイルのサポートが拡張され、次の項で説明するように柔軟性が向上しています。

ノート:

次の項で説明する機能拡張は、バックポートによってOracle Databaseリリース19cおよび21cでも使用できます。

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-6 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ネットワーキング・アクセス制限を指定する際の柔軟性が追加されています。

新しいロックダウン・プロファイル機能JAVA_TCP

既存のNETWORK_ACCESSロックダウン・プロファイル機能バンドルは、Oracle JVMランタイムのTCP操作を制御する新しい機能JAVA_TCPを受け入れます。これは、PL/SQL TCP機能を制御する既存のUTL_TCPロックダウン・プロファイル機能に似ています。

新しいロックダウン・プロファイル機能JAVA_HTTP

既存のNETWORK_ACCESSロックダウン・プロファイル機能バンドルは、Oracle JVMランタイムのHTTP操作を制御する新しい機能JAVA_HTTPを受け入れます。これは、PL/SQL HTTP機能を制御する既存のUTL_HTTPロックダウン・プロファイル機能に似ています。

NETWORK_ACCESSロックダウン・プロファイル機能バンドル

既存のNETWORK_ACCESSロックダウン・プロファイル機能バンドルは、Oracle JVMランタイム全体のネットワークを無効にするために今までどおりに使用できます。

データベース管理者に向けた重要なノート

このリリースでは、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からのすべてのネットワーク・アクセスが無効になりました。現在は、ロックダウン・プロファイルで選択的にOracle JVMに対してHTTP接続を有効にして、それ以外のタイプのネットワーキングを無効のままにできるようになりました。
        ALTER LOCKDOWN PROFILE my_profile DISABLE FEATURE ('NETWORK_ACCESS');
        ALTER LOCKDOWN PROFILE my_profile ENABLE FEATURE ('JAVA_HTTP');
  • 以前は、ロックダウン・プロファイルでNETWORK_ACCESS機能を無効にすると、Javaからのすべてのネットワーク・アクセスが無効になりました。現在は、ロックダウン・プロファイルで選択的にOracle JVMに対してTCP接続を有効にして、それ以外のタイプのネットワーキングを無効のままにできるようになりました。
        ALTER LOCKDOWN PROFILE my_profile DISABLE FEATURE ('NETWORK_ACCESS');
        ALTER LOCKDOWN PROFILE my_profile ENABLE FEATURE ('JAVA_TCP');

関連項目: