関連項目:
従来のデータベース・ユーザーは、データベース・スキーマを所有し、それらのスキーマに対して通常の重量データベース・セッションを作成できます。アプリケーション・ユーザーは、データベース・スキーマを所有しませんが、データベースでアプリケーション・セッションを作成できます。
直接ログインを通じてアプリケーション・ユーザーをデータベースに連結または接続して、アプリケーション・セッションを使用できます。
この項の内容は次のとおりです: アプリケーション・ユーザー・アカウントを作成する一般的な手順。
アプリケーション・ユーザー・アカウントを作成する一般的な手順は、次のとおりです。
アプリケーション・ユーザー・アカウントを作成したら、アプリケーション・ユーザーの権限を提供するロールをそのアカウントに付与できます。詳細は、既存のアプリケーション・ユーザーへのアプリケーション・ロールの付与を参照してください。
注意:
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_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;
/
セキュリティ管理者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
および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;