PL/SQL Subprograms

8.18. Invoker Rights Versus Definer Rights

Secara default, stored procedures dan SQL methods dieksekusi dengan privileges dari pemilik (owner) mereka, tidak berdasarkan user terkininya. Definer-rights subprograms seperti ini dibatasi terhadap schema dimana mereka berada. Sebagai contoh, mari kita asumsikan bahwa table-table dept berada di dalam schema scott dan blake, dan procedure standalone berikut ini berada di dalam schema scott:

CREATE PROCEDURE create_dept (
my_deptno NUMBER,
my_dname VARCHAR2,
my_loc VARCHAR2) AS
BEGIN
  INSERT INTO dept VALUES (my_deptno, my_dname, my_loc);
END;

Mari kita asumsikan juga bahwa user scott telah memberikan privilege EXECUTE terhadap procedure tersebut kepada user blake. Ketika user blake memanggil procedure tersebut, perintah INSERT dieksekusi dengan privileges dari user scott. Juga, referensi tak terkualifikasi kepada table dept dipisahkan di dalam schema scott. Jadi, meskipun user blake memanggil procedure, ia mengupdate table dept di dalam schema scott.

Bagaimana dapat subprograms di dalam satu schema memanipulasi objects lain di dalam schema lain? Satu caranya adalah mereferensi kepada objects dengan syarat penuh, seperti pada

INSERT INTO blake.dept ...

Namun, menghambat portabilitas. Secara keseluruhan, kita dapat mendefinisikan nama schema sebagai sebuah variable di dalam SQL*Plus.

Cara lain adalah mengkopi subprograms tersebut ke dalam schema lain. Namun, hal ini menghambat maintenance.

Cara terbaik adalah dengan menggunakan klausa AUTHID, yang mengijinkan stored procedures dan SQL methods dieksekusi dengan privileges dan schema context dari user terkini mereka (current user).

Invoker-rights subprograms seperti ini tidak terbatas untuk schema tertentu. Mereka dapat dijalankan oleh macam-macam pengguna. Versi dari procedure create_dept berikut ini dieksekusi dengan privileges dari current user-nya dan menambahkan baris-baris data ke dalam table dept di dalam schema user:

CREATE PROCEDURE create_dept (
my_deptno NUMBER,
my_dname VARCHAR2,
my_loc VARCHAR2) AUTHID CURRENT_USER AS
BEGIN
  INSERT INTO dept VALUES (my_deptno, my_dname, my_loc);
END;

8.18.1. Keuntungan-keuntungan dari Invoker Rights

Invoker-rights subprograms mengijinkan kita untuk menggunakan kembali (reuse) code dan memusatkan application logic. Mereka khususnya berguna di dalam aplikasi-aplikasi yang bertujuan menyimpan data di dalam schema berbeda. Dalam kasus seperti ini, beberapa user dapat mengatur data mereka sendiri menggunakan sebuah basis kode tunggal.

Mari kita misalkan sebuah perusahaan yang menggunakan sebuah definer-rights (DR) procedure untuk menganalisa penjualan. Untuk menyediakan statistik penjualan lokal, procedure analyze harus mengakses table sales yang terletak pada setiap situs regional. Sehingga, seperti ditunjukkan oleh Gambar 8-4, procedure tersebut harus juga berada pada setiap situs regional. Hal ini menyebabkan sebuah problem pemeliharaan.

Gambar 8-4 Definer-Rights Problem: Multiple Copies of Identical Procedures

Untuk mengatasi masalah ini, perusahaan memasang sebuah versi invoker-rights (IR) dari procedure analyze pada kantor pusat. Sekarang, seperti ditunjukkan oleh Gambar 8-5, seluruh situs regional dapat menggunakan procedure yang sama untuk menampilkan data dari table-table sales mereka sendiri.

Gambar 8-5 Invoker-Rights Solution: Single Procedure that Operates on Multiple Schemas

Untuk membatasi akses terhadap data sensitif, kita dapat memiliki sebuah invoker-rights subprogram yang memanggil sebuah definer-rights subprogram. Misalkan kantor pusat menginginkan procedure analyze mengkalkulasi komisi-komisi penjualan dan meng-update table payroll pusat.

Hal tersebut menghadirkan sebuah permasalahan karena user-user terkini dari analyze sebaiknya tidak mengakses secara langsung ke table payroll, yang menyimpan gaji-gaji karyawan dan data-data sensitif lain. Seperti ditunjukkan oleh Gambar 8-6, solusinya adalah dengan mengharuskan procedure analyze memanggil definer-rights procedure calc_comm, yang akan meng-update table payroll.

Gambar 8-6 Controlled Access to an Invoker-Rights Subprogram

 

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

 

Buku ini membahas berbagai macam tip dan trik yang sangat berguna bagi Anda pembaca pengguna database Oracle. Pemula, mahasiswa, programmer, maupun database administrator yang mengharapkan solusi cepat dalam menangani permasalahan-permasalahan dalam penggunaan database Oracle dapat membaca buku ini. Anda tidak harus membaca buku ini secara urut karena buku ini di susun berdasarkan topik permasalahan, dan Anda dapat membaca topik-topik yang sesuai dengan permasalahan yang Anda hadapi.
Dapat di beli di toko buku Gramedia, Gunung Agung, Uranus, Karisma dsb. Harga Rp. 24.800,- (157 halaman)

 

Related Articles

 

Comments

[…] PL/SQL Subprograms | Hastinapura […]

[…] Silahkan melanjutkan membaca pembahasan PL/SQL Subprograms […]

[…] Klausa AUTHID menentukan apakah seluruh subprogram-subprogram ter-package dijalankan dengan privileges dari definer (default) atau invoker-nya, dan apakah referensi tak terkualifikasi dari mereka terhadap schema objects ditetapkan di dalam schema dari definer atau invoker tersebut. Untuk informasi lebih, kita dapat membaca kembali pembahasan PL/SQL Subprograms. […]

[…] Dynamic SQLPL/SQL Object TypesPL/SQL PackagesPL/SQL SubprogramsInteraksi PL/SQL dengan […]

Leave a comment

(required)

(required)


*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word