2021年8月16日月曜日

データベース・セキュリティの活用(2) - 権限の追加

本記事に記載されている手順で、準備として実行が必要な操作は、データベース・アクションからのCREATE ROLE文とGRANT文の実行のみです。

Oracle APEXのアプリケーションはアプリケーション定義属性セキュリティデータベース・セッション解析対象スキーマとして設定されたユーザーの権限でアプリケーション(正確にはアプリケーションに記載のあるSQLおよびPL/SQLコード)を実行します。


今回はアプリケーションをワークスペースAPEXDEVに作成し、そのアプリケーションからスキーマHRに存在する表EMPおよびDEPTにアクセスします。作成するアプリケーションの解析対象スキーマAPEXDEVとするため、データベース・ユーザーAPEXDEVにスキーマHRの表EMP、DEPTのアクセス権限が必要です。

ユーザーAPEXDEVに必要な権限を与えるために実行するスクリプトは以下になります。ロールHR_ROLEを作成し、必要な権限をHR_ROLEに割り当てたのち、ユーザーAPEXDEVにロールHR_ROLEを割り当てます。

ユーザーADMINにてデータベース・アクションに接続し、開発SQLより上記のスクリプトを実行します。


アプリケーションの解析対象スキーマと、表やビューなどのデータベース・オブジェクトが含まれるスキーマが異なると、データベースの標準機能であるGRANT文による権限の割り当ておよびロールを活用できます。

解析対象スキーマに指定したユーザーが、表へのアクセス権限を持っていない場合は以下のようにORA-00942: 表またはビューが存在しません。といったエラーが発生します。


アプリケーションの解析対象スキーマとして割り当て可能なスキーマ(データベース・ユーザー)は、Oracle APEXの管理サービスより、ワークスペースの管理ワークスペースとスキーマの割当ての管理から行います。


デフォルトではワークスペース作成時に指定したスキーマがひとつだけ割り当てられています。そのスキーマがデフォルトの解析対象スキーマとなります。


ワークスペースには複数のスキーマを割り当てることができます。ここで複数のスキーマが割り当てられていると、APEXのアプリケーション開発者は作成しているアプリケーションの解析対象スキーマを、割り当て済みのスキーマのどれかに変更できます。

例えば上記の画面より、ワークスペースAPEXDEVにスキーマHRを割り当てます。スキーマの追加をクリックします。(以下は作業の例示であり、実施は不要です。

割り当てるスキーマは既存のHRなので、スキーマとして既存を選び、へ進みます。


ワークスペースとしてAPEXDEVを選択します。へ進みます。


スキーマとしてHRを選択します。へ進みます。


スキーマの追加をクリックすると操作は完了です。


ワークスペースAPEXDEVにスキーマHRの割り当てが追加されました。


ワークスペースに複数のスキーマが割り当たっていると、開発者によってアプリケーションの解析対象スキーマが選択できるようになります。


アプリケーションに記述されているSQLやPL/SQLは解析対象スキーマの権限で実行されるため、不必要に強い権限をもったスキーマ(データベース・ユーザー)をワークスペースに割り当てることにはセキュリティ上の問題があります。

本記事は解析対象スキーマはつねにAPEXDEVとして作業を進めます。開発者によって恣意的にアプリケーションの解析対象スキーマを変更されないよう、スキーマHRをワークスペースAPEXDEVに割り当てるといった作業は行いません。