この人事管理(HR)デモは、基本的なReal Application Security (RAS)機能の使用方法を示します。このチュートリアルは、エンドツーエンドのユースケース・シナリオです。PL/SQLスクリプト、Javaプログラム・ソース・ファイルおよびログ・ファイルはReal Application Security HRデモ・ファイルを参照してください。
HRデモは、次の3つのレルムを持つデータ・セキュリティ・ポリシーを適用することでHR.EMPLOYEE
表を保護します。
従業員の固有のレコード・レルム。ACL EMP_ACL
はこのレルムを制御し、SALARY
列を含むレルムにアクセスするためのEMP_ROLE
権限をアプリケーション・ロールに付与します。
IT部門レルム内のすべてのレコード。ACL IT_ACL
はこのレルムを制御し、SALARY
列を除くレルムにアクセスするためのIT_ROLE
権限をアプリケーション・ロールに付与します。
すべての従業員レコード・レルム。ACL HR_ACLはこのレルムを制御し、SALARY
列を含むレルムにアクセスするためのHR_ROLE
権限をアプリケーション・ロールに付与します。
HRデモは、ポリシーの効果を示すために2人のアプリケーション・ユーザーを定義します。
IT部門のアプリケーション・ユーザーであるDAUSTIN
。このユーザーはアプリケーション・ロールEMP_ROLE
およびIT_ROLE
を持ちます。そのため、前述のレルム#1およびレルム#2にアクセスできます。つまり、IT部門の従業員レコードを表示できますが、自分の給与レコードを除いてSALARY
列は表示できません。
HR部門のアプリケーション・ユーザーであるSMAVRIS
。このユーザーはアプリケーション・ロールEMP_ROLE
およびHR_ROLE
を持ちます。そのため、前述のレルム#1およびレルム#3にアクセスできます。つまり、すべての従業員レコードを表示および更新できます。
HRデモ・スクリプトは次のことを示します。
Real Application Securityオブジェクト(アプリケーション・ユーザー、アプリケーション・ロール、ACL、セキュリティ・クラスおよびデータ・セキュリティ・ポリシー)の作成方法。
データ・セキュリティ・ポリシーを使用して表の行(レルム制約を使用)および列(列制約を使用)を保護する方法。
アプリケーション・ユーザーとしてデータベースに直接ログオンする方法(パスワードが必要)、およびReal Application Securityセッションを作成、連結、連結解除および破棄する方法。
Real Application Securityセッションでアプリケーション・ロールを有効および無効にする方法。
セキュリティHRデモのユースケースは、次の一連のPL/SQLスクリプトを実行して、コンポーネントを設定し、デモを実行します。
hrdemo_setup.sql
: 次の処理を行うことでデモのコンポーネントを設定します。
Real Application Security管理者としてデータベース・ユーザーを作成し、Real Application Security管理者として接続してコンポーネントを作成します。
データベース・ロールDB_EMP
を作成します。
ITアプリケーション・ユーザーDAUSTIN
を作成します。
HRアプリケーション・ユーザーSMAVRIS
を作成します。
アプリケーション・ロールEMP_ROLE
、IT_ROLE
およびHR_ROLE
を作成し、これらの各アプリケーション・ロールにデータベース・ロールDB_EMP
を付与します。
アプリケーション・ロールEMP_ROLE
およびIT_ROLE
をアプリケーション・ユーザーDAUSTIN
に付与します。
アプリケーション・ロールEMP_ROLE
およびHR_ROLE
をアプリケーション・ユーザーSMAVRIS
に付与します。
VIEW_SALARY
権限の作成、および権限のスコープを設定するHRPRIVS
セキュリティ・クラスの作成。
EMP_ACL
、IT_ACL
およびHR_ACL
の3つのACLを作成します。
EMP_ACL
は、SALARY
列を含む従業員自身のレコードを表示するためのSELECT
データベース権限とVIEW_SALARY
アプリケーション権限をEMP_ROLE
に付与します。
IT_ACL
は、IT_ROLE
にIT部門内の従業員レコードを表示するためのSELECT
データベース権限のみ付与し、SALARY
列へのアクセスに必要なVIEW_SALARY
権限は付与しません。
HR_ACL
は、HR_ROLE
にACLのセキュリティ・クラス内のすべての権限を意味するALL
権限を付与します。この場合、ALL
権限には、すべての従業員のレコードの表示と更新を行うためのSELECT
、INSERT
、UPDATE
およびDELETE
データベース権限と、SALARY
列を表示するためのVIEW_SALARY
アプリケーション権限の付与が含まれます。
HRデモは、次の3つのレルムと列制約を持つデータ・セキュリティ・ポリシーEMPLOYEES_DS
を作成および適用することで、HR.EMPLOYEE
表を保護します。
従業員の固有のレコード・レルム。ACL EMP_ACL
はこのレルムを制御し、SALARY
列を含むレルムにアクセスするためのEMP_ROLE
権限をアプリケーション・ロールに付与します。
IT部門レルム内のすべてのレコード。ACL IT_ACL
はこのレルムを制御し、SALARY
列を除くレルムにアクセスするためのIT_ROLE
権限をアプリケーション・ロールに付与します。
すべての従業員レコード・レルム。ACL HR_ACL
は、このレルムを制御し、SALARY
列を含むレルムにアクセスするためのHR_ROLE
権限をアプリケーション・ロールに付与します。
機密データの表示にVIEW_SALARY
権限を要求することでSALARY
列を保護する列制約。
作成されたすべてのオブジェクトを検証して、すべての構成が正しいことを確認します。
DISPATCHER
ユーザーの作成による中間層関連構成の設定、このユーザーのパスワードの設定、このDISPATCHER
ユーザーへの管理ロールxscacheadmin
およびxssessionadmin
の付与を行います。
hrdemo_run.sql
: 直接ログオンでデモを実行し、次のことを示します。
ITアプリケーション・ユーザーDAUSTIN
は、IT部門のレコードを表示できますが、自分の給与レコードのみ表示でき、自分のレコードの更新はできません。
HRアプリケーション・ユーザーSMAVRIS
は、SALARY
列のすべての給与行を含むすべてのレコードを表示でき、任意のレコードを更新できます。
hrdemo_run_sess.sql
: Real Application Securityセッションを作成および連結するデモを実行し、次のことを示します。
Real Application Security管理者として接続し、アプリケーション・ユーザーSMAVRIS
のアプリケーション・セッションを作成して連結します。
現在のユーザーをSMAVRIS
として表示します。
現在のユーザーSMAVRIS
に対して有効になっているデータベース・ロールをDB_EMP
、アプリケーション・ロールをEMP_ROLE
、HR_ROLE
およびXSPUBLIC
として表示します。
SMAVRIS
アプリケーション・ユーザーは、SALARY
列のすべての給与行を含むすべてのレコードを表示できます。
HR_ROLE
を無効にして、アプリケーション・ユーザーSMAVRIS
が自分の従業員レコードのみ表示できるように制限します。
HR_ROLE
を有効にして、SMAVRIS
アプリケーション・ユーザーが、SALARY
列のすべての給与行を含むすべてのレコードを再び表示できるようにします。
アプリケーション・セッションから連結解除します。
アプリケーション・セッションを破棄します。
hrdemo_clean.sql
: アプリケーション・ロール、アプリケーション・ユーザー、ACL、データベース・セキュリティ・ポリシー、データベース・ロール、Real Application Security管理ユーザーおよび中間層ディスパッチャ・ユーザーを削除するクリーンアップ操作を実行します。
HRDemo.java
: Javaインタフェースを使用してHRデモを実行します。
セキュリティHRデモ・コンポーネントの設定で、Real Application Securityの各コンポーネントが作成される方法を他のいくつかの重要タスクの実行とともに詳細に説明します。
Real Application Securityコンポーネントを作成する前に、まずデータベース・ユーザーをReal Application Security管理者として作成し、この管理者にdba
およびxs_session_admin
権限を付与してから、Real Application Security管理者としてデータベースに接続する必要があります。
connect sys/password as sysdba
grant dba, xs_session_admin to rasadm identified by rasadm;
connect rasadm/rasadm;
データベース・ロールDB_EMP
を作成し、このロールに必要な表権限を付与します。このロールを使用して、アプリケーション・ユーザーに必要なオブジェクト権限を付与します。
create role db_emp; grant select, insert, update, delete on hr.employees to db_emp;
一般的な従業員用のアプリケーション・ロールEMP_ROLE
を作成します。
exec xs_principal.create_role(name => 'emp_role', enabled => true);
IT部門用のアプリケーション・ロールIT_ROLE
を作成します。
exec xs_principal.create_role(name => 'it_role', enabled => true);
HR部門用のアプリケーション・ロールHR_ROLE
を作成します。
exec xs_principal.create_role(name => 'hr_role', enabled => true);
3つのアプリケーション・ロールにDB_EMP
データベース・ロールを付与して、それぞれが表へのアクセスに必要なオブジェクト権限を持つようにします。
grant db_emp to emp_role; grant db_emp to it_role; grant db_emp to hr_role;
アプリケーション・ユーザーを作成します。
アプリケーション・ユーザーDAUSTIN
を(IT部門に)作成し、ユーザー・アプリケーション・ロールEMP_ROLE
およびIT_ROLE
を付与します。
exec xs_principal.create_user(name => 'daustin', schema => 'hr'); exec sys.xs_principal.set_password('daustin', 'welcome1'); exec xs_principal.grant_roles('daustin', 'emp_role'); exec xs_principal.grant_roles('daustin', 'it_role');
アプリケーション・ユーザーSMAVRIS
を(HR部門に)作成し、ユーザー・アプリケーション・ロールEMP_ROLE
およびHR_ROLE
を付与します。
exec xs_principal.create_user(name => 'smavris', schema => 'hr'); exec sys.xs_principal.set_password('smavris', 'welcome1'); exec xs_principal.grant_roles('smavris', 'emp_role'); exec xs_principal.grant_roles('smavris', 'hr_role');
事前定義済のDMLセキュリティ・クラスに基づいてセキュリティ・クラスHRPRIVS
を作成します。HRPRIVS
には、SALARY
列へのアクセスを制御する新しい権限VIEW_SALARY
があります。
declare begin xs_security_class.create_security_class( name => 'hrprivs', parent_list => xs$name_list('sys.dml'), priv_list => xs$privilege_list(xs$privilege('view_salary'))); end; /
EMP_ACL
、IT_ACL
およびHR_ACL
の3つのACLを作成して、後で定義するデータ・セキュリティ・ポリシーの権限を付与します。
declare aces xs$ace_list := xs$ace_list(); begin aces.extend(1); -- EMP_ACL: This ACL grants EMP_ROLE the privileges to view an employee's -- own record including SALARY column. aces(1) := xs$ace_type(privilege_list => xs$name_list('select','view_salary'), principal_name => 'emp_role'); xs_acl.create_acl(name => 'emp_acl', ace_list => aces, sec_class => 'hrprivs'); -- IT_ACL: This ACL grants IT_ROLE the privilege to view the employee -- records in IT department, but it does not grant the VIEW_SALARY -- privilege that is required for access to SALARY column. aces(1) := xs$ace_type(privilege_list => xs$name_list('select'), principal_name => 'it_role'); xs_acl.create_acl(name => 'it_acl', ace_list => aces, sec_class => 'hrprivs'); -- HR_ACL: This ACL grants HR_ROLE the privileges to view and update all -- employees' records including SALARY column. aces(1):= xs$ace_type(privilege_list => xs$name_list('select', 'insert', 'update', 'delete', 'view_salary'), principal_name => 'hr_role'); xs_acl.create_acl(name => 'hr_acl', ace_list => aces, sec_class => 'hrprivs'); end; /
EMPLOYEE
表のデータ・セキュリティ・ポリシーを作成します。ポリシーは、3つのレルム制約とSALARY
列を保護する列制約を定義します。
declare realms xs$realm_constraint_list := xs$realm_constraint_list(); cols xs$column_constraint_list := xs$column_constraint_list(); begin realms.extend(3); -- Realm #1: Only the employee's own record. -- EMP_ROLE can view the realm including SALARY column. realms(1) := xs$realm_constraint_type( realm => 'email = xs_sys_context(''xs$session'',''username'')', acl_list => xs$name_list('emp_acl')); -- Realm #2: The records in the IT department. -- IT_ROLE can view the realm excluding SALARY column. realms(2) := xs$realm_constraint_type( realm => 'department_id = 60', acl_list => xs$name_list('it_acl')); -- Realm #3: All the records. -- HR_ROLE can view and update the realm including SALARY column. realms(3) := xs$realm_constraint_type( realm => '1 = 1', acl_list => xs$name_list('hr_acl')); -- Column constraint protects SALARY column by requiring VIEW_SALARY -- privilege. cols.extend(1); cols(1) := xs$column_constraint_type( column_list => xs$list('salary'), privilege => 'view_salary'); xs_data_security.create_policy( name => 'employees_ds', realm_constraint_list => realms, column_constraint_list => cols); end; /
EMPLOYEES
表にデータ・セキュリティ・ポリシーを適用します。
begin xs_data_security.apply_object_policy( policy => 'employees_ds', schema => 'hr', object =>'employees'); end; /
これらのReal Application Securityオブジェクトを作成した後で、これらを検証してすべて正しく構成されていることを確認します。
begin if (sys.xs_diag.validate_workspace()) then dbms_output.put_line('All configurations are correct.'); else dbms_output.put_line('Some configurations are incorrect.'); end if; end; / -- XS$VALIDATION_TABLE contains validation errors if any. -- Expect no rows selected. select * from xs$validation_table order by 1, 2, 3, 4;
後で使用する中間層関連の構成を設定します。これには、DISPATCHER
ユーザーおよびパスワードの作成と、このユーザーへのxscacfeadmin
およびxsessionadmin
Real Application Security管理者権限の付与が含まれます。
exec sys.xs_principal.create_user(name=>'dispatcher', schema=>'HR'); exec sys.xs_principal.set_password('dispatcher', 'welcome1'); exec sys.xs_principal.grant_roles('dispatcher', 'xscacheadmin'); exec sys.xs_principal.grant_roles('dispatcher', 'xssessionadmin');
HRデモを実行するには、まず、EMP_ROLE
およびIT_ROLE
アプリケーション・ロールのみ持つアプリケーション・ユーザーDAUSTIN
として接続します。
conn daustin/welcome1;
列値のかわりにデフォルトのインジケータ・アスタリスク(*******)を使用してセキュリティで保護された列値をSQL*Plusに表示する方法をカスタマイズします。
SET SECUREDCOL ON UNAUTH *******
問合せを実行して、アプリケーション・ユーザーDAUSTIN
はIT部門のレコードを表示できるが自分のSALARY
列のみ表示できることを示します。
select email, first_name, last_name, department_id, manager_id, salary from employees order by email; SQL> select email, first_name, last_name, department_id, manager_id, salary 2 from employees order by email; EMAIL FIRST_NAME LAST_NAME DEPARTMENT_ID MANAGER_ID SALARY ---------- --------------- --------------- ------------- ---------- ------- AHUNOLD Alexander Hunold 60 102 ******* BERNST Bruce Ernst 60 103 ******* DAUSTIN David Austin 60 103 4800 DLORENTZ Diana Lorentz 60 103 ******* VPATABAL Valli Pataballa 60 103 ******* 5 rows selected.
認可のないアプリケーション・ユーザーの列値およびセキュリティ・レベルが不明な列値のかわりにnull値を表示することで、セキュリティで保護された列値をSQL*Plusに表示する方法のデフォルト表示に設定します。
SET SECUREDCOL OFF
更新操作を実行して、アプリケーション・ユーザーがレコードの更新を認可されないことを示します。
update employees set manager_id = 102 where email = 'DAUSTIN'; SQL> update employees set manager_id = 102 where email = 'DAUSTIN'; 0 rows updated.
問合せを実行して、レコードが変更されていないことを示します。
select email, first_name, last_name, department_id, manager_id, salary from employees where email = 'DAUSTIN'; SQL> select email, first_name, last_name, department_id, manager_id, salary 2 from employees where email = 'DAUSTIN'; EMAIL FIRST_NAME LAST_NAME DEPARTMENT_ID MANAGER_ID SALARY ---------- --------------- --------------- ------------- ---------- ------- DAUSTIN David Austin 60 103 4800 1 row selected.
EMP_ROLE
とHR_ROLE
の両方のロールを持つアプリケーション・ユーザーSMAVRIS
として接続します。
conn smavris/welcome1;
問合せを実行して、アプリケーション・ユーザーSMAVRIS
がSALARY
列を含むすべてのレコードを表示できることを示します。
select email, first_name, last_name, department_id, manager_id, salary from employees where department_id = 60 or department_id = 40 order by department_id, email; SQL> select email, first_name, last_name, department_id, manager_id, salary 2 from employees where department_id = 60 or department_id = 40 3 order by department_id, email; EMAIL FIRST_NAME LAST_NAME DEPARTMENT_ID MANAGER_ID SALARY ---------- --------------- --------------- ------------- ---------- ------- SMAVRIS Susan Mavris 40 101 6500 AHUNOLD Alexander Hunold 60 102 9000 BERNST Bruce Ernst 60 103 6000 DAUSTIN David Austin 60 103 4800 DLORENTZ Diana Lorentz 60 103 4200 VPATABAL Valli Pataballa 60 103 4800 6 rows selected.
問合せを実行して、アプリケーション・ユーザーSMAVRIS
がすべてのレコードにアクセスできることを示します。
select count(*) from employees; SQL> select count(*) from employees; COUNT(*) ---------- 107 1 row selected.
レコードの更新を実行して、アプリケーション・ユーザーSMAVRIS
がレコードを更新できることを示します。
update employees set manager_id = 102 where email = 'DAUSTIN'; SQL> update employees set manager_id = 102 where email = 'DAUSTIN'; 1 row updated.
問合せを実行して、レコードが変更されていることを示します。
select email, first_name, last_name, department_id, manager_id, salary from employees where email = 'DAUSTIN'; SQL> select email, first_name, last_name, department_id, manager_id, salary 2 from employees where email = 'DAUSTIN'; EMAIL FIRST_NAME LAST_NAME DEPARTMENT_ID MANAGER_ID SALARY ---------- --------------- --------------- ------------- ---------- ------- DAUSTIN David Austin 60 102 4800 1 row selected.
レコードを更新して、元の状態に戻します。
update employees set manager_id = 103 where email = 'DAUSTIN'; SQL> update employees set manager_id = 103 where email = 'DAUSTIN'; 1 row updated.
Real Application Securityセッションに連結されているデモを実行するには、Real Application Security管理者が最初にアプリケーション・ユーザーのセッションを作成し、それに連結する必要があります。プロセスで、セッションIDを記憶する変数を作成します。
connect rasadm/rasadm; var gsessionid varchar2(32); declare sessionid raw(16); begin sys.dbms_xs_sessions.create_session('SMAVRIS', sessionid); :gsessionid := rawtohex(sessionid); sys.dbms_xs_sessions.attach_session(sessionid, null); end ; /
現在のユーザーを表示します。
select xs_sys_context('xs$session','username') from dual; SQL> select xs_sys_context('xs$session','username') from dual; XS_SYS_CONTEXT('XS$SESSION','USERNAME') -------------------------------------------------------------------------------- SMAVRIS 1 row selected.
現在のアプリケーション・ユーザーに対して有効になっているデータベースおよびアプリケーション・ロールを表示します。
select role_name from v$xs_session_roles union select role from session_roles order by 1; SQL> select role_name from v$xs_session_roles union 2 select role from session_roles order by 1; ROLE_NAME -------------------------------------------------------------------------------- DB_EMP EMP_ROLE HR_ROLE XSPUBLIC 4 rows selected.
問合せを実行して、アプリケーション・ユーザーSMAVRIS
がSALARY
列を含むすべてのレコードを表示できることを示します。
select email, first_name, last_name, department_id, manager_id, salary from employees where department_id = 60 or department_id = 40 order by department_id, email; SQL> select email, first_name, last_name, department_id, manager_id, salary 2 from employees where department_id = 60 or department_id = 40 3 order by department_id, email; EMAIL FIRST_NAME LAST_NAME DEPARTMENT_ID MANAGER_ID SALARY ---------- --------------- --------------- ------------- ---------- ------- SMAVRIS Susan Mavris 40 101 6500 AHUNOLD Alexander Hunold 60 102 9000 BERNST Bruce Ernst 60 103 6000 DAUSTIN David Austin 60 103 4800 DLORENTZ Diana Lorentz 60 103 4200 VPATABAL Valli Pataballa 60 103 4800 6 rows selected.
問合せを実行して、アプリケーション・ユーザーSMAVRIS
がすべてのレコードにアクセスできることを示します。
select count(*) from employees; SQL> select count(*) from employees; COUNT(*) ---------- 107 1 row selected.
HR_ROLE
を無効にします。これにより、アプリケーション・ユーザーSMAVRIS
は自分のレコードのみ表示できるように制限されます。
exec dbms_xs_sessions.disable_role('hr_role');
問合せの実行
select email, first_name, last_name, department_id, manager_id, salary from employees where department_id = 60 or department_id = 40 order by department_id, email; SQL> select email, first_name, last_name, department_id, manager_id, salary 2 from employees where department_id = 60 or department_id = 40 3 order by department_id, email; EMAIL FIRST_NAME LAST_NAME DEPARTMENT_ID MANAGER_ID SALARY ---------- --------------- --------------- ------------- ---------- ------- SMAVRIS Susan Mavris 40 101 6500 1 row selected.
HR_ROLE
を有効にして、ユーザーがSALARY
列を含むすべてのレコードを表示できるようにします。
exec dbms_xs_sessions.enable_role('hr_role');
問合せを実行して、アプリケーション・ユーザーがSALARY
列を含むすべてのレコードを表示できることを示します。
select email, first_name, last_name, department_id, manager_id, salary from employees where department_id = 60 or department_id = 40 order by department_id, email; SQL> -- SMAVRIS can view all the records again. SQL> select email, first_name, last_name, department_id, manager_id, salary 2 from employees where department_id = 60 or department_id = 40 3 order by department_id, email; EMAIL FIRST_NAME LAST_NAME DEPARTMENT_ID MANAGER_ID SALARY ---------- --------------- --------------- ------------- ---------- ------- SMAVRIS Susan Mavris 40 101 6500 AHUNOLD Alexander Hunold 60 102 9000 BERNST Bruce Ernst 60 103 6000 DAUSTIN David Austin 60 103 4800 DLORENTZ Diana Lorentz 60 103 4200 VPATABAL Valli Pataballa 60 103 4800 6 rows selected.
問合せを実行して、アプリケーション・ユーザーSMAVRIS
がすべてのレコードにアクセスできることを示します。
select count(*) from employees; SQL> select count(*) from employees; COUNT(*) ---------- 107 1 row selected.
アプリケーション・セッションを連結解除して破棄します。
declare sessionid raw(16); begin sessionid := hextoraw(:gsessionid); sys.dbms_xs_sessions.detach_session; sys.dbms_xs_sessions.destroy_session(sessionid); end; /
HRデモを実行した後で、クリーン・アップ・スクリプトを実行して、すべてのReal Application Securityコンポーネントを削除できます。
開始するには、Real Application Security管理者として接続し、コンポーネントの削除を開始します。
connect rasadm/rasadm;
EMPLOYEES
表からデータ・セキュリティ・ポリシーを削除します。
begin xs_data_security.remove_object_policy(policy=>'employees_ds', schema=>'hr', object=>'employees'); end; /
アプリケーション・ロールおよびアプリケーション・ユーザーを削除します。
exec sys.xs_principal.delete_principal('emp_role', xs_admin_util.cascade_option); exec sys.xs_principal.delete_principal('hr_role', xs_admin_util.cascade_option); exec sys.xs_principal.delete_principal('it_role', xs_admin_util.cascade_option); exec sys.xs_principal.delete_principal('smavris', xs_admin_util.cascade_option); exec sys.xs_principal.delete_principal('daustin', xs_admin_util.cascade_option);
セキュリティ・クラスとACLを削除します。
exec sys.xs_security_class.delete_security_class('hrprivs', xs_admin_util.cascade_option); exec sys.xs_acl.delete_acl('emp_acl', xs_admin_util.cascade_option); exec sys.xs_acl.delete_acl('it_acl', xs_admin_util.cascade_option); exec sys.xs_acl.delete_acl('hr_acl', xs_admin_util.cascade_option);
データ・セキュリティ・ポリシーを削除します。
exec sys.xs_data_security.delete_policy('employees_ds', xs_admin_util.cascade_option);
データベース・ロールを削除します。
drop role db_emp;
Real Application Security管理者を削除します。
connect sys/knl_test7 as sysdba drop user rasadm;
中間層で使用されているDISPATCHER
ユーザーを削除します。
exec sys.xs_principal.delete_principal('dispatcher', xs_admin_util.cascade_option);
JavaインタフェースでのセキュリティHRデモの実行により戻される2つの問合せの説明は、人事管理のユースケース: Javaでの実装の「出力」の項を参照してください。
グラフィカル・ユーザー・インタフェースを使用してReal Application Securityデータ・セキュリティ・ポリシーを作成するRASADMの使用方法を説明します。
Oracle Database Real Application Security管理(RASADM)では、グラフィカル・ユーザー・インタフェースを使用してReal Application Securityデータ・セキュリティ・ポリシーを作成できます。RASADMのインストールと構成の詳細は、Oracle Database Real Application Security管理を参照してください。
この節では、以下のトピックについて説明します。
RASADMアプリケーションの実行方法について説明します。
次のURLは単なる例で、実際のURLは、現在のApplication Express構成に基づいています。正しいURLを指定してください。次に、インストール時に指定したのと同じパスワードを使用してRASADM管理者としてログインします。
RASADMアプリケーションを実行するには、ブラウザで次のようなURL (https://www.example.com:8080/apex/f?p=rasadm)を入力します。
HTTPSをオンにすることをお薦めします。
インストール時に指定したパスワードを使用して、RASADM admin
ユーザー、またはインストール後に作成された任意のユーザーとして次の画面のようにしてログインできます。
関連情報
詳細は、次のリソースを参照してください。
Real Application Securityディスカッション・フォーラム: https://community.oracle.com/community/database/database_security/database_security_-_general
Real Application Securityドキュメント: 『Oracle Database Real Application Security管理』
設計フェーズで、データ・アクセスの制御にアプリケーション権限が必要なアプリケーションによって実行されるすべてのタスクを識別します。
設計フェーズでは、データ・アクセスの制御にアプリケーション権限が必要なアプリケーションによって実行されるすべてのタスクを識別します。たとえば、アプリケーション・ポリシー設計者は設計フェーズで次の項目を識別する必要があります。
アクセス制御が必要な一連のアプリケーション・レベル操作。
アプリケーション・レベル操作の中でアクセスできる表やビューの行と列。
それらの操作を実行できる一連のアクターまたはプリンシパル(ユーザーおよびロール)。
表またはビューの行を特定するランタイム・アプリケーション・セッション属性。これらの属性名は、認可する行を選択する述語内で使用され、属性の値はアプリケーションの実行時に設定されます。
RASADMを使用してデータ・セキュリティ・ポリシーを開発するには、次の基本手順に従う必要があります。
開発フェーズでは、RASADM管理者として、次の手順に従ってRASADMを使用してデータ・セキュリティ・ポリシーを開発します。
対応するアプリケーション・ユーザーおよびロールを作成します。外部ディレクトリ・サーバーを使用している場合は、そのディレクトリ・サーバーでアプリケーション・ユーザーおよびロールまたはユーザー・グループを作成します。次の手順に従って、これらのプリンシパルをデータベース固有になるように作成します。
アプリケーション・ロールを作成し、必要な場合はアプリケーション・ロールをアプリケーション・ロールに付与します。アプリケーション・ロールの作成に関するトピックを参照してください。
アプリケーション・ユーザーを作成し、アプリケーション・ロールをアプリケーション・ユーザーに付与します。アプリケーション・ユーザーの作成に関するトピックを参照してください。
外部ストアのプリンシパルが使用されるときは、ユーザーとロールをフェッチするようにディレクトリ・サーバーを構成します。構成に関するトピックを参照してください。
外部ディレクトリ・サーバーのユーザーとロールの場合は、ディレクトリ・サーバーでRASADMを使用するためにパラメータの設定を管理します。設定の管理に関するトピックを参照してください。
アプリケーションのセキュリティ・ポリシーの開発に使用する予定の権限クラスをそれぞれ作成します。各権限クラスは1つ以上の適切な権限で構成されます。これらの権限は管理者が定義し、ACLで参照できます。アプリケーション・ユーザーおよびアプリケーション・ロールに付与することもできます。各権限クラスは、ACLを介して、データ・セキュリティ・ポリシーの必須アプリケーション・レベル操作を認可します。アプリケーション権限クラスの作成に関するトピックを参照してください。
異なるアプリケーション・セッションで使用できる1つ以上のセッション・ネームスペースを作成します。このとき、セッション・ネームスペースに対して、一連のプロパティ(アプリケーション属性)とそれに関連するアクセス制御ポリシーまたはACL (リストから選択または作成)を定義します。ネームスペースの作成に関するトピックを参照してください。
各データ・レルムとACLを関連付けることで、データ・セキュリティ・ポリシーを作成します。必要に応じて、データ・レルム認可と列認可の両方を作成します。このプロセスは、次の4つの部分で構成されます。
ポリシー情報 - 保護対象のオブジェクトと、それを保護する権限クラスを選択し、ポリシー名を指定してポリシー・スキーマを選択します。データ・セキュリティ・ポリシーの作成に関するトピックの手順3を参照してください。
列レベル認可 - 保護対象の列の名前を選択し、その列にアクセスするために付与する権限を選択します(この列には手順3aで選択した権限クラスが関連付けられています)。データ・セキュリティ・ポリシーの作成に関するトピックの手順4を参照してください。
データ・レルム認可 - 保護対象のデータ・レルムを表すSQL述語を作成し、それぞれをデータ・レルム付与リストに追加します。その後、データ・レルムを保護するACLを選択するか作成します。次に、権限付与リストに追加する権限付与を作成します。このリストには、各プリンシパルと、それぞれの権限が許可されているかいないか(該当する権限を選択して設定)が含まれます。データ・セキュリティ・ポリシーの作成に関するトピックの手順5を参照してください。
ポリシーの適用 - 作成しているデータ・セキュリティ・ポリシーの適用、削除、有効化または無効化を行うことができます。また、特定の適用オプションを指定するように選択できます。これによって、表またはビューの所有者によるデータ・セキュリティ・ポリシーのバイパスを許可したり、このポリシーに対して文のタイプを強制するかどうかを設定したりできます。データ・セキュリティ・ポリシーの作成に関するトピックの手順6を参照してください。
RASADMを使用してHRデモ・アプリケーションを作成する方法について説明します。
まず、RASADMアプリケーションの実行についておよび次の画面で説明したように、RASADMアプリケーションを実行して、ADMIN
ユーザーとしてログインする必要があります。
次のタスクを実行します。
アプリケーション・ロールおよび特にデータベースDB_EMPロールを作成する方法を説明します。
次のコード・スニペットに示すように、SQL*Plusを使用してデータベースのDB_EMP
ロールを作成し、HR.EMPLOYEES
のSELECT
、INSERT
、UPDATE
およびDELETE
権限をこのロールに付与する必要があります。
-- Create database role DB_EMP and grant necessary table privileges. -- This role will be used to grant the required object privileges to -- application users. CREATE ROLE DB_EMP; GRANT SELECT, INSERT, UPDATE, DELETE ON HR.EMPLOYEES TO DB_EMP;
詳細は、hrdemo_setup.sqlを参照してください。
このタスクでは、アプリケーション・ロール、EMP_ROLE
、IT_ROLE
およびHR_ROLE
を作成してから、各アプリケーション・ロールを有効化します。
このタスクは、次の2つの方法のいずれかで行うことができます。
RASADMを使用してこれらのアプリケーション・ロールを作成します。
外部ディレクトリ・サーバーを使用して、そのディレクトリ・サーバーにアプリケーション・ロールを作成します。
どちらのケースでも、HRデモの場合には次のアプリケーション・ロールが作成されます。
EMP_ROLE
IT_ROLE
HR_ROLE
最後に、次のコード・スニペットに示すように、SQL*Plusを使用して、これらのアプリケーション・ロールそれぞれにデータベースのDB_EMP
ロールを付与します。
-- Grant DB_EMP to the three application roles, so they have the required -- object privilege to access the table. GRANT DB_EMP TO EMP_ROLE; GRANT DB_EMP TO IT_ROLE; GRANT DB_EMP TO HR_ROLE;
詳細は、hrdemo_setup.sqlを参照してください。
RASADMを使用したアプリケーション・ロールの作成を参照してください
ディレクトリ・サーバーで作成されたロールを使用したアプリケーション・ロールの作成について説明します。
RASADMを使用したアプリケーション・ロールの作成について説明します。
アプリケーション・ロール
・ページで次のフィールドに情報を入力します。EMP_ROLE
を入力します。「ROLE」
を選択します。「はい」
を選択します。EMP_ROLE
アプリケーション・ロールを作成します。EMP_ROLE
をクリックして、このロールの編集ビューが次のスクリーン・ショットに示すとおりか確認します。IT_ROLE
およびHR_ROLE
アプリケーション・ロールを作成します。ここでも、これらのアプリケーション・ロール両方に対して、付与するアプリケーション・ロールはありません。アプリケーション・ユーザーの作成およびそのユーザーへのロールの付与について説明します。
このタスクでは、各アプリケーション・ユーザーを作成して、対応するアプリケーション・ロールを各アプリケーション・ユーザーに付与します。
このタスクは、次の2つの方法のいずれかで行うことができます。
RASADMを使用して、アプリケーション・ユーザーDAUSTIN
およびSMAVRIS
を作成します。
次の付与を実行します。
アプリケーション・ロールEMP_ROLE
およびIT_ROLE
をDAUSTIN
に付与します。
アプリケーション・ロールEMP_ROLE
およびHR_ROLE
をSMAVRIS
に付与します。
外部ディレクトリ・サーバーを使用して、そのディレクトリ・サーバーでアプリケーション・ユーザーまたはアプリケーション・ユーザー・グループを作成します。
どちらのケースでも、このHRデモに対して次のアプリケーション・ユーザーが作成されます。
DAUSTIN
SMAVRIS
次の付与を実行します。
アプリケーション・ロールEMP_ROLE
をユーザーDAUSTIN
およびSMAVRIS
に付与します。
アプリケーション・ロールIT_ROLE
をユーザーDAUSTIN
に付与します。
アプリケーション・ロールHR_ROLE
をユーザーSMAVRIS
に付与します。
RASADMを使用したアプリケーション・ユーザーの作成を参照してください。
RASADMを使用したアプリケーション・ユーザーの作成について説明します。
ユーザーの管理
ページで、次のフィールドに情報を入力します。DAUSTIN.
と入力します「HR」
を選択します。「はい」
を選択します。「アクティブ」
を選択します。daustin
に付与するアプリケーション・ロールを選択します。^をクリックしEMP_ROLE
を選択して、ロール:フィールドに情報を入力します。IT_ROLE
をDAUSTIN
に付与します。DAUSTIN
を作成します。DAUSTIN
をクリックして、このユーザーの編集ビューが次のスクリーン・ショットに示すとおりか確認します。EMP_ROLE
およびHR_ROLE
をアプリケーション・ユーザーSMAVRIS
に付与します。データ・セキュリティ・ポリシーを作成するためのプロセス・フローについて説明します。
このタスクでは、HRDEMOデータ・セキュリティ・ポリシーを作成します。内容は次のとおりです。
ポリシーの情報を入力します。
HRPRIVS
権限クラスとVIEW_SALARY
権限を作成します。
SALARY
列認可を作成し、HRPRIVS
権限クラスを選択して、この列に適用します。
3つのデータ・レルムで構成されるデータ・レルム認可を作成します。各レルムは従業員アクセス、ITアクセスおよびHRアクセスに対応し、それぞれにACLが関連付けられています(ACLには、各プリンシパルによる行アクセスを制御するように定義された権限付与が含まれます)。
HRDEMO
データ・セキュリティ・ポリシーを有効化して適用します。
この項には次のトピックが含まれます:
RASADMアプリケーションを使用したデータ・セキュリティ・ポリシー情報の入力について説明します。