2022年7月12日火曜日

APEX 22.1で変更されたAutonomous Databaseでのワークスペース作成

 以前にAutonomous Databaseでのワークスペースの追加作成という記事で、Autonomous DatabaseでのAPEXワークスペースの作成手順について説明しました。

Autonomous DatabaseのAPEXがOracle APEX 22.1に上がった際に、APEXワークスペースの作成手順が変更されています。

以下より変更された手順を確認します。

管理サービスの説明「自律型データベースの管理者(ADMIN)パスワードを使用してサインインしてください。」に従って、ADMINパスワードを入力し、管理にサインインをクリックします。

初回サインイン時はワークスペースが未作成のため、すぐにワークスペースを作成するダイアログが開きます。今回はワークスペースはすでに作成済みなので、ワークスペースを追加作成します。

ワークスペースの作成をクリックします。


ダイアログが開きます。新規のスキーマを選択します。


ワークスペースの作成のダイアログが開きます。

APEX 22.1以前のダイアログは以下です。


APEX 22.1から、以下のダイアログに変わりました

ワークスペース名については、バージョンによらず双方ともAPEXのワークスペース名の指定になります。

以前あったデータベース・ユーザとパスワードの指定は無くなりました

APEX 22.1からは、ワークスペースの管理者ユーザーとして作成されるデータベース・ユーザーと、データベース・オブジェクトなどを保持しデフォルト・パーシング・スキーマとなるデータベース・ユーザーは別に作成されます。

ワークスペース・ユーザー名およびパスワードとして、ワークスペースの管理者となるデータベース・ユーザーの名前とパスワードを指定します。このユーザーは、データベース・オブジェクトを保持しません。

データベース・オブジェクトを保持するスキーマとして、ワークスペース名に接頭辞としてWKSP_を付けたデータベース・ユーザーが作成されます。データベース・パスワードは、このユーザーに与えるパスワードです。sqlplusやSQLclといったツールから接続する要件がなければ、このパスワードを指定する必要はありません。

ワークスペースIDは、こちらの記事で説明しているように、開発、ステージング、本番といった異なる用途のインスタンスに作成するワークスペースで、ワークスペースIDを一致させる際に指定します。

ワークスペースの作成をクリックします。


作成されたワークスペースを確認します。

既存のワークスペースからは、ワークスペースHRが作成されていることが確認できます。


開発者とユーザーの管理を確認します。

ワークスペース管理者としてHRADMINが作成されています。ワークスペースHRデフォルトのスキーマとしてWKSP_HRが紐づけられています。


作成されたワークスペースにサインインします。

サインインには、ワークスペース名ワークスペース・ユーザー名ワークスペース・パスワードを指定します。データベース・ユーザー名(WKSP_HR)およびデータベース・パスワードではサインインできません。


SQLワークショップSQLコマンドを開き、以下のSQLを実行します。
select 
    sys_context('userenv','session_user') as session_user, 
    sys_context('userenv','session_schema') as session_schema,
    sys_context('userenv','current_schema') as current_schema,
    sys_context('userenv','proxy_user') as proxy_user
from dual;
SQLコマンドを実行するスキーマとして、右上の選択リストにWKSP_HRが選択されていることが確認できます。


Oracle APEXによるSQLの実行という解説記事を書いた当時は、APEXの処理であるプロシージャはSESSION_USERORDS_PUBLIC_USERから呼び出されていました。これはセキュリティ強化を目的として、Oracle REST Data Servicesの処理と同様にORDS_PUBLIC_USERをプロキシとして通した上で、ユーザーORDS_PLSQL_GATEWAYにて実行されるように変わっています。

続けて、Oracle REST Data Servicesを有効にします。

Oracle REST Data Servicesを有効にするスキーマは、WKSP_HRになります。HRADMINではありません。


ORDSにスキーマを登録する際に、スキーマ別名ワークスペース名に一致するようにします。今回の例ではhrです。スキーマ名であるWKSP_HRはORDS RESTサービスのURLに現れません。


データベース・アクションから、作成されたデータベース・ユーザーを確認します。

RESTの有効化が行われているのはWKSP_HRです。そのため、データベース・アクションへの接続URLはデータベース・ユーザーWKSP_HRに対して生成されています。

リンクを開き、データベース・ユーザーWKSP_HRでADBに接続します。


画面が開きます。ここで入力するユーザーはAPEXワークスペースの管理者ユーザーとパスワードになります

今回の例ではHRADMINとそのパスワードを入力します。


サインインにはAPEXワースクスペースの管理者ユーザーであるデータベース・ユーザーのユーザー名とパスワードを指定しましたが、データベース・アクションとしてはデータベース・ユーザーWKSP_HRとしてサインインされています。


以上より、Oracle APEXとデータベース・アクションの双方で、ワークスペースのスキーマWKSP_HRを直接指定して接続することはありません。

直リンクによる接続でない場合は、最初のユーザー名として、ORDS別名であるHRを入力します。


Oracle APEXおよびOracle REST Data Servicesの双方とも、実際にSQLを実行するユーザーはWKSP_HRになるため、grant文を呼び出して実行権限などを付与する対象は、WKSP_HRになります

データベース・アクションには、Oracle APEXのワークスペースを管理する機能が追加されています。


画面右上に、ワークスペースの作成というボタンがあります。


現時点(2022年7月12日)のデータベース・アクションでは、データベース・ユーザー(スキーマ)の名前と、APEXユーザー名を同じ名前にしてAPEXワークスペースを作成します。これはAPEX側から見ると、APEX 22.1以前でのワークスペースの作成方法になります。


Autonomous Database上で動作するAPEX 22.1から、ワークスペースを新規作成する場合、スキーマにはWKSP_の接頭辞が付くことを理解した上で、Oracle APEXで扱うスキーマ名にWKSP_といった接頭辞は付けたくない場合は、APEXではワークスペースを新規作成せず、既存のスキーマを選択するか(あらかじめスキーマを作成するには、データベース・アクションでの作業が必要)、そのままデータベース・アクションからAPEXワークスペースを作成する必要があるでしょう。

APEX 22.1で変更された、Autonomous Databaseでのワークスペース作成についての説明は以上です。