最後にアプリケーションの利用者からのアクセスではなく、管理者からのアクセスからデータを保護してみます。
データベース・アクションにユーザーADMINで接続し、以下のSQLを実行します。
ユーザーADMINはデータベースの管理者なので強い権限を持っており、表HR.EMPの内容のすべてを参照することができます。
しかし、データベースの管理者が人事情報を参照できるのは不適切であり、可能であればアクセスは禁止すべきです。
Oracle DatabaseおよびAutonomous DatabaseではDatabase Vaultを構成することにより、管理者ユーザーからのデータのアクセスを禁止することが可能です。
以下より、Autonomous DatabaseにDatabase Vaultを構成することにより、ユーザーADMINのよる表HR.EMPの参照と操作を禁止してみます。
最初にDatabase Vaultの構成状況を確認します。ビューDBA_DV_STATUSを参照します。
Autonomous Databaseのインスタンス作成後でDatabase Vaultが未構成であればDV_CONFIGURE_STATUSおよびDV_ENABLE_STATUSともにFALSEです。
それではDatabase Vaultを構成していきます。
Database Vaultを構成するために使用するふたつのデータベース・ユーザー、ADB_DBV_OWNERおよびADB_DBV_ACCTMGRを作成します。
データベース・アクションにユーザーADMINで接続します。管理のデータベース・ユーザーを開き、ユーザーの作成を実行します。
ユーザーADB_DBV_OWNERを作成します。Database Vaultの設定はこのユーザーでデータベース・アクションに接続して実施するため、WebアクセスはONにします。
開発のSQLを開き、Database Vaultの構成と有効化を行います。プロシージャDBMS_CLOUD_MACADM.CONFIGURE_DATABASE_VAULTを呼び出しDatabase Vaultを構成したのち、DBMS_CLOUD_MACADM.ENABLE_DATABASE_VAULTを呼び出し有効化します。
スクリプトの実行後、データベースの再起動を行います。再起動後にDatabase Vaultが有効になります。
再起動が完了したら、データベース・アクションにユーザーADB_DBV_OWNERにてサインインします。
再度Database Vaultのステータスを確認します。
DV_CONFIGURE_STATUS、DV_ENABLE_STATUSともにTRUEになっていることが確認できます。
最初にレルムHuman Resourceを作成します。プロシージャDBMS_MACADM.CREATE_REALMを呼び出します。
作成したレルムはビューDBA_DV_REALMより確認できます。
作成したレルムHuman Resourceに保護対象となるオブジェクトを含めます。スキーマHRのオブジェクトすべてを対象とします。プロシージャDBMS_MACADM.ADD_OBJECT_TO_REALMを呼び出します。
保護対象としたオブジェクトは、ビューDBA_DV_REALM_OBJECTより確認できます。
保護対象のオブジェクトへアクセスできるユーザーを設定します。プロシージャDBMS_MACADM.ADD_AUTH_TO_REALMを呼び出します。
APEXのアプリケーションの開発時は、スキーマHRへのアクセスはユーザーAPEXDEVとして行われます。そのためAPEXDEVにレルムHuman Resourceへのアクセス権限を与えています。テスト用アプリケーションの認証スキームは、Real Application Securityが有効化されているため、スキーマHRへのアクセスはアプリケーション・ユーザーの権限で行われます。そのためアプリケーション・ロールEMPLOYEEにアクセス権限を与えています。
レルムにアクセスできるユーザーまたはロールは、ビューDBA_DV_REALM_AUTHより確認できます。
以上でスキーマHRのオブジェクトを含んだレルムHuman Resourceの構成が完了しました。レルムHuman Resourceは、ユーザーAPEXDEVとアプリケーション・ロールEMPLOYEEのみにアクセスを制限しており、管理者ユーザーであるADMINには権限を与えていません。結果として、ADMINは表HR.EMPにアクセスできません。
実際に保護の状態を確認してみます。
データベース・アクションにユーザーADMINでサインインし、表HR.EMPを検索します。
ORA-1031: insufficient privilegesのエラーが発生し、一番強い権限を持つユーザーADMINからのアクセスが拒否されていることが確認できます。
APEXのSQLワークショップのSQLコマンドからは検索できます。ユーザーAPEXDEVからのアクセスを許可しているためです。
Real Application Securityが有効になっているAPEXアプリケーションからもアクセスできます。アプリケーション・ロールEMPLOYEEを持っていればアクセスを許可しているためです。
以上でDatabase Vaultを構成し、管理者からのアクセスを禁止することができました。
Database Vaultを無効にするには、プロシージャDBMS_CLOUD_MACADM.DISABLE_DATABASE_VAULTをユーザーADB_DBV_OWNERにて実行します。
構成の変更は、Autonomous Databaseの再起動後に有効になります。
ビューDBA_DV_STATUSを確認すると、DV_ENABLE_STATUSはFALSEになりますが、DV_CONFIGURE_STATUSはTRUEのままです。
一旦Database Vaultを構成すると、構成する前に戻すということはできません。無効にすることはできるため、構成前に戻す必要はありません。
Database Vaultの構成を削除するには、プロシージャDBMS_MACADM.DELETE_AUTH_FROM_REALM、DBMS_MACADM.DELETE_OBJECT_FROM_REALMおよびDBMS_MACADM.DELETE_REALMまはたDBMS_MACADM.DELETE_REALM_CASCADEを呼び出します。
データベース・セキュリティの活用のシリーズは本記事をもって、すべて終了です。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完