2022年12月12日月曜日

ORDS開発者ガイドのA. Setting-up a PL/SQL Gateway Userの確認

 ORDS開発者ガイドのA. Setting-up a PL/SQL Gateway Userとして記載されている手順を確認しました。


オンプレ環境での確認


以下の記事で作成したVirtualBoxの仮想マシンを使って、動作の確認を行います。


APEXのインストールとORDSの構成は実施不要です。ORDSのインストールを実施してしまった場合はords uninstallを実施する必要があります。元々の手順では一部のユーザーをCDBにインストールしていますが、今回の検証ではすべてをPDBにインストールします。

PDBを再作成することで、データベースを初期状態にします。

CDBにSYSで接続して、以下のコマンドを実行します。

alter pluggable database xepdb1 close immediate;
drop pluggable database xepdb1 including datafiles;
create pluggable database xepdb1 file_name_convert = ('pdbseed','xepdb1') admin user pdb_admin identified by oracle;
alter pluggable database xepdb1 open read write;


[oracle@localhost ~]$ sqlplus / as sysdba


SQL*Plus: Release 21.0.0.0.0 - Production on Mon Dec 12 14:29:10 2022

Version 21.3.0.0.0


Copyright (c) 1982, 2021, Oracle.  All rights reserved.



Connected to:

Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production

Version 21.3.0.0.0


SQL> alter pluggable database xepdb1 close immediate;


Pluggable database altered.


SQL> drop pluggable database xepdb1 including datafiles;


Pluggable database dropped.


SQL> create pluggable database xepdb1 file_name_convert = ('pdbseed','xepdb1') admin user pdb_admin identified by oracle;


Pluggable database created.


SQL> alter pluggable database xepdb1 open read write;


Pluggable database altered.


SQL> exit


マニュアルに記載されているinstall.sqlを実行します。

XEPDB1に接続して実行します。

@install パスワード

[oracle@localhost config]$ sqlplus sys/********@localhost/xepdb1 as sysdba


SQL*Plus: Release 21.0.0.0.0 - Production on Mon Dec 12 14:39:00 2022

Version 21.3.0.0.0


Copyright (c) 1982, 2021, Oracle.  All rights reserved.



Connected to:

Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production

Version 21.3.0.0.0


SQL> @install パスワード

SP2-0734: unknown command beginning "install.sq..." - rest of line ignored.


User created.


old   1: create user example_user1 identified by ^PWD

new   1: create user example_user1 identified by oracle


User created.


old   1: create user example_user2 identified by ^PWD

new   1: create user example_user2 identified by oracle


User created.



Grant succeeded.



Grant succeeded.



Session altered.



Procedure created.



Grant succeeded.



Grant succeeded.


Disconnected from Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production

Version 21.3.0.0.0

[oracle@localhost config]$ 


マニュアルに記載されているコマンドを実行し、ORDSを構成します。マニュアルではinstall-cliとなっていますが、installの間違いです。

PDB名はPDB1ではなくXEPDB1なので、その部分は変更します。SQL Developer Webの構成は不要なのでfalseを指定します。ログ出力の指定も省略しています。パスワードについてはプロンプトが表示されるので、手作業で入力します。

ords --config /etc/ords/config install --db-pool xepdb1 --admin-user sys --proxy-user --db-hostname localhost --db-port 1521 --db-servicename xepdb1 --feature-sdw false --gateway-user example_user1 --gateway-mode proxied

[oracle@localhost config]$ /usr/local/bin/ords --config /etc/ords/config install --db-pool xepdb1 --admin-user sys --proxy-user --db-hostname localhost --db-port 1521 --db-servicename xepdb1 --feature-sdw false --gateway-user example_user1 --gateway-mode proxied


ORDS: Release 22.4 Production on Mon Dec 12 05:36:34 2022


Copyright (c) 2010, 2022, Oracle.


Configuration:

  /etc/ords/config/


Enter the database password for SYS AS SYSDBA: ********

Enter the database password for ORDS_PUBLIC_USER: ********

Confirm password: ********

Oracle REST Data Services - Non-Interactive Install


Retrieving information.

The setting named: db.connectionType was set to: basic in configuration: xepdb1

The setting named: db.hostname was set to: localhost in configuration: xepdb1

The setting named: db.port was set to: 1521 in configuration: xepdb1

The setting named: db.servicename was set to: xepdb1 in configuration: xepdb1

The setting named: plsql.gateway.mode was set to: proxied in configuration: xepdb1

The setting named: db.username was set to: ORDS_PUBLIC_USER in configuration: xepdb1

The setting named: db.password was set to: ****** in configuration: xepdb1

The setting named: feature.sdw was set to: false in configuration: xepdb1


[中略]


PL/SQL procedure successfully completed.


2022-12-12T05:37:52.978Z INFO        Completed configuring PL/SQL gateway user for Oracle REST Data Services version 22.4.0.r3401044. Elapsed time: 00:00:00.235 


[*** Info: Completed configuring PL/SQL gateway user for Oracle REST Data Services version 22.4.0.r3401044. Elapsed time: 00:00:00.235 

 ]

2022-12-12T05:37:52.987Z INFO        To run in standalone mode, use the ords serve command:

2022-12-12T05:37:52.988Z INFO        ords --config /etc/ords/config serve

2022-12-12T05:37:52.989Z INFO        Visit the ORDS Documentation to access tutorials, developer guides and more to help you get started with the new ORDS Command Line Interface (http://oracle.com/rest).

[oracle@localhost config]$ 


以上でORDSの構成は完了です。

install.sqlで作成されたSAMPLE_PLSQL_APPがオーナーのプロシージャSAMPLE_PROCをPL/SQL Gatewayで実行できるように、許可を与えます。

最初にスキーマORDS_METADATAに実行権限を与えます。

grant execute on sample_plsql_app.sample_proc to ords_metadata;

[oracle@localhost config]$ sqlplus sys/********@localhost/xepdb1 as sysdba


SQL*Plus: Release 21.0.0.0.0 - Production on Mon Dec 12 14:39:00 2022

Version 21.3.0.0.0


Copyright (c) 1982, 2021, Oracle.  All rights reserved.



Connected to:

Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production

Version 21.3.0.0.0


SQL> grant execute on sample_plsql_app.sample_proc to ords_metadata;


Grant succeeded.


SQL> exit


プロシージャの呼び出し許可を与えるために、ords_admin.add_plsql_gateway_procedureを実行します。

begin
    ords_admin.add_plsql_gateway_procedure(
        p_owner => 'SAMPLE_PLSQL_APP'
        ,p_package_name => null
        ,p_procedure_name => 'SAMPLE_PROC'
    );
end;
/

[oracle@localhost config]$ sqlplus sys/oracle@localhost/xepdb1 as sysdba


SQL*Plus: Release 21.0.0.0.0 - Production on Mon Dec 12 14:41:05 2022

Version 21.3.0.0.0


Copyright (c) 1982, 2021, Oracle.  All rights reserved.



Connected to:

Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production

Version 21.3.0.0.0


SQL> begin

  2  ords_admin.add_plsql_gateway_procedure(

  3   p_owner => 'SAMPLE_PLSQL_APP'

  4   ,p_package_name => null

  5   ,p_procedure_name => 'SAMPLE_PROC'

  6  );

  7  end;

  8  /


PL/SQL procedure successfully completed.


SQL> exit


ORDSを起動して、プロシージャを呼び出してみます。

[oracle@localhost config]$ /usr/local/bin/ords --config /etc/ords/config serve


http://localhost:8080/ords/xepdb1/sample_plsql_app.sample_proc


動作確認ができました。

デフォルトでは/ordsがコンテキスト・ルートになります。

global/settings.xmlstandalone.context.pathの指定を含めることにより、別のパスに変更できます。/pls/apexに変更する場合は以下の指定になります。

<entry key="standalone.context.path">/pls/apex</entry>

ords installコマンドの実行時に--db-poolとしてxepdb1を渡しているため、プロシージャにアクセスするURLにプール名が含まれます。デフォルト・プールに変更するとURLよりプール名を除くことができます。

ORDSを構成したディレクトリの下にあるdatabases/xepdb1というディレクトリをdatabases/defaultに変更します。

以上で

http://localhost:8080/ords/xepdb1/sample_plsql_app.sample_proc

というパスを以下に変更できます。

http://localhost:8080/pls/apex/sample_plsql_app.sample_proc


Autonomous Databaseでの確認



データベース・アクションに管理者ユーザーADMINで接続します。

開発SQLよりCREATE USER文を実行し、ユーザーSAMPLE_PLSQL_APPを作成します。

create user sample_plsql_app no authentication account lock;


プロシージャSAMPLE_PROCを作成します。


ユーザーORDS_PLSQL_GATEWAY(実際にプロシージャを呼び出すユーザー)とORDS_METADATA(プロシージャを許可リストに登録するために必要)にプロシージャの実行権限を与えます。

grant execute on sample_plsql_app.sample_proc to ords_plsql_gateway;
grant execute on sample_plsql_app.sample_proc to ords_metadata;

オンプレでの確認ではPL/SQL Gateway UserをEXAMPLE_USER1とし、プロシージャの実行権限を持っているユーザーをPL/SQL Gateway Userに指定していました。Autonomous DatabaseではPL/SQL Gateway UserはORDS_PLSQL_GATEWAYと決まっているため、そのユーザーに実行権限を割り当てます。


プロシージャSAMPLE_PLSQL_APP.SAMPLE_PROCをアクセス許可リストに追加します。



 以上で作業は完了です。以下のURLよりPL/SQLプロシージャを呼び出せます。

https://ADBのホスト名/ords/sample_plsql_app.sample_proc