PL/SQL Subprograms

8.18.5. Mengesampingkan Resolusi Nama Default dalam Invoker-Rights Subprograms

Terkadang, kita mungkin ingin mengesampingkan kelakuan default dari invoker-rights. Misalkan user scott mendefinisikan standalone procedure di bawah ini. Perhatikan bahwa perintah SELECT memanggil sebuah external function. Secara normal, referensi eksternal ini akan ditetapkan di dalam schema dari current user.

CREATE PROCEDURE calc_bonus (emp_id INTEGER)
AUTHID CURRENT_USER AS
mid_sal REAL;
BEGIN
SELECT median(sal) INTO mid_sal FROM emp;
...
END;

Untuk membuat referensi ditetapkan di dalam schema dari owner-nya, ciptakan sebuah public synonym untuk function menggunakan perintah CREATE SYNONYM, seperti berikut ini:

CREATE PUBLIC SYNONYM median FOR scott.median;

Hal ini dapat bekerja kecuali current user telah mendefinisikan sebuah function atau private synonym dengan nama median. Secara alternatif, kita dapat secara penuh memenuhi referensi tersebut, seperti berikut ini:

BEGIN
  SELECT scott.median(sal) INTO mid_sal FROM emp;
  ...
END;

Hal ini dapat bekerja kecuali current user telah mendefinisikan sebuah package dengan nama scott yang mengandung sebuah function bernama median.

8.18.6. Memberikan Privileges pada Invoker-Rights Subprograms

Untuk memanggil sebuah subprogram secara langsung, pengguna harus memiliki privilege EXECUTE pada subprogram tersebut. Dengan memberikan privilege, kita mengijinkan seorang pengguna untuk:

Untuk referensi eksternal yang ditetapkan dalam schema dari current user (seperti dalam perintah-perintah DML), current user harus memiliki privileges yang diperlukan untuk mengakses schema objects yang direferensi oleh subprogram tersebut. Untuk seluruh referensi eksternal lainnya (seperti pemanggilan-pemanggilan function), privileges dari owner diperiksa saat compile time, dan pemeriksaan no-runtime selesai dilakukan.

Sebuah definer-rights subprogram beroperasi di bawah security domain dari owner-nya, tidak peduli siapa yang mengaksesnya. Sehingga, owner harus memiliki privileges yang diperlukan untuk mengakses schema objects yang direferensi oleh subprogram tersebut.

Kita dapat menulis sebuah program yang terdiri dari beberapa subprograms, beberapa dengan definer rights dan lainnya dengan invoker rights. Kemudian, kita dapat menggunakan privilege EXECUTE untuk membatasi program entry points (controlled step-in). Dengan cara seperti itu, pengguna-pengguna dari sebuah entry-point subprogram dapat menjalankan subprograms lainnya secara tidak langsung tetapi tidak secara langsung.

8.18.6.1. Memberikan Privileges pada Sebuah Invoker-Rights Subprogram: Contoh

Misalkan user util memberikan privilege EXECUTE pada subprogram fft kepada user app, seperti berikut ini:

GRANT EXECUTE ON util.fft TO app;

Sekarang, user app dapat meng-compile functions dan procedures yang memanggil subprogram fft. Saat run time, tidak ada pemeriksaan privilege yang dilakukan saat pemanggilan. Sehingga, seperti Gambar 8-7, user util tidak perlu memberikan privilege EXECUTE ke setiap user yang mungkin memanggil fft secara tidak langsung.

Perhatikan bahwa subprogram util.fft dipanggil secara tidak langsung hanya dari invoker-rights subprogram app.entry. Sehingga, user util harus memberikan privilege EXECUTE hanya kepada user app. Ketika util.fft dijalankan, current user-nya bisa jadi app, scott, atau blake bahkan meskipun scott dan blake tidak diberikan privilege EXECUTE.

Gambar 8-7 Pemanggilan Tak Langsung Ke 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