Oracle APEXのアプリケーションはアプリケーション定義属性のセキュリティ、データベース・セッションの解析対象スキーマとして設定されたユーザーの権限でアプリケーション(正確にはアプリケーションに記載のあるSQLおよびPL/SQLコード)を実行します。
ユーザーAPEXDEVに必要な権限を与えるために実行するスクリプトは以下になります。ロールHR_ROLEを作成し、必要な権限をHR_ROLEに割り当てたのち、ユーザーAPEXDEVにロールHR_ROLEを割り当てます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
create role hr_role; | |
grant all on hr.emp to hr_role; | |
grant all on hr.dept to hr_role; | |
grant select on hr.emp_dept_v to hr_role; | |
grant hr_role to apexdev; |
ユーザーADMINにてデータベース・アクションに接続し、開発のSQLより上記のスクリプトを実行します。
アプリケーションの解析対象スキーマと、表やビューなどのデータベース・オブジェクトが含まれるスキーマが異なると、データベースの標準機能であるGRANT文による権限の割り当ておよびロールを活用できます。
解析対象スキーマに指定したユーザーが、表へのアクセス権限を持っていない場合は以下のようにORA-00942: 表またはビューが存在しません。といったエラーが発生します。
アプリケーションの解析対象スキーマとして割り当て可能なスキーマ(データベース・ユーザー)は、Oracle APEXの管理サービスより、ワークスペースの管理のワークスペースとスキーマの割当ての管理から行います。
デフォルトではワークスペース作成時に指定したスキーマがひとつだけ割り当てられています。そのスキーマがデフォルトの解析対象スキーマとなります。
ワークスペースには複数のスキーマを割り当てることができます。ここで複数のスキーマが割り当てられていると、APEXのアプリケーション開発者は作成しているアプリケーションの解析対象スキーマを、割り当て済みのスキーマのどれかに変更できます。
例えば上記の画面より、ワークスペースAPEXDEVにスキーマHRを割り当てます。スキーマの追加をクリックします。(以下は作業の例示であり、実施は不要です。)
割り当てるスキーマは既存のHRなので、スキーマとして既存を選び、次へ進みます。
ワークスペースとしてAPEXDEVを選択します。次へ進みます。
スキーマとしてHRを選択します。次へ進みます。
スキーマの追加をクリックすると操作は完了です。
ワークスペースAPEXDEVにスキーマHRの割り当てが追加されました。
ワークスペースに複数のスキーマが割り当たっていると、開発者によってアプリケーションの解析対象スキーマが選択できるようになります。
アプリケーションに記述されているSQLやPL/SQLは解析対象スキーマの権限で実行されるため、不必要に強い権限をもったスキーマ(データベース・ユーザー)をワークスペースに割り当てることにはセキュリティ上の問題があります。
本記事は解析対象スキーマはつねにAPEXDEVとして作業を進めます。開発者によって恣意的にアプリケーションの解析対象スキーマを変更されないよう、スキーマHRをワークスペースAPEXDEVに割り当てるといった作業は行いません。