2023年10月16日月曜日

ローカル環境のSQL Developer Webの管理者ユーザーを作成する

 ローカルの環境にOracle REST Data Services(以降ORDSとします)をインストールしSQL Developer Webに接続するには、ORDSにスキーマを登録する(ORDSをスキーマにたいして有効にする)必要があります。Autonomous Databaseの管理ユーザーADMINとは異なり、ローカルの環境ではSQL Developer Webにアクセス可能なユーザーは、デフォルトで作成されません。

ロールPDB_DBAが割り当たっているユーザーで、SQL Developer Webに接続ができるようにするPL/SQLスクリプトを書いてみました。

PDBにユーザーSYSで接続し、上記のスクリプトを実行します。PDBの管理ユーザーは一般的にADMINかPDBADMINという名前で作成されるため、その名前に制限されるように条件を付けています。ADMIN、PDBADMIN以外の名前で管理ユーザーが作成されている場合は、条件を変更します。

実行結果は以下のようになります。

SQL> set echo on

SQL> @create-admin-user-sdw.sql

SQL> set serveroutput on

SQL> begin

  2    for r in (select * from dba_role_privs)

  3    loop

  4   if r.grantee <> 'SYS' and r.grantee in ('ADMIN','PDBADMIN') then

  5     ords_admin.enable_schema(

  6       p_enabled => true,

  7       p_schema => r.grantee,

  8       p_url_mapping_type => 'BASE_PATH',

  9       p_url_mapping_pattern => lower(r.grantee),

 10       p_auto_rest_auth => true

 11     );

 12     dbms_output.put_line('Schema ' || r.grantee || ' is allowed to connect to SQL Developer Web.');

 13   end if;

 14    end loop;

 15    commit;

 16  end;

 17  /

Schema PDBADMIN is allowed to connect to SQL Developer Web.


PL/SQL procedure successfully completed.


SQL> 


ORDS 23.1より追加された、ORDSのランディング・ページにアクセスします。

SQL Developer Web実行をクリックします。


ユーザー名PDBの管理ユーザーの名前パスワードにそのユーザーのデータベースのパスワードを入力します。

スキーマをORDSに登録する際に引数p_url_mapping_patternとして、管理ユーザーと同じ値(小文字に変更)を設定しているため、詳細を開いてパスを設定する必要はありません。

サインインをクリックします。


SQL Developer Webの画面が開きます。


Oracle APEXのワークスペース・スキーマの権限でSQL Developer Webに接続する場合は、SQLワークショップRESTfulサービスより、ORDSにスキーマを登録できます。


開いたダイアログの、RESTfulアクセスの有効化オンにし、スキーマ別名を設定して、スキーマ属性の保存を行います。


スキーマ別名にワークスペース・スキーマ名と異なる値を与えた場合は、詳細パスにスキーマ別名を指定します。

ただし、スキーマ別名は作成済みのAPEXアプリケーションのパスに影響を与えるため、デフォルトで設定されるワークスペース名から変更することはお勧めしません(アプリケーションのURLよりワークスペース名を推定されたくない、という要件がある場合は除きます)。


Oracle APEXのワークスペース・スキーマに、パスワードの設定は不要です。そのため、APEXだけで利用している場合、パスワードが設定されていないことがあります。

ローカルにインストールしたSQL Developer Webから接続する場合は、データベース・ユーザーとパスワードで認証するため、パスワードを設定する必要があります。一般に以下のようなalter user文を実行します。

alter user <ユーザー名> identified by <パスワード>;