2 アプリケーション・ユーザーおよびアプリケーション・ロールの構成
関連項目:
アプリケーション・ユーザーの構成について
アプリケーション・ユーザー・アカウントについて
従来のデータベース・ユーザーは、データベース・スキーマを所有し、それらのスキーマに対して通常の重量データベース・セッションを作成できます。
アプリケーション・ユーザーはデータベース・スキーマを所有しませんが、表にアクセスするための適切なオブジェクト権限を持つロールが付与されていれば、中間層を介してデータベースに対してアプリケーション・セッションを作成できます。アプリケーション・ユーザーは、これらのアカウントがスキーマに関連付けられ、XSCONNECT
アプリケーション・ロールがこれらのアプリケーション・ユーザーに付与されていれば、直接ログイン・アプリケーション・ユーザー・アカウントを介してデータベースに直接接続することで、重量データベース・セッションを作成することもできます。各アプリケーション・ユーザーにプロファイルを作成して割り当てることもできます。
この項の内容は次のとおりです: アプリケーション・ユーザー・アカウントを作成する一般的な手順。
アプリケーション・ユーザー・アカウントを作成する一般的な手順
アプリケーション・ユーザー・アカウントを作成する一般的な手順は、次のとおりです。
その他のタスク
アプリケーション・ユーザー・アカウントを作成したら、アプリケーション・ユーザーの権限を提供するロールをそのアカウントに付与できます。詳細は、既存のアプリケーション・ユーザーへのアプリケーション・ロールの付与を参照してください。
単純なアプリケーション・ユーザー・アカウントの作成
注意:
SQL*Plusでは、小文字と特殊文字で大/小文字の区別が問題となるため、次のガイドラインに従ってください。
-
名前に小文字または特殊文字が含まれるアプリケーション・ユーザーは、アカウント名を二重引用符で囲んでSQL*Plusに接続する必要があります。
たとえば、次のようになります。
CONNECT "lwuser1" Enter password: password Connected.
-
小文字または特殊文字が含まれるアプリケーション・ロールの名前は、二重引用符で囲んでSQL*Plusに入力する必要があります。
たとえば、次のようになります。
GRANT cust_role TO "app_regular_role";
単純なアプリケーション・ユーザー・アカウントを作成する場合、スキーマ引数には、未修飾の名前を解決するために使用するスキーマ名を指定します。これは、権限の付与とは無関係で、名前解決目的のみに使用されます。スキーマ名を指定しない場合、XS$NULL
が使用されます。
単純なアプリケーション・ユーザー・アカウントを作成するには、次の手順を実行します。
直接ログイン・アプリケーション・ユーザー・アカウントの作成について
直接ログイン・アプリケーション・ユーザー・アカウントを作成する手順
直接ログイン・アプリケーション・ユーザー・アカウントを作成するには、次の手順を実行します。
次に、アプリケーション・ユーザー・アカウントに権限を割り当てます。プリンシパルへのアプリケーション権限の付与についてに移動してください。
その後、ユーザーは次のようにデータベースに接続できます。たとえば、次のようになります。
CONNECT lwuser1
Password: password
直接アプリケーション・ユーザー・アカウントのためのパスワード検証の設定
オプションで、このパスワードにパスワード検証(ハッシュ変換パスワード)を設定することで、管理者は、パスワードではなく検証機能の情報付きでReal Application Securityにユーザーを移行できます。パスワード検証を設定しない場合のデフォルトのハッシュ・アルゴリズムは、XS_SHA512
です。詳細は、「SET_PASSWORDプロシージャ」および「SET_VERIFIERプロシージャ」を参照してください。
LWUSER1
のハッシュ・アルゴリズムXS_SHA512
を使用して、パスワード検証をXS$VERIFIERS
ディクショナリ表の問合せで決定した値に設定するためのXS_PRINCIPAL.SET_VERIFIER
プロシージャの使用方法を示します。
-
DBA_XS_OBJECTS
ビューを問い合せて、ユーザーLWUSER1
のID値を取得します。 -
IDが2147493730であるユーザー
LWUSER1
のXS$VERIFIERS
ディクショナリ表を問い合せます。検証機能の値には、タイプが値"T"で含まれ、その後にコロン(:)が続き、XS_SHA512
の検証機能タイプであることを示します。これはタイプ#2であることも示されます。 -
"
T:
"を含む検証値全体を使用して、ユーザーLWUSER1
の検証を設定します。次の例は、これらの各手順を示します。
例2-1 ハッシュ・アルゴリズムXS_SHA512を使用したパスワード検証の設定
sqlplus sec_mgr
Enter password: password
Connected.
SQL> column name format A10;
SQL> column owner format A6;
SQL> select NAME, OWNER, ID, TYPE, STATUS from DBA_XS_OBJECTS where NAME = 'LWUSER1';
NAME OWNER ID TYPE STATUS
---------- ------ ---------- ------------------ --------
LWUSER1 SYS 2147493730 PRINCIPAL VALID
SQL> column user# format 9999999999;
SQL> column type# format 99;
SQL> column verifier format A62;
SQL> select USER#, VERIFIER, TYPE# from XS$VERIFIERS where USER# = '2147493730';
USER# VERIFIER TYPE#
----------- -------------------------------------------------------------- -----
2147493730 T:9BA95FEF2C2630A2BAACF2E7C5E41B0D50CDC7B0B60C88AD4FE81F8155D0 2
02F99EEAF9D95477E4749870C67FDE870E154ED17809C359777F979E269010
823FB981B2A998915EB1439FE3C6C1542A239C
SQL> BEGIN
SYS.XS_PRINCIPAL.SET_VERIFIER('lwuser1','T:9BA95FEF2C2630A2BAACF2E7C5E41B0D50CDC7B0B6
0C88AD4FE81F8155D002F99EEAF9D95477E4749870C67FDE870E154ED17809C359777F979E269010823FB
981B2A998915EB1439FE3C6C1542A239C', XS_PRINCIPAL.XS_SHA512);
END;
/ 2 3 4 5
PL/SQL procedure successfully completed.
この手順を正常に完了するには、検証の値とタイプの両方が、検証が設定されているユーザーのXS$VERIFIERS
ディクショナリ表のVERIFIER
列の情報と一致している必要があります。アプリケーション・ユーザーのパスワードを変更すると、検証機能タイプを変更するオプションで自動的に検証値が変更されます。
この例では、検証をまったく同じ値に設定して、含まれる手順を表示します。検証値が設定した検証機能タイプと一致するかぎり、XS$VERIFIERS
ディクショナリ表を問い合せたときにアプリケーション・ユーザーに表示される任意の検証値にパスワードの検証を設定するオプションがあります。たとえば、検証値と検証機能タイプをXS_SALTED_SHA1
に変更する場合は、次の手順を実行します。
SQL> BEGIN
SYS.XS_PRINCIPAL.SET_VERIFIER('lwuser1','S:14DC0F5ABB72FC869549B1F845C548E0BEF7B863A116DB24DFAE22F0501E',
XS_PRINCIPAL.XS_SALTED_SHA1);
END;
/ 2 3 4
PL/SQL procedure successfully completed.
SET_VERIFIERプロシージャに示すように、これは、アプリケーション・ユーザーLWUSER3
に設定された検証値および検証タイプと同じであることに注意してください。
Oracle Label Securityコンテキストの直接ログイン・セッションでの確立
Real Application SecurityユーザーのためのOracle Label Securityのサポートについて説明します。
Oracle Database 12cリリース2 (12.2)からは、Oracle Label SecurityでReal Application Securityユーザーがサポートされるようになりました。これは、Real Application Securityユーザーが直接ログオンを介してReal Application Securityユーザー・セッションと連結したときに、独自のOracle Label Security認可を行使できることを意味します。Oracle Label Securityコンテキストはセッションの連結中に確立されます。
関連項目:
-
Real Application Securityユーザーに対するOracle Label Securityのサポートの詳細は、従来のデータベース・セッションへのアプリケーション・セッションの連結を参照してください。
-
Oracle Label Securityの詳細は、Oracle Label Security管理者ガイドを参照してください。
SQL*Plus PASSWORDコマンドを使用したアプリケーション・ユーザーのパスワードのリセット
セキュリティ管理者sec_mgr
として、create session
データベース権限とReal Application Securityのxs_session_admin
データベース・ロールを持ち、さらに、sec_mgr
にはデータベース・ユーザーとしてReal Application SecurityのPROVISION
最小システム権限が付与されます。Real Application Securityの最小システム権限を使用して、セキュリティ・マネージャとしてユーザーやロールを作成したり、パスワードの設定やセッションの管理ができるようになります。例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
が、セルフ・パスワード変更を実行できることを示します。ユーザーのセルフ・パスワード変更は成功します。
SET_PASSWORD
プロシージャでは、古いパスワードのプロンプトは表示されませんが、最小権限としてのReal Application Security PROVISION
権限またはデータベースのALTER USER
権限のいずれかが必要になります。(SET_PASSWORD
はReal Application Security PL/SQLプロシージャであり、SQL*Plus PASSWORD
ではないことに注意してください。)ユーザーのセッションにPROVISION
最小権限またはALTER USER
権限がある場合、任意のアプリケーション・ユーザー・セッション(明示的に連結されている直接ログオン・セッションを含む)またはデータベース・ユーザー・セッション(そのセッションにPROVISION
最小権限またはALTER USER
権限がある場合)から任意のアプリケーション・ユーザーのパスワードをリセットできます。他のアプリケーション・ユーザーのパスワードを変更する場合、SQL*Plusの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
およびrole2
をapp_user2
に代理取得させています。add_proxy_user('app_user1', 'app_user2', pxy_roles)
というコールによって、app_user2
がapp_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_user2
をapp_user1
に切り替え、app_user1
のロールであるrole1
およびrole2
を継承しています。
DBA_XS_ROLE_GRANTS
ビューの問合せによって、ロールroles1
およびroles2
が付与されているのはapp_user1
のみでapp_user2
には付与されていないこと、およびapp_user2
はプロキシ・ユーザーとしてのみこれらのロールを引き受けることが示されます。
DBA_XS_SESSION_ROLES
ビューの問合せによって、ロールrole1
およびrole2
は、app_user1
がapp_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
に付与する方法を示します。動的アプリケーション・ロールを既存のアプリケーション・ユーザーに付与することはできません。
例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;