2021年8月16日月曜日

データベース・セキュリティの活用(11) - Database Vault

最後にアプリケーションの利用者からのアクセスではなく、管理者からのアクセスからデータを保護してみます。

データベース・アクションにユーザー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にします。


ユーザーADB_DBV_ACCTMGRを作成します。



開発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_STATUSDV_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_STATUSTRUEのままです。


一旦Database Vaultを構成すると、構成する前に戻すということはできません。無効にすることはできるため、構成前に戻す必要はありません。

Database Vaultの構成を削除するには、プロシージャDBMS_MACADM.DELETE_AUTH_FROM_REALMDBMS_MACADM.DELETE_OBJECT_FROM_REALMおよびDBMS_MACADM.DELETE_REALMまはたDBMS_MACADM.DELETE_REALM_CASCADEを呼び出します。

データベース・セキュリティの活用のシリーズは本記事をもって、すべて終了です。

Oracle APEXのアプリケーション作成の参考になれば幸いです。