12 Database Vault操作の制御

Oracle Database Vault操作の制御により、共通ユーザーがプラガブル・データベース内のアプリケーション・データにアクセスするのを防ぎます。

Oracle Database Vault操作の制御(ops制御と略されます)は、Oracle Database 19cで導入されました。ops制御を使用すると、コンテナ・ユーザー(SYSSYSTEMC##ユーザーなど)を、Oracle Multitenantプラガブル・データベース(PDB)に格納されている顧客またはアプリケーション・データから分離できます。

ops制御はコンテナ・データベース(CDB$ROOT)から構成され、有効にすると、CDBに関連付けられているすべてのPDBに適用されます。特定のコンテナ・ユーザーを除外するか、特定のPDBを除外することにより、ops制御を選択的に無効にできます。ただし、ユーザーがops制御から除外された場合、その権限を使用してPDB内のデータにアクセスできます。PDBが除外されると、適切な権限を持つすべての共通ユーザーは、それらの権限を使用してPDB内のデータにアクセスできます。

12.1 操作の制御の構成および有効化

操作の制御を有効にするには、コンテナ・データベースまたはアプリケーション・コンテナ・ルートでOracle Database Vaultを構成および有効化する必要があります。

前提条件

  • コンテナ・ルート・データベースでOracle Database Vaultを構成して有効化します。

    「CDBルートでのDatabase Vaultの構成および有効化」のステップに従って、Database Vaultを構成して有効化します。

  • プラガブル・データベースで管理アクションを実行できるPDBデータベース・ユーザーがいることを確認します。管理アクションは次のとおりです(ただし、これに限定されません):
    • GRANTREVOKE CREATE SESSIONまたはCONNECTロール
    • DBAロールのGRANTまたはREVOKE
    • CREATEALTER USERまたはDROP USERシステム権限
    • CREATEALTERまたはDROP TABLESPACEシステム権限
    • DATAPUMP_EXP_FULL_DATABASEまたはDATAPUMP_IMP_FULL_DATABASEロールの使用
    • GATHER_SYSTEM_STATISTICSロールの使用
    • SELECT_CATALOG_ROLEロールの使用

    ノート:

    操作の制御を有効にすると、SYSおよびSYSTEMは共通データベース・ユーザーとみなされ、PDBでCREATEALTER USERまたはDROP USER操作を実行できません。操作の制御を有効にする前に、データベース・ユーザーとその権限を構成することが重要です。

操作の制御の有効化

コンテナ・ルートから、DV_OWNERロールを持つユーザーとして次のプロシージャを実行します:

exec dbms_macadm.enable_app_protection;

コマンドが正常に完了すると、コンテナおよびプラガブル・データベースで操作の制御が構成および有効化されます。

または、個々のプラガブル・データベースでops制御を有効にするには、DV_OWNERロールを持つユーザーとして次のプロシージャを実行します:
exec dbms_macadm.enable_app_protection(<pdb_name>);

操作の制御を有効にするためにデータベースの再起動は必要ありません。

12.2 コンテナ・ユーザーのOracle Database Vault操作の制御からの除外

コンテナ・ユーザーは、操作の制御から除外でき、その権限を使用してプラガブル・データベース内のデータにアクセスできます。

特定のコンテナ・ユーザーを操作の制御から除外するには、CDBルートでDV_OWNERロールまたはDV_ADMINロールを持つユーザーとして次のコマンドを実行します:

exec DBMS_MACADM.ADD_APP_EXCEPTION ('C##COMMON_USER','%');

前述のコマンドを使用すると、共通ユーザーは、コンテナ・データベースに関連付けられているすべてのプラガブル・データベースでその権限を使用できます。

ノート:

除外ユーザーが実行したアクションでは、操作の制御によって防止されるすべてのアクションに対して、監査レコードが自動的に生成されます。これは必須の監査であるため、無効にできません。
操作の制御から除外されたユーザーを識別するには、DV_OWNERロールまたはDV_ADMINロールを持つユーザーとして次のコマンドを実行します:
select * from DBA_DV_APP_EXCEPTION;

12.3 コンテナ・ユーザーの除外アクセスの無効化

共通ユーザーが操作の制御から除外されないようにするには、DELETE_APP_EXCEPTIONプロシージャを実行します。

DV_OWNERロールまたはDV_ADMINロールを持つユーザーとして、CDBルートで次のコマンドを実行し、除外リストから共通ユーザーを削除します:
exec DBMS_MACADM.DELETE_APP_EXCEPTION ('C##COMMON_USER','%');
操作の制御からまだ除外されているユーザーを識別するには、DV_OWNERロールまたはDV_ADMINロールを持つユーザーとして次のコマンドを実行します:
select * from DBA_DV_APP_EXCEPTION;

12.4 特定のプラガブル・データベースに対する操作の制御の無効化

特定のPDBに対して操作の制御を無効にできます。

特定のPDBに対する操作の制御を無効にするには、コンテナ・データベースからDV_OWNERロールを持つユーザーとして次のコマンドを実行する必要があります:
exec dbms_macadm.disable_app_protection('<pdb_name>');
操作の制御のステータスを確認するには、コンテナ・データベースからSYSDBAとして次のコマンドを実行します:
select * from cdb_dv_status order by con_id;

12.5 Database Vault操作の制御の無効化

すべてのプラガブル・データベースに対して操作の制御を無効にするには、DISABLE_APP_PROTECTIONプロシージャを実行します。

DV_OWNERロールを持つユーザーとして、コンテナから次のコマンドを実行します:
exec dbms_macadm.disable_app_protection;

SYSDBAユーザーとして、コンテナから次のコマンドを実行します。

select * from cdb_dv_status order by con_id;

ops制御が無効である場合は、列DV_APP_PROTECTIONFALSEが表示されます。

12.6 操作の制御環境でのDBA操作

操作の制御環境でのデータベース管理者操作への影響はわずかです。

12.6.1 プラガブル・データベースでの操作

プラガブル・データベースには影響するが、アプリケーション・データには影響しないアクションは、通常、操作の制御環境で許容されます。

たとえば、操作の制御が有効になっているデータベースで、次の操作を実行できます:

  • PDBのオープンまたはクローズ
  • 同じコンテナ・データベースへの既存のPDBのクローニング
  • PDBの切断
  • 切断されたPDBの接続
  • アプリケーション・オブジェクトに関するオプティマイザ統計の収集
  • アプリケーション・オブジェクトに関連付けられたメタデータのデータ・ポンプ・エクスポートの実行

ノート:

Database Vaultを有効にせずに、操作の制御によって保護されているPDBをCDBに接続しようとすると、プラグイン違反が発生します。操作の制御によって保護されているPDBを接続する前に、受け取り側のCDBでDatabase Vaultおよび操作の制御を構成して有効化にする必要があります。

12.6.2 プラガブル・データベースでのDatabase Vaultロールおよびデータベース・アカウントの使用

プラガブル・データベースでのDatabase Vaultの管理には、共通のDatabase Vaultロールおよびデータベース・アカウントを使用できません。

ローカル・アカウントを作成し、適切なロールと権限を付与する必要があります。

たとえば、C##DVACCTMGRを使用してPDBにユーザーを作成できません:
connect c##dvacctmgr@pdb1
create user testuser identified by Oracle123;
*
ERROR at line 1:
ORA-01031: insufficient privileges

PDBでDatabase Vaultが有効になっていない場合、PDBでDV関連のロールまたはユーザーを使用する理由はありません。かわりに、適切なシステム権限またはオブジェクト権限を付与されているPDBデータベース・ユーザーを使用します。たとえば:

connect dba_debra@pdb1
create user testuser identified by Oracle123;
User created.

12.6.3 DDL操作の実行

Oracle Database Vault操作の制御の共通ユーザーによるデータ定義言語(DDL)操作は、Oracleが所有および保守するスキーマに制限されます。

PDB固有のオブジェクト(HR表など)でのDDLは、適切な権限を持つPDBデータベース・ユーザーに制限されます。たとえば、C##SYSまたはSYSTEMユーザーとして次のコマンドを実行すると、ORA-01031: 権限が不十分ですというエラー・メッセージが表示されます:

ALTER TABLE HR.EMPLOYEES ADD NEW_COLUMN VARCHAR2(20);

かわりに、適切な権限を持つPDBデータベース・ユーザーとしてアクションを実行します。

connect dba_debra@pdb1
ALTER TABLE HR.EMPLOYEES ADD NEW_COLUMN VARCHAR2(20);

12.6.4 Oracle Database VaultのOracle Enterprise Managerとの使用

Oracle Database Vault操作の制御では、Oracle Enterprise Manager Cloud Controlタスクを予測どおりに実行できます。プラガブル・データベースに対するアクションは、PDBデータベース・アカウントを使用して実行する必要があります。PDBで操作の制御が有効な場合は、SYSSYSTEMまたはその他の共通(C##)アカウントを使用しないでください。

12.6.5 Database Vault操作の制御を使用したRMAN操作

Oracle Database Vault操作の制御では、RMANの完全リストアまたは複製がサポートされます。ただし、個々のオブジェクトのリカバリに関連するRMAN操作はサポートされません。Oracle Database Vaultでは、オブジェクトに変更が発生しているユーザーや理由を特定できず、操作の制御によって保護します。

個々のオブジェクト(HRスキーマ内の表など)をリストアまたはリカバリするには、このオブジェクトの手動リカバリを実行する必要があります。オブジェクトのリカバリが必要な時点までデータベースのクローンをインスタンス化し、スキーマ・アカウントまたはPDBのローカル・ユーザーを使用してオブジェクトのデータ・ポンプ・エクスポートを実行し、再度スキーマ・アカウントまたはPDBのローカル・ユーザーを使用してオブジェクトのデータ・ポンプ・インポートを実行します。

12.6.6 操作の制御によって保護されるプラガブル・データベースでのデータ・ポンプ操作

共通ユーザーは、PDB固有データのOracle Data Pumpメタデータ・エクスポートのみを実行できます。

PDBデータベース・ユーザーを使用して、PDB固有オブジェクトのOracle Data Pumpエクスポートまたはインポート操作を実行することをお薦めします。

たとえば、このコマンドは、共通ユーザー(SYSTEM)を使用してHRスキーマからメタデータのみをエクスポートするため、成功します:
expdp system@pdb1 content=metadata_only directory=DATA_PUMP_DIR schemas=HR dumpfile=hr_metadata.dmp logfile=hr_metadata.log
ただし、次のコマンドは、共通ユーザー(SYSTEM)を使用してHRスキーマからメタデータと実際のデータの両方をエクスポートするため、成功しません:
expdp system@pdb1 content=all directory=DATA_PUMP_DIR schemas=HR dumpfile=hr_all.dmp logfile=hr_all.log

12.6.7 操作の制御によって保護されるPDBでのデータベース・スケジューラ・ジョブ

Oracle Databaseスケジューラ・ジョブは、共通ユーザー・オブジェクトの共通ユーザーが管理できますが、ローカルPDBユーザー・オブジェクトの共通ユーザーは管理できません。

適切な権限を持つローカルPDBユーザーを使用して、PDB固有オブジェクトでOracle Databaseスケジューラ・ジョブを管理する必要があります。

12.6.8 操作の制御によって保護されるPDBでのOracleプロキシ認証

PDB内では、Oracle Databaseプロキシ・ユーザーは操作の制御の影響を受けません。共通ユーザーは、ローカル・アカウントのかわりとなることはできません。たとえば、次は操作の制御で許可されます:
connect dba_debra[hr]@pdb1
ただし、次は操作の制御で許可されません:
connect c##common_user[hr]@pdb1

12.6.9 操作の制御によって保護されるPDBでのOracle GoldenGate

Oracle GoldenGateは、プラガブル・データベースが操作の制御によって保護される場合に使用できます。

Oracle Database Vault操作の制御は、Oracle GoldenGateとともに使用できます。

コンテナ・データベースから、DV_OWNERロールを持つユーザーとして次のロール付与および認可を実行します:
GRANT DV_STREAMS_ADMIN to c##ggadmin container=all;
GRANT DV_XSTREAM_ADMIN to c##ggadmin container=all;
GRANT DV_GOLDENGATE_ADMIN TO c##ggadmin container=all;
GRANT DV_GOLDENGATE_REDO_ACCESS TO c##ggadmin container=all;
EXEC DBMS_MACADM.AUTHORIZE_DDL('SYS', 'SYSTEM');
EXEC DBMS_MACADM.AUTHORIZE_DDL('SYS', '%');

操作の制御はプラガブル・データベース内のローカル・ユーザーに影響しないため、PDBのOracle GoldenGate管理者はローカル・データベース・ユーザーである必要があります。