Oracle APEXのアプリケーションの設定である、解析対象スキーマを変更した場合、どのような影響があるかを確認しました。結論を先に記載すると、データベースの接続ユーザーが変わったのと同じ影響があります。
特に意識して設定をしなければ、ワークスペースを作成する際に、同名のデータベース・ユーザー( = スキーマ)を作成していると思います。
そして、そのワークスペースに作成したアプリケーションの解析対象スキーマは、上記のデータベース・ユーザーがデフォルトの設定になります。
一般的には、Oracle APEXのアプリケーションで扱うデータベース・オブジェクトは、このデータベース・ユーザー( = スキーマ)の持ち物として作成しているでしょう。
これから、解析対象スキーマと異なるスキーマにオブジェクトを作成し、そのオブジェクトを扱うアプリケーションを作成します。アプリケーションの作成後、解析対象スキーマを変更し、影響を確認します。
確認作業はAutonomous Databaseを使って実施します。
Oracle APEXのワークスペースおよびデータベース・ユーザーはAPEXDEVとして作成されていることを前提とします。
SQL Developer Webによるデータベース・ユーザーおよび表の作成
SQL Developer Webにアクセスし、左のメニューか、もしくは真ん中のパネルの管理に含まれるデータベース・ユーザーを実行します。
最低限、ユーザー名、パスワード、パスワードの確認を設定します。その他の設定は、今回の検証に影響しません。設定した後、ユーザーの作成を実行します。
データベース・ユーザーが作成されました。
続いて、表EMPを作成します。SQLの実行画面を開いて、オブジェクトの作成を開きます。
スキーマとして先ほど作成したHR(選択リストに表示されない場合は、一旦ブラウザをリロードします)を選択し、名前にEMPを指定します。列の一般タブから、列EMPNOとENAMEを以下の属性で追加します。
名前: EMPNO, データ型: NUMBER, PKおよびID列をチェック
名前: ENAME, データ型: VARCHAR2(80)
制約のタブに移り、ENAMEのNOT NULLにチェックを入れます。
DDLを確認し、作成を行います。
表EMPが作成されたことを確認し、画面を閉じます。
grant select on hr.emp to apexdev;
alter user hr quota unlimited on data;
insert into hr.emp(ename) values('SCOTT');
insert into hr.emp(ename) values('ADAM');
insert into hr.emp(ename) values('SHARON');
commit;
Oracle APEX管理サービスによるワークスペースとスキーマの紐づけ
続いて、Oracle APEXの管理サービスにアクセスし、ワークスペースの管理を開きます。
スキーマとして既存を選択し、次へ進みます。
新たに作成したスキーマを紐づけるワークスペースを選択します。今回の例ではAPEXDEVです。選択後、次に進みます。
設定内容を確認し、スキーマの追加を実行します。
ワークスペースにスキーマが紐づけられました。
以上で、Oracle APEXの管理サービスでの作業は完了です。
確認に使用するアプリケーションの作成
最初にアプリケーション・ビルダーから空のアプリケーションを作成しておきます。スクリーンショットと詳細手順は割愛します。
続いて、そのアプリケーションに、スキーマHRの表EMPを扱うレポートとフォームを作成します。
ページ作成ウィザードを実行します。
コンポーネントのフォームをクリックします。
フォーム付きレポートをクリックします。
ナビゲーションのプリファレンスとして、新規ナビゲーション・メニュー・エントリの作成を選択すると、新規ナビゲーション・メニュー・エントリはレポート・ページ名と同名の従業員一覧になります。そのまま次に進みます。
データ・ソースの指定にて、表/ビューの所有者としてHRを選択します。これはワークスペースにスキーマHRを紐づけたため選択可能になりました。表/ビューの名前にEMP(表)を選択し、次へ進みます。
解析対象スキーマの影響確認
作成したアプリケーションを実行し、レポートを開きます。スキーマHRに存在する表EMPの内容がリストされていることが確認できます。これはデータベース・ユーザーAPEXDEVにSELECT権限を与えられているからです。(実際はSELECT権限がないとページ自体、ページ作成ウィザードで作成することができません)。
ページ・デザイナにてフォームの定義を確認します。表の所有者としてHRが設定されていることが確認できます。
アプリケーションの定義を開き、セキュリティの項目にある解析対象スキーマをHRヘ変更し、変更の適用を実行します。
作成したアプリケーションから一旦サインアウトし、サインインし直してから、表EMPを操作してみます。今度は作成/変更の適用/削除、すべての操作が可能です。解析対象スキーマとして設定したHRの権限でアクセスされています。
以下のようにSQLで、手書きしなければなりません。
しかし、アプリケーションの解析対象スキーマも開発者によって変更できるようになるため、アプリケーションによっては権限設定を迂回することが可能になります。
解析対象スキーマはOracle APEXの標準ビューであるAPEX_APPLICATIONSのOWNER列で参照できるので、不用意に解析対象スキーマが変更されているアプリケーションが無いことを確認することができます。
ワークスペース・ユーティリティのApplication Expressビューを開きます。
ビューよりAPEX_APPLICATIONSを選んで開きます。
列にOWNERを含めて結果を表示させます。
OWNER(解析対象スキーマ)を確認することができます。
問合わせを開くと、確認に使用するSQLを参照することができます。
データベースが提供しているオブジェクトの保護機能の利用には、スキーマを分けるのが最初の作業になります。そのための基本的な操作方法と注意点の紹介でした。スキーマ設計の一助になれば幸いです。
完