2021年3月9日火曜日

Autonomous Database上のAPEXの管理者パスワードが同期しない

 Autonomous Database上のOracle APEXでワークスペースを作成した後に、管理者ユーザーでワークスペースにサインインするときと、アプリケーションにサインインするときで、パスワードが異なることがあります。

これはマニュアルの

Restrictions and Limitations for Oracle Application Express with Autonomous Database

に記載されている、以下の制約がその理由になります。

  • Authentication scheme used to access App Builder ("Database Accounts").

アプリケーション・ビルダーの認証には、Database Accountsが使用されます。ですので、データベースのユーザーとして設定されているパスワードを使って認証されます。Oracle APEXでユーザーが作成したアプリケーションは、デフォルトでApplication Express アカウントであるのが通常です。

簡単に確認してみます。

最初にワークスペースとスキーマを同時に作成します。

管理サービスにサインインします。説明にあるように、Autonomous Databaseの管理者(ADMIN)パスワードを使用してサインインします。

最近、気がついたのですが、パスワードを表示させるオプションがありました。右端のチェックのアイコンの下に目のアイコンが隠れています。

チェックのアイコンを外して、目のアイコンをクリックする(カーソルが指になります)とパスワードが表示されます。

管理サービスにサインインして、ワークスペースの作成を行います。

データベース・ユーザーパスワードおよびワークスペース名を指定します。ここで指定したデータベース・ユーザーとパスワードで、データベースのユーザーが作成されるのと同時に作成されたワークスペースに同名のApplication Expressアカウントも作成されます。

作成したワークスペースにサインインします。ワークスペースにサインインする際は、データベースのユーザーとして認証されます。

ワークスペースに登録されているユーザーを確認します。ユーザーとグループの管理を開きます。

ユーザーTESTWORKSPACEの存在が確認できます。

ユーザーTESTWORKSPACEを開いてみます。パスワード(ワークスペース・ユーザー・アカウント・リポジトリに対してのみの認証用)と記載されています。

作成したアプリケーションの認証スキームApplication Expressアカウントであれば、ここで設定したパスワードが使用されます。

テストのために"ItsWorkspaceUser1234"と設定しておきます。

さらに、名前Database Accountsとして、空のアプリケーションをひとつ作成します。

認証スキームをApplication Expressアカウントからデータベース・アカウントに変更します。

共有コンポーネントから認証スキームを開きます。

新たに認証スキームを作成します。

スキームの作成として、ギャラリからの事前構成スキームに基づくを選択し、に進みます。


名前は任意ですが、ここではDB Accountとしています。スキーム・タイプデータベース・アカウントを選択します。認証スキームの作成をクリックします。


作成された認証スキームは即座にカレントに設定されます。


このアプリケーションは認証スキームがデータベース・アカウントになったので、ワークスペースの認証と条件は同じです。

SQL Developer Web、またはSQLclなどでAutonomous Databaseに管理者ユーザーADMINで接続し、テストのために、データベース・ユーザーTESTWORKSPACEのパスワードを"ItsDatabaseUser1234"に変更しておきます。

SQL> alter user testworkspace identified by ItsDatabaseUser1234;


User TESTWORKSPACEが変更されました。


SQL> 


もうひとつ空のアプリケーションを作成します。名前Application Express Accountとします。


認証スキームのデフォルトはApplication Expressアカウントなので、このアプリケーションの認証スキームは変更しません。

両方のアプリケーションを実行して、ユーザー認証が成功するパスワードを確認しましょう。

Application Express Accountのアプリケーションは、ワークスペースのユーザーとグループの管理を開いて変更したパスワードです。


サインインが成功することを確認します。

Database Accountsのアプリケーションは、データベース・ユーザーとして指定したパスワードです。


こちらもサインインが成功することを確認します。

現状は以上になっていて、データベース・ユーザーのパスワード変更はワークスペース・ユーザーのパスワードに反映されず、その逆も然りです。パスワードは正しく入力しているのに、認証が拒否される際に参考にしていだければ幸いです。

ちなみに、Oracle APEXのアプリケーションはデータベース・ユーザーでは接続しないため(SQLの実行はDBMS_SQLパッケージを使用し、その際に引数としてスキーマ名を与える)、データベース・ユーザーのパスワード変更の影響を受けません。