最後にアプリケーションの利用者からのアクセスではなく、管理者からのアクセスからデータを保護してみます。
データベース・アクションにユーザーADMINで接続し、以下のSQLを実行します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select * from hr.emp; |
ユーザーADMINはデータベースの管理者なので強い権限を持っており、表HR.EMPの内容のすべてを参照することができます。
しかし、データベースの管理者が人事情報を参照できるのは不適切であり、可能であればアクセスは禁止すべきです。
Oracle DatabaseおよびAutonomous DatabaseではDatabase Vaultを構成することにより、管理者ユーザーからのデータのアクセスを禁止することが可能です。
以下より、Autonomous DatabaseにDatabase Vaultを構成することにより、ユーザーADMINのよる表HR.EMPの参照と操作を禁止してみます。
最初にDatabase Vaultの構成状況を確認します。ビューDBA_DV_STATUSを参照します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select * from 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を呼び出し有効化します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_cloud_macadm.configure_database_vault( | |
'ADB_DBV_OWNER', | |
'ADB_DBV_ACCTMGR' | |
); | |
end; | |
/ | |
begin | |
dbms_cloud_macadm.enable_database_vault; | |
end; | |
/ |
スクリプトの実行後、データベースの再起動を行います。再起動後にDatabase Vaultが有効になります。
再起動が完了したら、データベース・アクションにユーザーADB_DBV_OWNERにてサインインします。
再度Database Vaultのステータスを確認します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select * from dba_dv_status; |
DV_CONFIGURE_STATUS、DV_ENABLE_STATUSともにTRUEになっていることが確認できます。
最初にレルムHuman Resourceを作成します。プロシージャDBMS_MACADM.CREATE_REALMを呼び出します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_macadm.create_realm( | |
realm_name => 'Human Resource' | |
, description => 'Protect HR Data from ADMIN' | |
, enabled => DBMS_MACUTL.G_YES | |
, audit_options => DBMS_MACUTL.G_REALM_AUDIT_FAIL + DBMS_MACUTL.G_REALM_AUDIT_SUCCESS | |
, realm_type => 1 | |
, realm_scope => DBMS_MACUTL.G_SCOPE_LOCAL | |
); | |
end; | |
/ |
作成したレルムはビューDBA_DV_REALMより確認できます。
作成したレルムHuman Resourceに保護対象となるオブジェクトを含めます。スキーマHRのオブジェクトすべてを対象とします。プロシージャDBMS_MACADM.ADD_OBJECT_TO_REALMを呼び出します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_macadm.add_object_to_realm( | |
realm_name => 'Human Resource' | |
, object_owner => 'HR' | |
, object_name => '%' | |
, object_type => '%' | |
); | |
end; | |
/ |
保護対象としたオブジェクトは、ビューDBA_DV_REALM_OBJECTより確認できます。
保護対象のオブジェクトへアクセスできるユーザーを設定します。プロシージャDBMS_MACADM.ADD_AUTH_TO_REALMを呼び出します。
APEXのアプリケーションの開発時は、スキーマHRへのアクセスはユーザーAPEXDEVとして行われます。そのためAPEXDEVにレルムHuman Resourceへのアクセス権限を与えています。テスト用アプリケーションの認証スキームは、Real Application Securityが有効化されているため、スキーマHRへのアクセスはアプリケーション・ユーザーの権限で行われます。そのためアプリケーション・ロールEMPLOYEEにアクセス権限を与えています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_macadm.add_auth_to_realm( | |
realm_name => 'Human Resource' | |
, grantee => 'APEXDEV' | |
, auth_options => DBMS_MACUTL.G_REALM_AUTH_OWNER | |
); | |
end; | |
/ | |
begin | |
dbms_macadm.add_auth_to_realm( | |
realm_name => 'Human Resource' | |
, grantee => 'EMPLOYEE' | |
, auth_options => DBMS_MACUTL.G_REALM_AUTH_PARTICIPANT | |
); | |
end; | |
/ |
レルムにアクセスできるユーザーまたはロールは、ビューDBA_DV_REALM_AUTHより確認できます。
以上でスキーマHRのオブジェクトを含んだレルムHuman Resourceの構成が完了しました。レルムHuman Resourceは、ユーザーAPEXDEVとアプリケーション・ロールEMPLOYEEのみにアクセスを制限しており、管理者ユーザーであるADMINには権限を与えていません。結果として、ADMINは表HR.EMPにアクセスできません。
実際に保護の状態を確認してみます。
データベース・アクションにユーザーADMINでサインインし、表HR.EMPを検索します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
select * from 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にて実行します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_cloud_macadm.disable_database_vault; | |
end; | |
/ |
構成の変更は、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を呼び出します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
begin | |
dbms_macadm.delete_auth_from_realm( | |
realm_name => 'Human Resource' | |
, grantee => 'APEXDEV' | |
, auth_scope => DBMS_MACUTL.G_SCOPE_LOCAL | |
); | |
dbms_macadm.delete_auth_from_realm( | |
realm_name => 'Human Resource' | |
, grantee => 'EMPLOYEE' | |
, auth_scope => DBMS_MACUTL.G_SCOPE_LOCAL | |
); | |
dbms_macadm.delete_object_from_realm( | |
realm_name => 'Human Resource' | |
, object_owner => 'HR' | |
, object_name => '%' | |
, object_type => '%' | |
); | |
dbms_macadm.delete_realm( | |
realm_name => 'Human Resource' | |
); | |
end; | |
/ |
データベース・セキュリティの活用のシリーズは本記事をもって、すべて終了です。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完