e-learning、オラクル研修、LMS(学習管理システム)のiStudy

e-learning、オラクル研修、LMS(学習管理システム)のiStudy

第117回「WEBアプリ作成(15)(複数ユーザーで共有する方法)」

2015.01.29

こんにちは。インストラクターの蓑島です。早いもので、1月も、もう終わりですね。

さて、前回はWEBアプリのPL/SQLプログラムをパッケージ化する話でした。そこでお伝えしたように、今回は複数ユーザーでWEBアプリケーションを共有する方法について解説します。WEBアプリケーションというより、一般的にPL/SQLプログラムを複数ユーザーで共有する手順でもあります。

いままで本メルマガでは、ほとんどすべて、サンプル用のユーザーSCOTTで、PL/SQLのプログラムを作成し、SCOTTユーザーでPL/SQLプログラムを実行してきました。つまりプログラムの所有者(定義者)と実行者が同じです。しかし、利用者ユーザー毎に別のユーザーアカウントで実行したいニーズもよくあります。今回はそのような場合の対応方法について解説していきます。なおPL/SQLプログラムは定義者権限(デフォルト)であることを想定しています。定義者権限について深く知りたい方は、バックナンバー第52回~第55回(『定義者権限と実行者権限』)をご覧ください。

ではさっそく、複数ユーザーで共有し実行可能にする手順ですが、少ない手順で可能です。

1. 対象となるPL/SQLプログラム名(スキーマを明示)に対して、同名のパブリックシノニムを作成する。
2. 必要とするユーザーに該当プログラムの実行権限を付与する。

操作しながら解説します。ここでは前回作成したSCOTTスキーマのPAC_EMPパッケージを元にしたWEBアプリを、なんの変更もせずに、そのまま USER01というユーザーで利用可能とする設定例を行ってみます。PAC_EMPパッケージのソースコードを確認したい方は前回(第116回)のバックナンバーを参照してください。

最初に、準備として、USER01ユーザーを作成します。もちろん他のユーザーに読み替えていただいても結構です。

1
2
3
4
5
6
7
8
9
10
11
12
13
-- SYSTEMなどのユーザー作成の権限のある管理者ユーザーで
SHOW  USER
ユーザーは "SYSTEM" です。  
 
-- 新規ユーザー USER01 を作成する
CREATE USER USER01 IDENTIFIED BY user01;
 
ユーザーが作成されました。
 
-- USER01 にCONNECTロールを付与しデータベースへの接続を可能とする
GRANT CONNECT TO USER01;
 
権限付与が成功しました。

これで実行ユーザーの準備ができました。

次に、上記1. の設定として、前回作成したSCOTTスキーマのPAC_EMPパッケージ( SCOTT.PAC_EMP )に対して、PAC_EMPという名前のパブリックシノニムを作成します。

1
2
3
4
5
6
7
8
-- SYSTEMなどのパブリックシノニムを作成可能な管理者ユーザーで
SHOW USER
ユーザーは "SYSTEM" です。    -
 
-- SCOTT.PAC_EMPに対してPAC_EMPというパブリックシノニムを作成する
CREATE PUBLIC SYNONYM  PAC_EMP FOR  SCOTT.PAC_EMP;
 
シノニムが作成されました。

シノニムとは単なる別名です。上記のシノニムを作成することで、「PAC_EMP」という名前を使った場合、それは「SCOTT.PAC_EMP」であると解釈されます。
(ただし、自分のスキーマに同名のオブジェクトを所有するユーザーは自分のオブジェクトが優先なので例外です)そしてパブリックなシノニムなので、PAC_EMP ⇒ SCOTT.PAC_EMPへの解釈は全ユーザーに当てはまります。

しかし、全ユーザーに当てはまるとはいっても、やはり他のスキーマのオブジェクトを使うには、結局のところ、権限が必要です。そこで、上記2. の設定として、USER01ユーザーに、SCOTT.PAC_EMPパッケージに対する実行権限(EXECUTE権限)を付与します。

1
2
3
4
5
6
7
8
-- パッケージ所有者であるSCOTTユーザーで(またはSYSTEMなどの権限のある管理者ユーザーでも可)
SHOW USER
ユーザーは "SCOTT" です。
 
-- USER01ユーザーに、SCOTT.PAC_EMPパッケージに対する実行権限(EXECUTE権限)を付与する
GRANT EXECUTE ON SCOTT.PAC_EMP TO USER01;
 
権限付与が成功しました。

これで、USER01ユーザーで、"PAC_EMP"というパッケージ名でもって、"SCOTT.PAC_EMP"パッケージを実行できます。これによりUSER01ユーザーは、SCOTT.PAC_EMPパッケージをもとにしたWEBアプリケーションに対して、所有者であるSCOTTユーザーと全く同じように処理が可能です。

前回のWEBアプリをそのままUSER01ユーザーで実行します。
URLは前回と同じく、以下の通りです。

http://localhost:8080/dad/pac_emp.emp2_insert_form

ログイン画面が表示されるので、SCOTTではなく、USER01ユーザー(上記の例ではパスワード user01)でログインします。

前回と同じ画面が表示されます。

もちろん処理もできます。

いかがですか? SCOTTユーザーでログインした場合と同じですね。これで、複数ユーザーで、PL/SQLプログラムを共有できます。

最後に一つ意識していただきたいのは、複数のPL/SQLプログラムをパッケージにまとめているからこそ、権限の管理が簡単になっている点です。

すなわち、SCOTT.PAC_EMPパッケージには、2つのPL/SQLプロシージャが格納されていますが(フォーム画面生成プロシージャ、フォームデータ処理プロシージャ)、パッケージという大きな単位で実行権限を付与しているので個々のPL/SQLプロシージャに対する権限の付与はありません。また将来、SCOTT.PAC_EMPパッケージに新たなPL/SQLプロシージャを追加(CREATE OR REPLACE句)しても、すでにパッケージに対する実行権限を実行ユーザーに付与しているので、実行ユーザーに新たに権限を付与する必要もありません。

もしパッケージの数が多くなる場合は、ロールを通して権限管理する方法が考えられます。つまり、それら多数のパッケージの実行権限を事前にロールに付与しておいて、そのロールを必要な実行ユーザーに付与するだけで権限設定はOKです。

このように、PL/SQLプログラムをパッケージ化することで、また必要があればロールを使うことで、権限管理が簡単になります。

今回はここまでです。
次回以降は、複数のユーザーでWEBアプリを共有する場合に、セキュリティのためにアクセスログや更新履歴を取得したい場合があります。そのような対応をPL/SQLの機能で実装することをテーマに解説します。

ご期待ください。

先頭へ戻る