プライマリ・コンテンツに移動
Oracle® Database Real Application Security管理者および開発者ガイド
12cリリース1 (12.1)
B71274-08
目次へ移動
目次
索引へ移動
索引

前
次

2 アプリケーション・ユーザーおよびアプリケーション・ロールの構成

アプリケーション・ユーザーの構成について

アプリケーション・ユーザー・アカウントについて

従来のデータベース・ユーザーは、データベース・スキーマを所有し、それらのスキーマに対して通常の重量データベース・セッションを作成できます。アプリケーション・ユーザーは、データベース・スキーマを所有しませんが、データベースでアプリケーション・セッションを作成できます。

直接ログインを通じてアプリケーション・ユーザーをデータベースに連結または接続して、アプリケーション・セッションを使用できます。

この項の内容は次のとおりです: アプリケーション・ユーザー・アカウントを作成する一般的な手順

アプリケーション・ユーザー・アカウントを作成する一般的な手順

アプリケーション・ユーザー・アカウントを作成する一般的な手順は、次のとおりです。

  1. セキュリティ・マネージャsec_mgrを次のように作成し、このユーザーにdbaおよびxs_session_admin権限を付与します。セキュリティ・マネージャとしてユーザーやロールを作成したり、パスワードの設定やセッションの管理ができるようになります。
    sqlplus /nolog
    SQL> connect sys/password as sysdba
    SQL> grant dba, xs_session_admin to sec_mgr identified by password;
  2. CREATE USERシステム権限を持つユーザーとしてSQL*Plusにログインします。
    sqlplus sec_mgr
    Enter password: password
    Connected. 

    XS_PRINCIPALパッケージの詳細は、XS_PRINCIPALパッケージを参照し、特にCREATE_USERプロシージャを確認してください。

    アプリケーション・ユーザーおよびロールを作成、変更または削除するために必要な権限を持っている必要があります。これらの権限は、データベース・ユーザーおよびロールを作成、変更または削除するために必要な同じシステム権限によって制御されます。これらを含むSQL文の詳細は、Oracle Database SQL言語リファレンスを参照してください。

  3. XS_PRINCIPAL.CREATE_USERプロシージャでアプリケーション・ユーザーを作成します。
その他のタスク

アプリケーション・ユーザー・アカウントを作成したら、アプリケーション・ユーザーの権限を提供するロールをそのアカウントに付与できます。詳細は、既存のアプリケーション・ユーザーへのアプリケーション・ロールの付与を参照してください。

単純なアプリケーション・ユーザー・アカウントの作成

注意:

SQL*Plusでは、小文字と特殊文字で大/小文字の区別が問題となるため、次のガイドラインに従ってください。

  • 名前に小文字または特殊文字が含まれるアプリケーション・ユーザーは、アカウント名を二重引用符で囲んでSQL*Plusに接続する必要があります。

    たとえば、次のようになります。

    CONNECT "lwuser1"
    Enter password: password
    Connected.
    
  • 小文字または特殊文字が含まれるアプリケーション・ロールの名前は、二重引用符で囲んでSQL*Plusに入力する必要があります。

    たとえば、次のようになります。

    GRANT cust_role TO "app_regular_role";

単純なアプリケーション・ユーザー・アカウントを作成する場合、スキーマ引数には、未修飾の名前を解決するために使用するスキーマ名を指定します。これは、権限の付与とは無関係で、名前解決目的のみに使用されます。スキーマ名を指定しない場合、XS$NULLが使用されます。

単純なアプリケーション・ユーザー・アカウントを作成するには、次の手順を実行します。

  1. ログイン

    たとえば、sec_mgrCREATE USER権限を持っている場合、次のようにログインします。

    sqlplus sec_mgr
    Enter password: password
    Connected. 
    
  2. アプリケーション・ユーザー・アカウントを作成します。

    たとえば、次のようになります。

    BEGIN
      SYS.XS_PRINCIPAL.CREATE_USER('lwuser1');
    END;
    /
    

    DBAロールを持つユーザーは、次のようにDBA_XS_USERSデータ・ディクショナリ・ビューを問い合せて、ユーザーの作成を確認できます。詳細は、DBA_XS_USERSを参照してください。

    SELECT NAME FROM DBA_XS_USERS;
     
    NAME
    --------------------------
    XSGUEST
    LWUSER1
    

    この出力には、既存のアプリケーション・ユーザー・アカウントが表示されます。XSGUESTユーザー・アカウントは、すでに存在するか、事前定義されているシステム定義のユーザー・アカウントです。

    XS_PRINCIPAL.CREATE_USERプロシージャの詳細は、CREATE_USERプロシージャを参照してください。

    XS_PRINCIPAL.DELETE_PRINCIPALプロシージャを使用してアプリケーション・ユーザー・アカウントを削除できます(DELETE_PRINCIPALプロシージャを参照)。

直接ログイン・アプリケーション・ユーザー・アカウントの作成について

この項の内容は、次のとおりです。

直接ログイン・アプリケーション・ユーザー・アカウントの作成

アプリケーション・ユーザー・アカウントを使用してデータベースに直接ログインできます。これは、SSOやWebインタフェースを通じてログインせずに、SQL*Plusに直接ログインするような機能を実行する必要があるユーザーに役立ちます。直接ログイン・ユーザーには、パスワードが必要です。

直接ログイン・アプリケーション・ユーザー・アカウントを作成する手順

直接ログイン・アプリケーション・ユーザー・アカウントを作成するには、次の手順を実行します。

  1. アプリケーション・ユーザー・アカウントを作成する一般的な手順の説明に従ってログインします。
    sqlplus sec_mgr
    Enter password: password
    Connected. 
  2. アプリケーション・ユーザー・アカウントを作成します。

    たとえば、デフォルト・データベース・スキーマがHRであるアプリケーション・ユーザー・アカウントlwuser1を作成するには、次のようにします。

    BEGIN
      SYS.XS_PRINCIPAL.CREATE_USER
          (name       => 'lwuser1',
           schema     => 'HR');
    END;/
    

    注意:

    スキーマが存在しない場合、直接ログインは失敗します。

    このReal Applicationユーザーが問合せで未修飾のデータベース・オブジェクトの名前解決のためにデータベースに直接接続すると、HRスキーマがデフォルト・スキーマとして使用されます。たとえば、次のようになります。

    SELECT COUNT(*) FROM EMPLOYEES;
    
  3. アプリケーション・ユーザー・アカウントのパスワードを作成します。

    たとえば、次のようになります。

    BEGIN
          SYS.XS_PRINCIPAL.SET_PASSWORD('lwuser1', 'password');
    END;
    /
    

    SET_PASSWORDプロシージャの説明に従ってパスワードを設定します。SET_PASSWORDプロシージャを使用すると、パスワードおよびtypeパラメータに基づいて検証機能が自動的に作成され、その検証機能とtypeパラメータの値がディクショナリ表に挿入されます。

    注意:

    passwordはセキュアなパスワードに置き換えてください。パスワードのガイドラインの詳細は、Oracle Databaseセキュリティ・ガイドを参照してください。

  4. profというプロファイルを作成し、このプロファイルをアプリケーション・ユーザー・アカウントに割り当てます。

    たとえば、次のようになります。

    CREATE PROFILE prof LIMIT PASSWORD_REUSE_TIME 1/1440 PASSWORD_REUSE_MAX 3 PASSWORD_VERIFY_FUNCTION Verify_Pass;
    
    BEGIN
      SYS.XS_PRINCIPAL.SET_PROFILE('lwuser1','prof');
    END;
    

    このプロファイルを割り当てるユーザーは、ALTER_USER権限を持っている必要があります。詳細は、SET_PROFILEプロシージャを参照してください。

  5. データベースへのアクセスを許可するためにロールXSCONNECTをユーザーに付与します。
    たとえば、次のようになります。
    BEGIN
          SYS.XS_PRINCIPAL.GRANT_ROLES('lwuser1', 'XSCONNECT');
    END;
    /
    

次に、アプリケーション・ユーザー・アカウントに権限を割り当てます。プリンシパルへのアプリケーション権限の付与についてに移動してください。

その後、ユーザーは次のようにデータベースに接続できます。たとえば、次のようになります。

CONNECT lwuser1
Password: password

直接アプリケーション・ユーザー・アカウントのためのパスワード検証の設定

オプションで、このパスワードにパスワード検証(ハッシュ変換パスワード)を設定することで、管理者は、パスワードではなく検証機能の情報付きでReal Application Securityにユーザーを移行できます。パスワード検証を設定しない場合のデフォルトのハッシュ・アルゴリズムは、XS_SHA512です。詳細は、SET_VERIFIERプロシージャを参照してください。

例2-1では、XS_PRINCIPAL.SET_VERIFIERプロシージャを使用して、パスワード検証を値6DFF060084ECE67Fに設定しています(アプリケーション・ユーザー・アカウントLWUSER1にハッシュ・アルゴリズムXS_SHA512を使用します)。

例2-1 Hash Algorithm XS_SHA512を使用したパスワード・ベリファイア

sqlplus sec_mgr
Enter password: password
Connected. 
BEGIN
SYS.XS_PRINCIPAL.SET_VERIFIER('lwuser1',
 '6DFF060084ECE67F',
  XS_PRINCIPAL.XS_SHA512);
END;
/

SQL*Plus PASSWORDコマンドを使用したアプリケーション・ユーザーのパスワードのリセット

セキュリティ管理者sec_mgrは、dbaおよびxs_session_admin権限を持っています。例2-2に、セキュリティ管理者がSQL*Plus PASSWORDコマンドを使用してユーザーlwuser2のパスワードをリセットする方法を示します。

ただし、ユーザーlwuser2として、明示的に連結されているセッション(JavaのATTACH_SESSIONプロシージャまたはattachSession()メソッドを使用して連結されたセッション)から呼び出されたSQL*Plus PASSWORDコマンドを使用してセルフ・パスワード変更を行う場合、セッションにはALTER_USER権限が必要で、PASSWORDコマンドにユーザー名を指定する必要があります。

例2-3に、セッションに明示的に連結されているアプリケーション・ユーザーlwuser2が、セルフ・パスワード変更を実行し、ユーザー・セッションにALTER USER権限がないため、この操作に失敗したことを示します。

例2-4に、ALTER USER権限を持つセッションに明示的に連結されているアプリケーション・ユーザーlwuser2が、セルフ・パスワード変更を実行できることを示します。ユーザーのセルフ・パスワード変更は成功します。

ユーザーのセッションにALTER USER権限がある場合、任意のアプリケーション・ユーザー・セッション(明示的に連結されている直接ログオン・セッションを含む)またはデータベース・ユーザー・セッション(そのセッションにALTER USER権限がある場合)から任意のアプリケーション・ユーザーのパスワードをリセットできます。他のアプリケーション・ユーザーのパスワードを変更する場合、PASSWORDコマンドは旧パスワードの入力を求めません。

アプリケーション・ユーザーは、SET_PASSWORDプロシージャを使用して自分のパスワードを変更することもできます。SET_PASSWORDプロシージャでは、常にセルフ・パスワード変更用の旧パスワードが求められます。

例2-2 セッションに明示的に連結されていない場合に、DBAがパスワード変更操作でユーザーlwuser2のパスワードをリセットする

sqlplus sec_mgr
Enter password: password
Connected. 
SQL> BEGIN
  2 SYS.XS_PRINCIPAL.CREATE_USER('lwuser2');
  3 END;
  4/

PL/SQL orocedure successfully completed.

SQL> PASSWORD lwuser2
Changing password for lwuser2
New password: password
Retype new password: password
Password changed

例2-3 セッションに明示的に連結されている場合に、ユーザーlwuser2はセルフ・パスワード変更を実行しましたが、セッションにALTER USER権限がなかったため、操作に失敗しました

sqlplus sec_mgr
Enter password: password
Connected. 
SQL> DECLARE
  2 SESSIONID RAW(16);
  3 BEGIN
  4 SYS.DBMS_XS_SESSIONS.CREATE_SESSION('lwuser2', sessionid);
  5 SYS.DBMS_XS_SESSIONS.ATTACH_SESSION(sessionid);
  6 END;
  7 /
 
PL/SQL procedure successfully completed.

SQL> CONNECT lwuser2
Enter password: password
Connected.
SQL> SELECT SYS.XS_SYS_CONTEXT('XS$SESSION','USERNAME') FROM DUAL;
 
XS_SYS_CONTEXT('XS$SESSION','USERNAME')
--------------------------------------------------------------------------------
LWUSER2
 
SQL> PASSWORD lwuser2
Changing password for lwuser2

Old password: password
New password: password
Retype new password: password
ERROR:
ORA-01031: insufficient privileges


Password unchanged

例2-4 セッションに明示的に連結されており、ユーザーlwuser2のセッションにALTER USER権限がある場合、セルフ・パスワード変更は成功します

sqlplus sec_mgr
Enter password: password
Connected. 
SQL> CREATE ROLE pwdchg;
 
Role created.
 
SQL> GRANT ALTER USER TO pwdchg;
 
Grant succeeded.
 
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_ROLE(NAME => 'resetpwd_role', ENABLED => TRUE);
 
PL/SQL procedure successfully completed.
 
SQL> GRANT pwdchg TO resetpwd_role;
 
Grant succeeded.
 
SQL>  EXEC SYS.XS_PRINCIPAL.GRANT_ROLES('lwuser2','resetpwd_role');
 
PL/SQL procedure successfully completed.
 
SQL> CONNECT lwuser2
Enter password: password
Connected.

SQL> SELECT SYS.XS_SYS_CONTEXT('XS$SESSION','USERNAME') FROM DUAL;
 
SYS.XS_SYS_CONTEXT('XS$SESSION','USERNAME')
--------------------------------------------------------------------------------
LWUSER2

SQL> PASSWORD lwuser2
Changing password for lwuser2
Old password: password
New password: password
Retype new password: password
Password changed
SQL>

アプリケーション・ユーザーの切替えの構成

XS_PRINCIPAL.ADD_PROXY_USERプロシージャを使用すると、アプリケーション・ユーザーを追加して別のアプリケーション・ユーザーを代理し、そのアプリケーション・ユーザーのアプリケーション・ロールを継承できます。プロキシ・ユーザーを追加している場合、DBMS_XS_SESSIONS.SWITCH_USERプロシージャを使用してセッションでアプリケーション・ユーザーを切り替えることができます。

app_user1がアプリケーション・ロールrole1およびrole2を持っているとします。例2-5では、app_user1のアプリケーション・ロールrole1およびrole2app_user2に代理取得させています。add_proxy_user('app_user1', 'app_user2', pxy_roles)というコールによって、app_user2app_user1に切り替わり、app_user1のロールであるrole1およびrole2を継承できます。これによって、app_user2にロールは付与されません。

DBA_XS_ROLE_GRANTSビューの問合せによって、ロールroles1およびroles2が付与されているのはapp_user1のみでapp_user2には付与されていないこと、およびapp_user2はプロキシ・ユーザーとしてのみこれらのロールを引き受けることが示されます。

DBA_XS_PROXY_ROLESビューの問合せによって、app_user2はプロキシ・ユーザーで、app_user1がターゲット・ユーザーであり、ターゲット・ロールはrole1およびrole2であることが示されます。

DBA_XS_SESSIONSビューの問合せによって、app_user2がこのセッションのプロキシ・ユーザーであることも示されます。

DBAロールを持つアプリケーション・ユーザーは、例2-6に示すとおり、app_user2のセッションを作成してアプリケーション・ユーザーapp_user1に切り替えることができます。

この例では、最初にapp_user2でセッションを作成し、それに連結しています。次に、app_user2app_user1に切り替え、app_user1のロールであるrole1およびrole2を継承しています。

DBA_XS_ROLE_GRANTSビューの問合せによって、ロールroles1およびroles2が付与されているのはapp_user1のみでapp_user2には付与されていないこと、およびapp_user2はプロキシ・ユーザーとしてのみこれらのロールを引き受けることが示されます。

DBA_XS_SESSION_ROLESビューの問合せによって、ロールrole1およびrole2は、app_user1app_user2に切り替えられた同じセッションIDに関連付けられていることが示されます。

DBA_XS_SESSIONSビューの問合せによって、app_user2がこのセッションのプロキシ・ユーザーであることも示されます。

例2-5 プロキシ・アプリケーション・ユーザーの構成

sqlplus sec_mgr
Enter password: password
Connected. 
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_ROLE('role1',true);
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_ROLE('role2',true);
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_USER('app_user1','HR');
SQL> EXEC SYS.XS_PRINCIPAL.SET_PASSWORD('app_user1', 'password');
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_USER('app_user2','HR');
SQL> EXEC SYS.XS_PRINCIPAL.SET_PASSWORD('app_user2', 'password');
SQL> EXEC SYS.XS_PRINCIPAL.GRANT_ROLES('app_user1', 'role1');
SQL> EXEC SYS.XS_PRINCIPAL.GRANT_ROLES('app_user1', 'role2');
DECLARE
  pxy_roles XS$NAME_LIST; 
begin
  pxy_roles := XS$NAME_LIST('role1','role2');
  sys.xs_principal.add_proxy_user(target_user => 'app_user1', proxy_user => 'app_user2', target_roles => pxy_roles);
end;
/
SQL> SELECT grantee, granted_role FROM DBA_XS_ROLE_GRANTS;
SQL> SELECT proxy_user, target_user, target_role FROM DBA_XS_PROXY_ROLES;
SQL> SELECT user_name, sessionid, proxy_user FROM DBA_XS_SESSIONS;

例2-6 セッションの作成とアプリケーション・ユーザーの切替え

sqlplus sec_mgr
Enter password: password
Connected. 
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_USER('app_user1','HR');
SQL> EXEC SYS.XS_PRINCIPAL.SET_PASSWORD('app_user1', 'password');
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_USER('app_user2','HR');
SQL> EXEC SYS.XS_PRINCIPAL.SET_PASSWORD('app_user2', 'password');
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_ROLE('role1',true);
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_ROLE('role2',true);
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_USER('app_user1','HR');
SQL> EXEC SYS.XS_PRINCIPAL.SET_PASSWORD('app_user1', 'password');
SQL> EXEC SYS.XS_PRINCIPAL.CREATE_USER('app_user2','HR');
SQL> EXEC SYS.XS_PRINCIPAL.SET_PASSWORD('app_user2', 'password');
SQL> EXEC SYS.XS_PRINCIPAL.GRANT_ROLES('app_user1', 'role1');
SQL> EXEC SYS.XS_PRINCIPAL.GRANT_ROLES('app_user1', 'role2');
declare
  sessionid raw(16);
begin
  sys.dbms_xs_sessions.create_session('app_user2', sessionid);
  sys.dbms_xs_sessions.attach_session(sessionid);
  sys.dbms_xs_sessions.switch_user('app_user1');
end;
/
SQL> SELECT grantee, granted_role FROM DBA_XS_ROLE_GRANTS;
SQL> SELECT sessionid, role FROM DBA_XS_SESSION_ROLES;
SQL> SELECT user_name, sessionid, proxy_user FROM DBA_XS_SESSIONS;

アプリケーション・ユーザーの検証

管理構成の変更後は、必ずReal Application Securityオブジェクトを検証することをお薦めします。XS_DIAGパッケージには、これらの変更がReal Application Securityオブジェクト間の複雑な関係に悪影響を与えないようにする検証APIのセットが含まれます。アプリケーション・ユーザー・アカウントを検証するには、XS_DIAG.VALIDATE_PRINCIPALファンクションを使用します。コール元は、このパッケージに対する実行者権限を持っており、XS_DIAGパッケージを実行するためのADMIN_ANY_SEC_SECURITY権限を持っている必要があります。

詳細は、VALIDATE_PRINCIPALファンクションを参照してください。

アプリケーション・ロールの構成について

この項の内容は次のとおりです。

アプリケーション・ロールについて

アプリケーション・ロールは、アプリケーション・ユーザーまたは別のアプリケーション・ロールにのみ付与できるロールです。アプリケーション・ロールは、アプリケーションにアクセスするために、ACL内で識別される共通のアプリケーション権限を持つ必要のあるアプリケーション・ユーザーをグループ化する手段です。XS_PRINCIPAL.CREATE_ROLEプロシージャでは、標準アプリケーション・ロールを作成できます。XS_PRINCIPAL.CREATE_DYNAMIC_ROLEプロシージャでは、動的アプリケーション・ロール(アプリケーション・ロールの一種)を作成できます。

アプリケーション・ロールは、概念的にはエンタープライズ・ロールと似ています。エンタープライズ・ロールは、エンタープライズ・ユーザーにのみ付与することが可能で、その権限付与はデータベースの外部で発生します。同様に、アプリケーション・ロールは、アプリケーション・ユーザーまたはアプリケーション・ロールにのみ付与することが可能で、その権限付与は、データベースの標準的な権限付与メカニズムの外部で発生します。動的ロールは、アプリケーション・ユーザーまたは別のアプリケーション・ロールには付与できず、連結セッション・コールのパラメータとして、アプリケーション・セッションでのみ有効にできます(動的アプリケーション・ロールを参照)。

関連項目:

  • SQLの詳細は、Oracle Database SQL言語リファレンスを参照してください。

  • PL/SQL APIの詳細は、Oracle Database PL/SQL言語リファレンスを参照してください。

標準および動的アプリケーション・ロール

Real Application Securityでは、標準アプリケーション・ロールと動的アプリケーション・ロールを使用できます。

標準アプリケーション・ロール

標準アプリケーション・ロールは、アプリケーション・ユーザーまたは別のアプリケーション・ロール(標準または動的)に付与できるアプリケーション・ロールです。標準アプリケーション・ロールはデフォルトで有効にするかどうかを指定できます。

動的アプリケーション・ロール

動的アプリケーション・ロールは、ユーザーがSSLを使用してログオンする場合や、特定の期間ログオンする場合など、一定の状況下でのみ有効になるアプリケーション・ロールです。動的アプリケーション・ロールは、平日に接続を行うすべてのアプリケーション・ユーザーに付与されるアプリケーション権限がある場合などに使用できます。一定の基準に一致すると、アプリケーションによってこれらのアプリケーション・ロールが有効化されます。

動的アプリケーション・ロールを有効にする基準は、アプリケーションによって決定されますが、この基準はアプリケーションのリクエストで、アプリケーションまたはデータベースによって評価されます。

  • アプリケーションが基準を評価する場合

    アプリケーションが基準を評価し、アプリケーション・ロールがそれに一致する場合、アプリケーションは、アプリケーション・セッションに連結されていれば、アプリケーション・ユーザーの動的アプリケーション・ロールを有効にできます。アプリケーションがアプリケーション・セッションから連結解除すると、動的アプリケーション・ロールは自動的に無効になります。

    セキュリティ上の理由から、セッション中は動的アプリケーション・ロールを無効にできません。これは、それらが拒否的なアプリケーション権限を推測させる可能性があるため、特に重要です。

  • データベースが基準を評価する場合

    データベースが基準を評価し、アプリケーション・ロールがそれに一致する場合、データベースは、アプリケーション・ユーザーのアプリケーション・ロールを有効にできます。データベースは、2つのタイプのタイムアウト(セッションが最後にアクセスされた時点からのタイムアウトと、セッションが最後に認証された時点からのタイムアウト)に基づいて、動的アプリケーション・ロールを無効にできます。Oracle Databaseは、セッションが最初に連結されたときにこれらのタイムアウトを確認します。

前もってユーザーに動的アプリケーション・ロールを正式に付与する必要はありません。標準の有効化および無効化APIを通じて動的アプリケーション・ロールを有効または無効にする方法はありません。動的アプリケーション・ロールを他のアプリケーション・ロールに付与することはできませんが、他のアプリケーション・ロールを動的ロールに付与することは可能です。

アプリケーション・ロールの構成について

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

標準アプリケーション・ロールを作成するには、CREATE ROLEシステム権限を持つユーザーsec_mgrとしてSQL*Plusにログインし、XS_PRINCIPAL.CREATE_ROLEプロシージャを使用します。

例2-7に、app_regular_roleという標準アプリケーション・ロールを作成する方法を示します。start_dateおよびend_dateパラメータで、このアプリケーション・ロールのアクティブな開始時間と終了時間を指定します。enableパラメータはTRUEに設定します。

標準アプリケーション・ロールを作成したら、それを1つ以上のアプリケーション・ユーザーまたはアプリケーション・ロールに付与できます。次の項を参照してください。

アプリケーション・ユーザーへのアプリケーション・ロールの付与について

例2-7 標準アプリケーション・ロールの作成

sqlplus sec_mgr
Enter password: password
Connected. 
DECLARE 
  st_date TIMESTAMP WITH TIME ZONE;
  ed_date TIMESTAMP WITH TIME ZONE;
BEGIN
  st_date := SYSTIMESTAMP;
  ed_date := TO_TIMESTAMP_TZ('2013-06-18 11:00:00 -5:00','YYYY-MM-DD HH:MI:SS');
  SYS.XS_PRINCIPAL.CREATE_ROLE 
      (name        => 'app_regular_role',
      enabled      =>  TRUE,
      start_date   =>  st_date,
      end_date     =>  ed_date);
END;
/

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

動的アプリケーション・ロールを作成するには、CREATE ROLEシステム権限を持つユーザーsec_mgrとしてSQL*Plusにログインし、XS_PRINCIPAL.CREATE_DYNAMIC_ROLEプロシージャを使用します。

例2-8に、app_dynamic_roleという動的アプリケーション・ロールを作成する方法を示します。オプションのdurationパラメータは、アプリケーション・ロールがアクティブな期間(分)を指定します。scopeパラメータは、このロールの有効範囲を指定します。SESSION_SCOPE (デフォルト値)またはREQUEST_SCOPEのいずれかを指定できます。SESSION_SCOPEでは、有効化された動的ロールは、セッションから連結解除して再度セッションに連結した場合でも、有効な状態が続きます(セッションの再連結時に無効化するように明示的に指定していない場合)。REQUEST_SCOPEでは、ロールはセッションの連結解除後に無効になります。

この例では、動的アプリケーション・ロールは40分間アクティブであり、有効範囲は現在のアプリケーション・セッションのSESSION_SCOPEに設定されます。したがって動的アプリケーション・ロールは、セッションから連結解除して再度セッションに連結した場合でも、時間制限が動的アプリケーション・ロールの作成後40分を超過していないかぎりアクティブです。

例2-8 動的アプリケーション・ロールの作成

sqlplus sec_mgr
Enter password: password
Connected. 
BEGIN
  SYS.XS_PRINCIPAL.CREATE_DYNAMIC_ROLE
      (name         => 'app_dynamic_role',
      duration      => 40,
      scope         => XS_PRINCIPAL.SESSION_SCOPE);
END;
/

アプリケーション・ロールの検証

管理構成の変更後は、必ずReal Application Securityオブジェクトを検証することをお薦めします。XS_DIAGパッケージには、これらの変更がReal Application Securityオブジェクト間の複雑な関係に悪影響を与えないようにする検証APIのセットが含まれます。アプリケーション・ロールを検証するには、XS_DIAG.VALIDATE_PRINCIPALファンクションを使用します。詳細は、VALIDATE_PRINCIPALファンクションを参照してください。

トラブルシューティングのアドバイスは、Oracle Database Real Application Securityのトラブルシューティングを参照してください。

事前定義された標準アプリケーション・ロールおよび動的アプリケーション・ロール

Real Application Securityセッションで事前定義された動的アプリケーション・ロールを使用すると、アプリケーション・ユーザーは、その実行時の状態に基づいてアプリケーション権限を取得できます。これらのアプリケーション・ロールは、権限付与では取得できません。

例として、企業ファイアウォール内から接続するアプリケーション・ユーザーに対してアプリケーション・ロールを有効にし、ファイアウォールの外部から接続する場合よりもアプリケーション・ユーザーに対して多くのアプリケーション権限を付与する場合があげられます。

Real Application Securityの事前定義された標準アプリケーション・ロール、動的アプリケーション・ロールおよびデータベース・ロールの詳細は、ロールを参照してください。

標準アプリケーション・ロールはアプリケーション・ユーザーに付与できますが、動的アプリケーション・ロールは付与できません。動的アプリケーション・ロールは、ユーザーの状態に基づいて有効化されます。

詳細は、標準および動的アプリケーション・ロールを参照してください。

アプリケーション・ユーザーおよびアプリケーション・ロールの有効日

アプリケーション・ユーザー、アプリケーション・ロールおよびロールの権限付与に有効日を指定できます。アプリケーション・ユーザーまたはアプリケーション・ロールは、有効な開始日および終了日によって定義された期間内でのみ使用できます。例2-9に、アプリケーション・ユーザーの有効日を指定する方法を示します。

有効日の制限は、アプリケーション・ユーザーまたはアプリケーション・ロールの属性にする必要がない場合もあります。かわりに、ロールの権限付与ごとに有効日を制限するのみで済みます。この場合、アプリケーション・ロールの権限付与に対して有効な開始日と終了日を指定できます。これは、その特定のアプリケーション・ロールの権限付与を制限するのみで、ファイングレイン・アクセス制御ポリシーの実装に対応します。例2-10に、アプリケーション・ロールの有効日を指定する方法を示します。

有効日による制限の最も直接的な影響は次のとおりです。

  • アプリケーション・ユーザーが現在有効(開始日と終了日で定義された期間内)ではない場合、その特定のアプリケーション・ユーザーのセッションは作成できません。

  • アプリケーション・ロールが現在有効ではない場合、アプリケーション・ユーザーはセッションでそのアプリケーション・ロール(および任意の子)を使用できません。

  • 複数のアプリケーション・ロールの共有された子であるアプリケーション・ロールの場合、少なくとも1つの親が有効であれば、子のアプリケーション・ロールを使用できます。

  • アプリケーション・ロールの権限付与が現在有効ではない場合、権限が付与されるアプリケーション・ユーザーまたはアプリケーション・ロールは、そのアプリケーション・ロール(および任意の子)を使用できません。

注意:

有効日は、アプリケーション・ユーザーとアプリケーション・ロールの使用に加えられる制限の性質をよく検討してから、ポリシー内で使用する必要があります。

例2-9 アプリケーション・ユーザーの有効日の設定

sqlplus sec_mgr
Enter password: password
Connected. 
DECLARE
 startDate TIMESTAMP := TO_TIMESTAMP (
      '2012-01-01 11:00:00','YYYY-MM-DD HH:MI:SS');
 endDate TIMESTAMP := TO_TIMESTAMP (
      '2013-01-01 11:00:00','YYYY-MM-DD HH:MI:SS');

BEGIN
  SYS.XS_PRINCIPAL.CREATE_USER
      (name        => 'lwuser1',
      start_date   => startDate,
      end_date     => endDate);
END;
/

例2-10 アプリケーション・ユーザーのアプリケーション・ロールの有効日の設定

sqlplus sec_mgr
Enter password: password
Connected. 
DECLARE
 startDate TIMESTAMP := TO_TIMESTAMP ('2012-01-01 11:00:00','YYYY-MM-DD
 HH:MI:SS');
 endDate TIMESTAMP := TO_TIMESTAMP ('2013-01-01 11:00:00','YYYY-MM-DD
 HH:MI:SS');
BEGIN
  SYS.XS_PRINCIPAL.GRANT_ROLES
    (grantee      => 'lwuser1',
     role         => 'app_regular_role',
     start_date   => startDate,
     end_date     => endDate);
END;
/

プリンシパルへのアプリケーション権限の付与について

アプリケーション・ユーザーへのアプリケーション・ロールの付与について

この項の内容は次のとおりです。

新規アプリケーション・ユーザーの作成およびそのユーザーへのアプリケーション・ロールの付与

例2-11に、アプリケーション・ユーザー・アカウントの作成時にアプリケーション・ロールappl1_regular_roleをアプリケーション・ユーザーlwuser1に付与する方法を示します。

既存のアプリケーション・ロールのリストを確認するには、DBA_XS_ROLESデータ・ディクショナリ・ビューを問い合せます。

例2-11 新規アプリケーション・ユーザーの作成およびそのユーザーへのアプリケーション・ロールの付与

sqlplus sec_mgr
Enter password: password
Connected. 
BEGIN
  SYS.XS_PRINCIPAL.CREATE_USER('lwuser1');
  SYS.XS_PRINCIPAL.GRANT_ROLES('lwuser1', 'appl1_regular_role');
END;
/

既存のアプリケーション・ユーザーへのアプリケーション・ロールの付与

例2-12に、アプリケーション・ロールappl1_regular_roleを既存のアプリケーション・ユーザーlwuser1に付与する方法を示します。動的アプリケーション・ロールを既存のアプリケーション・ユーザーに付与することはできません。

DBA_XS_USERSビューを問い合せることで、既存のアプリケーション・ユーザー・アカウントのリストを確認できます。

例2-12 既存のアプリケーション・ユーザーへのアプリケーション・ロールの付与

sqlplus sec_mgr
Enter password: password
Connected. 
BEGIN
  SYS.XS_PRINCIPAL.GRANT_ROLES('lwuser1', 'appl1_regular_role');
END;
/

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

例2-13に、別の標準アプリケーション・ロールに標準アプリケーション・ロールを付与する方法を示します。動的アプリケーション・ロールを他の標準アプリケーション・ロールに付与することはできませんが、他の標準アプリケーション・ロールを動的アプリケーション・ロールに付与することは可能です。既存のアプリケーション・ロールのリストを確認するには、DBA_XS_ROLESビューを問い合せます(DBA_XS_ROLESを参照)。

例2-13 別の標準アプリケーション・ロールへの標準アプリケーション・ロールの付与

sqlplus sec_mgr
Enter password: password
Connected. 
BEGIN
  SYS.XS_PRINCIPAL.GRANT_ROLES(grantee => 'app_regular_role', role => 'appl1_regular_role');
END;
/

アプリケーション・ロールへのデータベース・ロールの付与

アプリケーション・ロールにデータベース・ロールを付与するには、SQL GRANT文を使用します。DBA_ROLESデータ・ディクショナリ・ビューを問い合せることで、既存のデータベース・ロールのリストを確認できます。

例2-14に、データベース・ロールcust_roleをアプリケーション・ロールapp_regular_roleに付与する方法を示します。

例2-14 アプリケーション・ロールへのデータベース・ロールの付与

sqlplus sec_mgr
Enter password: password
Connected. 
GRANT cust_role TO app_regular_role;