- 3,708,977 Users
- 2,241,169 Discussions
- 7,840,726 Comments
Forum Stats
Discussions
ADB HOL #8-5 : Database Vaultによる職務分掌に基づいたアクセス制御の実装

目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう
Autonomous Databaseの特権ユーザであるADMINユーザはデータベースの管理だけでなくデータベースの全データを参照することができます。しかし、セキュリティ面でそれを許可したくない場合もあります。
Oracle Database Vaultは職務分掌と最小権限の原則を実施し、アクセスポリシーを作成する専用ユーザとアカウント管理専用ユーザを設け、特権ユーザからそれらの管理権限を分離します。
それにより、特権ユーザであってもアクセスポリシーの操作やアカウント管理操作ができず、許可された場合のみしか別アカウントのデータへのアクセスができなくなります。
Oracle Database Vaultの詳細な機能については、Oracle Database Vaultホームページ(https://www.oracle.com/jp/database/technologies/security/db-vault.html )やドキュメントをご覧ください。
本文書では、Autonomous DatabaseでOracle Database Vaultを有効化し、特権ユーザであるADMINユーザが他のユーザのデータにアクセスできないように設定をします。
作業手順は以下の通りです。
- テスト用のユーザとデータの準備、確認
- Oracle Database Vaultの有効化
- 特権ユーザーの権限はく奪
- アクセス制御の設定
- 特権ユーザと認可したユーザーで表にアクセス
- Oracle Database Vaultの無効化
また実施にあたって以下を前提とします。
- 1のテスト用のユーザは任意のユーザおよび表でも構いませんが、ここでは、ADB HOL #6-3 : Oracle APEX on ADB!簡単すぐにアプリを作ってみようのAPEX_01ユーザのORDERS表を利用します。
- SQLコマンドを実行するユーザインタフェースとして、SQL*Plusを利用します。もしAutonomous Databaseに接続できるSQL*Plusの環境がお手元にない場合は、ADB HOL #3-2 : SQL*plusで接続してみようのOCI Developer Image のSQL*Plusを利用してください。
- 記載されているパッケージの引数についての説明は記載しておりません。詳細はご利用バージョンのドキュメント『Oracle Database Vault管理者ガイド』(リンクは19c版です)をご参照くださいますようお願いいたします。
1.テスト用のユーザとデータの準備、確認
Oracle Data Vaultの設定について確認するために、テスト用のユーザと表を準備します。
本文書ではADB HOL #6-3 : Oracle APEX on ADB!簡単すぐにアプリを作ってみようの実施で作成されるデータベースユーザAPEX_01とORDERS表を利用します。
Oracle Data Vaultを有効化する前にまず、特権ユーザであるADMINユーザでAPEX_01ユーザのORDER表にアクセスできることを確認します。
Teratermなどの端末で仮想マシンにログイン後、SQL*Plusを起動し、Autonomous DatabaseにADMINユーザでログインします。
以下はADB HOL #3-2 : SQL*plusで接続してみようでの接続の例です。以降の手順におけるAutonomous Databaseへの接続の記述はこちらを利用します。
$ sqlplus admin/Welcome12345#@atp01_low
username : admin
password : Welcome12345#(インスタンス作成時に指定した値)
conn_string : atp01_low (接続サービス名 )
* 接続サービスに関する詳細は技術詳細、もしくはを参照ください。
ログインが完了したら、APEX_01スキーマのORDERS表の件数を確認するSQLを実行します。
--apex_01スキーマのORDERS表の件数を確認SELECT count(*) FROM apex_01.orders;
以下のような結果になります。
件数を確認できたことにより、特権ユーザであるADMINユーザは他スキーマAPEX_01の持ち物であるORDERS表を参照できることが確認できました。
2.Oracle Database Vaultの有効化
続けて、ADMINユーザでOracle Database Vaultを有効化するためのSQLを実行していきます。
構成に必要なスキーマの作成
Oracle Database Vaultを利用するためにはOracle Database Vaultに関わる操作を行うスキーマ(DV所有者)とアカウントを管理する専用スキーマ(アカウント管理者)の2つを作成する必要があります。職務分掌の第一歩です。
以下の実行してユーザを作成しましょう。
スキーマ名は任意ですが、ここではDV所有者を「mydbowner」、アカウント管理者を「mydvacctmgr」とします。
<パスワード>には、それぞれ任意のパスワードを入力してください。
-- DV所有者スキーマ作成CREATE USER mydvowner IDENTIFIED BY "<mydvownerのパスワード>";-- アカウント管理者スキーマ作成CREATE USER mydvacctmgr IDENTIFIED BY "<mydvacctmgrのパスワード>";
Oracle Database Vaultの構成と有効化
2つのスキーマを作成した後に、Oracle Database Vaultの構成と有効化を行います。
Autonomous Databaseでは、提供されているDBMS_CLOUD_MACADMパッケージを利用します。まず構成のコマンドを実行します。
--Database Vaultの構成(スキーマの設定:第1引数がDV所有者、第2引数がアカウント管理者を指定) EXEC DBMS_CLOUD_MACADM.CONFIGURE_DATABASE_VAULT('mydvowner','mydvacctmgr');
構成のコマンドにより、先に作成した2つのスキーマに必要な権限がまとめられたロール(DV所有者にはDV_OWNERロール、アカウント管理者にはDV_ACCTMGRロール)が付与されます。
パッケージのコマンドが成功すると以下のメッセージが出力されます。
成功を確認後、次に有効化のコマンドを実行します。
Oracle Database Vaultの有効化、無効化はコマンドの後にAutonomous Databaseの再起動が必要としますので、有効化のコマンドが完了した後ログアウトします。
以下を実行してください。
--Database Vaultの有効化EXEC DBMS_CLOUD_MACADM.ENABLE_DATABASE_VAULT;--Autonomous Databaseからログアウト EXIT
Autonomous Databaseを再起動します。
管理コンソールで、「他のアクション」プルダウンメニューから「再起動」を選択してください。
Database Vaultの有効化の確認
再起動が終わりましたら、再度SQL*Plusを利用してadminユーザでログインし、Oracle Database Vault用のデータ・ディクショナリビューに問い合わせて設定の有効化を確認しましょう。
まず、再度SQL*PlusでADMINユーザでログインします。
$ sqlplus admin/Welcome12345#@atp01_low
Database Vaultの構成や有効化の状態は「DBA_DV_STATUS」というディクショナリビューで確認します。
--DBA_DV_STATUSディクショナリビューを検索するcol status for a30SELECT * FROM dba_dv_status;
以下のようにNAME列で構成の状況を示す"DV_CONFIGURE_STATUS"と有効化の状況を示す"DV_ENABLE_STATUS"のSTATUS列の値がTRUEになっていれば有効化されています。
Oracle Database Vaultのデータディクショナリ・ビューの情報は『Oracle Database Vault管理者ガイド』で確認できます。
3.特権ユーザーの権限はく奪
特権ユーザであるADMINユーザはDatabase Vault所有者のロール(DV_OWNER)もアカウント管理専用ユーザのロール(DV_ACCTMGR)もデフォルトで持っています。それらをはく奪します。
ADMINユーザで以下を実行します。
--アカウント管理用の権限をはく奪REVOKE dv_acctmgr FROM admin;--DV所有者用の権限をはく奪REVOKE dv_owner FROM admin;
アカウント管理ができなくなっていることを確認します。ADMINユーザでTESTUSERという名前のユーザ作成を試してみましょう。
--アカウント管理が可能か確認するためにユーザを作成するCREATE USER testuser IDENTIFIED BY "<任意のパスワード>";
結果は次のようなエラーになるはずです。
これはアカウントを管理する権限がなくなったためです。作成だけでなく、ユーザの変更(ALTER USER文)や削除(DROP USER文)も同様のエラーになります。
ここでは実行しませんが、Database Vaultの操作権限もはく奪していますので、手順3以降で実行するDatabase Vaultの操作もADMINユーザで実行すると次のエラーになります。

4.アクセス制御の設定
スキーマのオブジェクト(データ)をOracle Database Vaultで保護するためには、次のステップが必要です。
- 「レルム」という論理的なグループを作成する
- 「レルム」に保護したいオブジェクトやスキーマを追加する
- 「レルム」に対してアクセスできるユーザを認可する
上記の操作はOracle Database Vaultの所有者でDBMS_MACADMパッケージを利用して実行します。1で利用したDBMS_CLOUD_MACADMと名前が似ているので注意してください。
レルムの作成
SQL*PlusでOracle Database Vaultの所有者であるmydvownerユーザで接続し、レルムを作成します。
以下のSQLスクリプトを実行してください。mydvownerのパスワードはユーザ作成時に指定したパスワードです。
--mydvownerユーザで接続するconnect mydvowner/Welcome12345#@atp1_low--レルムを作成するBEGIN DBMS_MACADM.CREATE_REALM ( realm_name => 'APEX_01 Realm', description => 'Realm for APEX_01 schema', enabled => DBMS_MACUTL.G_YES, audit_options => DBMS_MACUTL.G_REALM_AUDIT_OFF, realm_type => 1);END;/
オブジェクトの追加
レルムの作成が完了したら、そのレルムにアクセスを制御したいオブジェクトを追加します。以下を実行してください。
--レルムにAPEX_01スキーマのオブジェクト(表)を追加するBEGIN DBMS_MACADM.ADD_OBJECT_TO_REALM ( realm_name => 'APEX_01 Realm', object_owner => 'APEX_01', object_name => '%', object_type => 'TABLE');END;/
アクセスを許可するユーザの設定
これでAPEX_01スキーマの表を保護するレルムが作成できました。しかし、このままだと所有者のAPEX_01ユーザもアクセスできません。
APEX_01ユーザに対しアクセスの認可を与えます。以下を実行してください。
--レルムにアクセスできるユーザを指定して認可を与えるBEGIN DBMS_MACADM.ADD_AUTH_TO_REALM( realm_name=> 'APEX_01 realm', grantee => 'APEX_01', auth_options => 'DBMS_MACUTL.G_REALM_AUTH_OWNER);END;/
5.特権ユーザと認可したユーザーで表にアクセス
では、設定が有効かADMINユーザとAPEX_01ユーザでAPEX_01スキーマの表に再度アクセスしてみましょう。
SQL*Plusで以下を実行します。
--ADMINユーザで接続CONNECT admin/Welcome12345#@atp01_low--APEX_01ユーザのORDERS表の件数を検索SELECT count(*) FROM apex_01.orders;--APEX_01ユーザで接続CONNECT apex_01/<設定したパスワード>@atp01_low--ORDERS表の件数を検索SELECT count(*) FROM apex_01.orders;
以下のような結果になります。
Oracle Database Vaultの設定を行う前はADMINユーザはAPEX_01ユーザの表を参照できていましたが、今回はORA-01031:insufficient privileges(権限が不足しています)のエラーとなりました。
一方、認可を与えたAPEX_01ユーザではアクセスできることが確認できますね。
設定をすぐに有効化せず、テストできるシミュレーション・モードも提供されています。シミュレーション・モードの場合は、違反するSQLはエラーにはならず、シミュレーション・ログに記録されます。
6.Oracle Database Vaultの無効化
Oracle Database Vaultを無効にします。Oracle Database Vaultの所有者であるmydvownerユーザで以下のSQLを実行します。
--mvdvownerユーザで接続CONNECT mvdvowner/<設定したパスワード>@atp01_low--Database Vaultを無効化EXEC DBMS_CLOUD_MACADM.DISABLE_DATABASE_VAULT;
その後、Autonomous Databaseを再起動することで無効化の設定が反映されます。
SQL*PlusでADMINユーザでログインし、有効化のときと同じように確認しましょう。
再度SQL*PlusでADMINユーザでログインします。
$ sqlplus admin/Welcome12345#@atp01_low
次にDBA_DV_STATUSディクショナリを問い合わせます。
--Oracle Database Vaultの構成、設定の確認SELECT * FROM dba_dv_status;
DV_ENABLE_STATUSの値がFALSEになっていることが確認できます。ADMINユーザでAPEX_01のORDERS表にもアクセスができます。
手順6で無効化したのはOracle Database Vaultの機能であり、手順3と4で行ったADMINユーザからの権限はく奪やアクセス制御の設定はそのまま維持されます。そのため、次にDatabase Vaultを有効化/無効化するときのコマンドはADMINユーザではなくDatabase Vault所有者であるmydvownerユーザで実行します。また有効化直後からADMINユーザはAPEX_01のORDERS表にアクセスできなくなります。もし、Database Vault所有者がパスワード忘れやパスワード有効切れでログインできなくなると、Database Vaultの無効化を含む操作ができなくなりますので、Database Vault所有者の取り扱いには十分に注意するようにしてください。
以上です。
Oracle Database Vault で特権ユーザーであっても機密データにアクセスすることが防止できることをご確認いただきました
また、ここでは扱いませんでしたが、文レベルやユーザプロパティ(ロケーション、IPアドレスなど)別の制御や時間帯を指定するなどもできます。
詳細は『Oracle Database Vault管理者ガイド』の「6.コマンド・ルールの構成」、「7.ファクタの構成」の章でご確認ください。(チュートリアルもございます)
要件にあわせてOracle Database Vaultの柔軟で強力なアクセス制御をご利用ください。
参考資料
- 製品ドキュメント
- Autonomous Data Warehouse / Autonomous Transaction Processing
- https://docs.oracle.com/cd/E83857_01/paas/autonomous-data-warehouse-cloud/books.html
- https://docs.oracle.com/cd/E83857_01/paas/atp-cloud/books.html
- Oracle Database VaultとAutonomous Databaseの使用
- Oracle Database 19c
- https://docs.oracle.com/cd/F19136_01/books.html
- Oracle Database Vault管理者ガイド
>ADBコンテンツ一覧に戻る:Autonomous Database ハンズオンラボ