※ 本記事は、Leona Dsouzaによる”How to Integrate Oracle Real Application Security with APEX on Oracle Autonomous database“を翻訳したものです。

2022年9月29日


Oracle Real Application Security(RAS)とは:

Oracle Real Application Security(RAS)は、業界で最も高度なテクノロジであり、アプリケーション・セキュリティ要件をサポートしています。これはOracle Virtual Private Database(VPD)に似ていますが、より強力でメンテナンスが容易です。データベース内のアプリケーション・アクセス制御フレームワークにより、3層および2層アプリケーションがセキュリティ要件を宣言的に定義、プロビジョニングおよび強制できます。Oracle RASでは、データベース内のアプリケーションレベルのユーザー、権限およびロールを認識し、ビジネス・オブジェクトを表すレコードの静的コレクションおよび動的コレクションへのアクセスを制御するポリシーベースの認可モデルが導入されています。

Oracle RASとOracle APEXの即時利用可能な統合により、アプリケーション・データを保護するためのカスタム開発が不要になり、エンドツーエンドのアプリケーション・セキュリティが提供されます。

Oracle RASを使用した複数層アプリケーションでのセキュリティの適用:

Security enforcement in multi-tier applications using Oracle RAS

ユースケース:

アプリケーション・ユーザー”blake”および”king”を制限して、”hr”スキーマの下の”emp”表で部門ID 10および20に属する行のみにアクセスするとします。また、このユースケースでは、APEXを介してデータにアクセスしています。

ユースケースを実現するための大まかなステップ:

  1. DBロールを作成し、DBロールを保護する表に対する権限を付与します。
  2. RAS管理ユーザーを作成し、権限をRAS管理ユーザーに割り当てます。
  3. アプリケーション・ロールを作成し、そのアプリケーション・ロールにDBロールを付与します。
  4. アプリケーション・ユーザーを作成し、アプリケーション・ユーザーにアプリケーション・ロールを付与します。
  5. 管理者ユーザーとしてログインして、APEXのインスタンス・レベルでRASを有効にします。
  6. APEXワークスペースにログインして、各アプリケーションでRASを有効にします。
  7. 必要に応じてセキュリティ・クラスを作成します。
  8. ACLを作成し、アプリケーション・ロールをACLに関連付けます。
  9. データ・セキュリティ・ポリシーを作成します。
  10. データ・セキュリティ・ポリシーを表に適用します。
  11. APEXを介してアプリケーション・ユーザーとして表にアクセスします。

この例で使用される名前は次のとおりです。:

Database schema       : HR

DB Table                      : EMP

RAS admin user          : RASADM

Database Role            : DB_EMP

Application Roles        : DEPT10 & DEPT20

Application Users        : BLAKE & KING

1. データベースADMINユーザーとして自律型データベースにログインしてDBロールを作成し、保護する表に対する権限をDBロールに付与します。

データベース・ロールDB_EMPを作成し、このロールに必要な表権限を付与します。

create role db_emp;
grant insert,update,delete,select on hr.emp to db_emp;
  1. RAS管理ユーザーRASADMを作成し、権限をRAS管理ユーザーに割り当てます。
create user rasadm;
password rasadm; --enter the password for RASADM
grant CREATE SESSION to rasadm;

ステップ1で作成したDBロールをRAS管理ユーザーに付与します。

grant db_emp to rasadm with admin option;

Real Application Securityは、Autonomous DatabaseとオンプレミスのOracle Databaseで同じように動作しますが、Autonomous DatabaseでReal Application Securityを使用する前に次のADMINタスクを実行する必要があります。:

Real Application Securityのユーザー/ロールを作成するには、PROVISIONシステム権限が必要です。

ADMINユーザーとして次のコマンドを実行し、この権限をデータベース・ユーザーに付与します。:

EXEC XS_ADMIN_CLOUD_UTIL.GRANT_SYSTEM_PRIVILEGE('PROVISION','RASADM');

Real Application Securityデータ・コントロールを作成するには、ADMIN_ANY_SEC_POLICY権限が必要です。

ADMINユーザーとして次のコマンドを実行して、この権限を付与します。:

EXEC XS_ADMIN_CLOUD_UTIL.GRANT_SYSTEM_PRIVILEGE('ADMIN_ANY_SEC_POLICY','RASADM');
  1. この例(RASADM)のRAS管理者ユーザーとしてデータベースにログインしてアプリケーション・ロールを作成し、アプリケーション・ロールにDBロールを付与します。

アプリケーション・ロールの作成:

exec sys.xs_principal.create_role(name => 'dept10', enabled => true);
exec sys.xs_principal.create_role(name => 'dept20', enabled => true);

アプリケーション・ロールへのDBロールの付与:

grant db_emp to dept10;
grant db_emp to dept20;
  1. アプリケーション・ユーザーを作成し、アプリケーション・ユーザーにアプリケーション・ロールを付与します。

アプリケーション・ユーザー”blake”を作成し、アプリケーション・ロール”dept10″をblakeに付与します。:

exec  sys.xs_principal.create_user(name => 'blake', schema => 'hr');
exec  sys.xs_principal.set_password('blake', '<PASSWORD>');
exec  sys.xs_principal.grant_roles('blake', 'XSCONNECT');
exec  sys.xs_principal.grant_roles('blake', 'dept10');

アプリケーション・ユーザー”king”を作成し、アプリケーション・ロール”dept20″をKingに付与します。:

exec  sys.xs_principal.create_user(name => 'king', schema => 'hr');
exec  sys.xs_principal.set_password('king', '<PASSWORD>');
exec  sys.xs_principal.grant_roles('king', 'XSCONNECT');
exec  sys.xs_principal.grant_roles('king', 'dept20');
  1. 管理ユーザーとしてログインして、まずAPEXのインスタンス・レベルでRASを有効にします。

ADMINユーザーとしてAPEXにログインします。

Security enforcement in multi-tier applications using Oracle RAS

「Manage Instance」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

「Security」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

「Real Application Security」をクリックし、「Allow Real Application Security」オプションが「Yes」に設定されていることを確認します。デフォルトでは、このオプションは自律型データベースで「Yes」に設定されます。

Security enforcement in multi-tier applications using Oracle RAS
  1. APEXワークスペースにログインしてアプリケーションのRASを有効にします。この例では、APEXのHRワークスペースにログインしています。
Security enforcement in multi-tier applications using Oracle RAS

「App Builder」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

RASを有効にするアプリケーションをクリックします。

Security enforcement in multi-tier applications using Oracle RAS

「Shared Components」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

「Authentication Schemes」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

デフォルトのスキーム(Oracle APEX accounts)を選択します。

Security enforcement in multi-tier applications using Oracle RAS

「Real Application Security」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

要件に基づいて「Internal Users」または「External Users」を選択して、RASモードを有効にします。この例では、「Internal Users」を選択し、「Apply Changes」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS
  1. 必要に応じてセキュリティ・クラスを作成します。

列または行データを特定のユーザーにマスクする必要がある場合は、セキュリティ・クラスを使用して同じことを実現できます。このユースケースでは範囲外であるため、セキュリティ・クラスの作成をスキップしています。

  1. ACLを作成し、アプリケーション・ロール(dept10およびdept20)をACLに関連付けます。

ACLの作成:

declare 
  aces xs$ace_list := xs$ace_list(); 
begin
  aces.extend(1);
 -- DEPT10_ACL:  This ACL grants dept10(application role) the privilege to view and update all
 --          employees records in hr.emp table.
  aces(1):= xs$ace_type(privilege_list => xs$name_list('select', 'insert',
                                        'update', 'delete'),
                        principal_name => 'dept10');
   sys.xs_acl.create_acl(name      => 'dept10_acl',
                    ace_list  => aces);
 end;
/

declare 
  aces xs$ace_list := xs$ace_list(); 
begin
  aces.extend(1);
 -- DEPT20_ACL:  This ACL grants dept20(application role) the privilege to view and update all
  --          employees record in hr.emp table.
  aces(1):= xs$ace_type(privilege_list => xs$name_list('select', 'insert',
                                        'update', 'delete'),
                        principal_name => 'dept20');
  sys.xs_acl.create_acl(name      => 'dept20_acl',
                    ace_list  => aces);
 end;
/
  1. データ・セキュリティ・ポリシー”emp_ds”を作成します。
declare
  realms   xs$realm_constraint_list := xs$realm_constraint_list();     
begin 
  realms.extend(1);
  -- Realm #1: Only the department number10
  --           blake can view the realm with deptno 10.
  realms(1) := xs$realm_constraint_type(
    realm    => 'deptno = 10',
    acl_list => xs$name_list('dept10_acl'));

  sys.xs_data_security.create_policy(
    name                   => 'emp_ds',
    realm_constraint_list  => realms);
end;
/
  1. データ・セキュリティ・ポリシーを表に適用します。
begin
  sys.xs_data_security.apply_object_policy(
    policy => 'emp_ds',
    schema => 'hr',
    object =>'emp');
end;
/

次のコマンドを使用して、同じデータ・セキュリティ・ポリシーにさらにレルムを追加できます:

これにより、deptno 20でレルムを表示できるようになります。

DECLARE
  realm_cons XS$REALM_CONSTRAINT_TYPE;     
BEGIN 
  realm_cons :=
    XS$REALM_CONSTRAINT_TYPE(realm=> 'deptno = 20',
                             acl_list=> XS$NAME_LIST('dept20_acl'));

  SYS.XS_DATA_SECURITY.APPEND_REALM_CONSTRAINTS( policy=>'emp_ds', 

realm_constraint=>realm_cons);

END;
  1. ここで、APEXを介してアプリケーション・ユーザーとして表にアクセスします。次のステップに従って同じことを実現しました。

ワークスペースにログインします。

Security enforcement in multi-tier applications using Oracle RAS

「Administration」をクリックし、「Manage Users and Groups」を選択します。

Security enforcement in multi-tier applications using Oracle RAS

「Create User」をクリックします。ステップ4で作成したのと同じアプリケーション・ユーザーを作成します。

Security enforcement in multi-tier applications using Oracle RAS

必須の詳細(ユーザー名、電子メール・アドレスおよびパスワード)を指定し、「Create User」をクリックします。このステップを繰り返してすべてのアプリケーション・ユーザーを作成します。この例では、ユーザー「blake」と「king」を作成しています。

Security enforcement in multi-tier applications using Oracle RAS

次に、APEXでアプリケーション・ロールを作成します。ステップ3で作成したものと同じアプリケーション・ロールを作成します。

この場合は、app-builderをクリックし、アプリケーションを選択して「Shared Components」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

「Application Access Control」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

「Add Role」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

ロール名および説明(オプション)を指定し、「Create Role」をクリックします。このステップを繰り返して、すべてのアプリケーション・ロールを作成します。

この例では、アプリケーション・ロールdept10およびdept20を作成しています。

Security enforcement in multi-tier applications using Oracle RAS

同じウィンドウで下にスクロールし、「Add User Role Assignment」をクリックします。これにより、前に作成したアプリケーション・ロールがアプリケーション・ユーザーに関連付けられます。

Security enforcement in multi-tier applications using Oracle RAS

アプリケーション・ユーザー名を指定し、ユーザーに割り当てるアプリケーション・ロールを確認、「Create Assignment」をクリックします。

Security enforcement in multi-tier applications using Oracle RAS

次に示すようにロールおよび割当を表示できます。

Security enforcement in multi-tier applications using Oracle RAS

アプリケーションのユーザー名とパスワードを指定してアプリケーションを実行します。

この例では、「blake」ユーザーとしてログインしています。

You’ll be able to see the role and assignments as shown below.

表をクリックします。

You’ll be able to see the role and assignments as shown below.

ユーザーが表示できる行のみが表示されます。

この例では、アプリケーション・ユーザーblakeは、部門番号10に属する行のみを表示できます。

You’ll be able to see the role and assignments as shown below.

まとめ:

すべてのユースケースが異なります。Oracle Cloud Infrastructureが適切かどうかを知る唯一の方法は、それを試すことです。Oracle Cloud Free Tierまたは30日間の無料トライアルを選択できます。これには、コンピュート、ストレージ、ネットワーキングなど、幅広いサービスから開始するための300ドルのクレジットが含まれます。

詳細は、次のリソースを参照してください。:

https://docs.oracle.com/cd/E83857_01/paas/autonomous-database/adbsa/autonomous-real-application-security.html

https://docs.oracle.com/cd/F39413_01/aeadm/enabling-real-application-security.html#GUID-87495F74-7FC9-4076-AEFC-FE09DD75D212

https://docs.oracle.com/cd/E57425_01/121/DBFSG/intro.htm#DBFSG10000