8 アプリケーション・スキーマのデータ・ポンプ・エクスポートの実行

Oracle Database Vaultのレルムまたはコマンド・ルールによって保護されているデータをエクスポートする場合は、ユーザーにタスクの実行を認可する必要があります。Database Vaultは必須アクセス制御ポリシーを適用しているため、Oracle Data Pumpエクスポートを実行するシステム権限のみでは不十分です。

ユーザーがOracle Data Pumpのフル・データベース・エクスポート、別のスキーマへのインポートまたはトランスポータブル表領域操作を実行する場合は、追加の認可および構成が必要です。これらのシナリオの詳細は、『Oracle Database Vault管理者ガイド』Oracle Database Vault環境でのDBA操作を参照してください。

このクイック・スタート・ガイドでは、次の2つのタイプのOracle Data Pumpのエクスポートに焦点を当てます:

  1. フルスキーマ・エクスポート
  2. 表のみのエクスポート

スキーマまたは表をスキーマ所有者としてエクスポートしない場合は、エクスポートを実行するための適切なOracle Databaseシステム・ロールが必要です。この2つのエクスポート操作を実行する専用データベース・ユーザーを作成します。

  1. C##JSMITHとして、DP_MGRという名前のPDBデータベース・ユーザーを作成します:
    1. C##JSMITHとしてプラガブル・データベースに接続します:
      connect c##jsmith@pdb_name
    2. DP_MGRという名前のユーザーを作成します:
      CREATE USER DP_MGR IDENTIFIED BY password;
      GRANT CONNECT, EXP_FULL_DATABASE TO DP_MGR;
      GRANT UNLIMITED TABLESPACE TO DP_MGR;
  2. DP_MGRとしてOracle Data Pumpエクスポートの実行を試みます:
    expdp dp_mgr@pdb_name SCHEMAS=HR directory=DATA_PUMP_DIR REUSE_DUMPFILES=y dumpfile=test1.dmp logfile=test1.log

    エクスポートしようとしている表データ・オブジェクトごとに、次のエラーが発生します。これは、オブジェクトがDatabase VaultレルムProtect HR tablesによって保護されているためです。

    ORA-31693: Table data object "HR"."COUNTRIES" failed to load/unload and is being skipped due to error:
    ORA-47415: Insufficient Oracle Database Vault authorization for DATAPUMP.
  3. データ・ポンプ・エクスポートまたはインポートを実行するシステム権限を持つデータベース・ユーザーを特定します:
    1. C##JSMITHとしてプラガブル・データベースに接続します:
      connect c##jsmith@pdb_name
    2. 次のコマンドを実行します。
      SELECT GRANTEE, GRANTED_ROLE 
          FROM DBA_ROLE_PRIVS
      WHERE GRANTED_ROLE IN ('EXP_FULL_DATABASE','DATAPUMP_EXP_FULL_DATABASE')
      ORDER BY 1,2;
  4. DP_MGRがデータベース権限に基づいて単一の表のみをエクスポートすることを認可します。

    プラガブル・データベースでOracle Database Vaultが有効になっている場合は、ユーザーに権限の使用を認可する必要があります。システム権限は、データ・ポンプ・エクスポートを実行するのに十分ではありません。

    EXEC DBMS_MACADM.AUTHORIZE_DATAPUMP_USER('DP_MGR', 'HR', 'EMPLOYEES');
  5. Oracle Database Vaultのデータ・ポンプの認可を確認します:
    SELECT * FROM DBA_DV_DATAPUMP_AUTH; 

    DP_MGRによるTABLEエクスポートのみを認可する必要があります。

    GRANTEE    SCHEMA    OBJECT       TYPE    ACTION
    __________ _________ ____________ ________ _________
    DP_MGR     HR        EMPLOYEES    TABLE    %
  6. データ・ポンプ・エクスポート・コマンドを実行します:
    expdp dp_mgr@pdb_name SCHEMAS=HR directory=DATA_PUMP_DIR REUSE_DUMPFILES=y dumpfile=test1.dmp logfile=test1.log
    HR.EMPLOYEES表がエクスポートされていることがわかりますが、他のすべてのスキーマ表およびビューに対してORA-31693エラーが発生します。
    ORA-31693: Table data object "HR"."COUNTRIES" failed to load/unload and is being skipped due to error:
    ORA-47415: Insufficient Oracle Database Vault authorization for DATAPUMP.
    . . exported "HR"."EMPLOYEES" 17.32 KB 107 rows
  7. Database Vault違反なしでデータ・ポンプ・エクスポートを実行するには、エクスポート用にHR.EMPLOYEES表を指定する必要があります:
    expdp dp_mgr@pdb_name TABLES=HR.EMPLOYEES directory=DATA_PUMP_DIR REUSE_DUMPFILES=y dumpfile=test1.dmp logfile=test1.log
  8. データベース権限に基づいてスキーマをエクスポートすることをDP_MGRに認可するには、表固有の認可を取り消し、スキーマ・エクスポートを認可します:
    EXEC DBMS_MACADM.UNAUTHORIZE_DATAPUMP_USER('DP_MGR', 'HR', 'EMPLOYEES');
    EXEC DBMS_MACADM.AUTHORIZE_DATAPUMP_USER('DP_MGR', 'HR');
  9. Oracle Database Vaultのデータ・ポンプの認可を確認します。DP_MGRによるHRスキーマ・エクスポートのみを認可する必要があります:
    SELECT * FROM DBA_DV_DATAPUMP_AUTH; 
    GRANTEE    SCHEMA    OBJECT       TYPE    ACTION
    __________ _________ ____________ ________ _________
    DP_MGR     HR        %            %        %
  10. データベース権限に基づいてスキーマをエクスポートすることをDP_MGRに認可し、次のコマンドを実行します:
    EXEC DBMS_MACADM.UNAUTHORIZE_DATAPUMP_USER('DP_MGR', 'HR');
    EXEC DBMS_MACADM.AUTHORIZE_DATAPUMP_USER('DP_MGR');

    ノート:

    これには、完全なOracle Data Pumpエクスポートの実行が含まれていません。完全なエクスポートを実行するには、DP_MGRDV_OWNERロールが必要です。完全なデータ・ポンプ・エクスポートよりも具体的にすることをお薦めします。データベース全体ではなく、要件に基づいて特定のスキーマまたはオブジェクトをエクスポートします。
  11. DP_MGRのOracle Database Vaultデータ・ポンプの認可を確認します:
    SELECT * FROM DBA_DV_DATAPUMP_AUTH; 
    GRANTEE    SCHEMA    OBJECT       TYPE    ACTION
    __________ _________ ____________ ________ _________
    DP_MGR     %        %            %        %
    これで、DP_MGRユーザーは、次の例のようにデータ・ポンプ・エクスポートを実行できます:
    expdp dp_mgr@pdb_name SCHEMAS=HR,SCOTT,SH directory=DATA_PUMP_DIR REUSE_DUMPFILES=y dumpfile=test1.dmp logfile=test1.log
  12. DP_MGRがデータベース権限を使用する認可を取り消すには、次のコマンドを実行します:
    exec dbms_macadm.unauthorize_datapump_user('DP_MGR');
    データ・ポンプの認可を確認する問合せでは、行が返されません:
    SELECT * FROM DBA_DV_DATAPUMP_AUTH;