PL/SQL Subprograms
8.18.7. Menggunakan Roles Bersama Invoker-Rights Subprograms
Penggunaan roles di dalam sebuah subprograms bergantung kepada apakah ia dijalankan dengan definer rights atau invoker rights. Dengan sebuah definer-rights subprogram, seluruh roles di-disable. Roles tidak digunakan untuk pemeriksaan privilege, dan kita tidak dapat mengatur roles.
Bersama sebuah invoker-rights subprogram, roles di-enable-kan (kecuali subprogram tersebut dipanggil secara langsung atau secara tidak langsung oleh sebuah definer-rights subprogram). Roles digunakan untuk pemeriksaan privilege, dan kita dapat menggunakan native dynamic SQL untuk mengatur roles untuk session tersebut. Namun, kita tidak dapat menggunakan roles untuk memberikan privileges pada tempate objects karena roles diterapkan pada saat run time, bukan pada saat compile time.
8.18.8. Menggunakan Views dan Database Triggers Bersama Invoker-Rights Subprograms
Untuk invoker-rights subprogram yang dijalankan di dalam sebuah ekspresi view, pemilik view, bukan pengguna view, dianggap sebagai current user. Sebagai contoh, misalkan user scott menciptakan sebuah view seperti berikut ini. Invoker-rights function layout selalu dijalankan bersama dengan privilege dari user scott, yang merupakan pemilik dari view tersebut.
CREATE VIEW payroll AS SELECT layout(3) FROM dual;
Aturan ini juga berlaku terhadap database triggers.
8.18.9. Menggunakan Database Links Bersama Invoker-Rights Subprograms
Invoker rights berpengaruh hanya kepada satu jenis database link – current-user links, yang diciptakan seperti berikut ini:
CREATE DATABASE LINK link_name CONNECT TO CURRENT_USER USING connect_string;
Sebuah current-user link mengijinkan kita untuk terkoneksi ke sebuah remote database sebagai user lain, dengan privileges user tersebut. Untuk terhubung, Oracle menggunakan username dari current user tersebut (yang mana harus berupa sebuah global user). Misalkan sebuah invoker-rights subprogram yang dimiliki oleh user blake mereferensi ke database link di di bawah ini. Jika global user scott memanggil subprogram tersebut, ia terhubung ke database di Dallas sebagai user scott, yang mana merupakan current user.
CREATE DATABASE LINK dallas CONNECT TO CURRENT_USER USING ...
Jika ia merupakan sebuah definer-rights subprogram, maka current user-nya adalah blake. Sehingga, subprogram tersebut akan terkoneksi ke database Dallas sebagai global user blake.
8.18.10. Mengunakan Object Types Bersama Invoker-Rights Subprograms
Untuk mendefinisikan object types untuk penggunaan di dalam suatu schema, kita sebutkan klausa AUTHID CURRENT_USER. Misalkan user blake menciptakan object type berikut ini:
CREATE TYPE Num AUTHID CURRENT_USER AS OBJECT ( x NUMBER, STATIC PROCEDURE new_num ( n NUMBER, schema_name VARCHAR2, table_name VARCHAR2) ); CREATE TYPE BODY Num AS STATIC PROCEDURE new_num ( n NUMBER, schema_name VARCHAR2, table_name VARCHAR2) IS sql_stmt VARCHAR2(200); BEGIN sql_stmt := 'INSERT INTO ' || schema_name || '.' || table_name || ' VALUES (blake.Num(:1))'; EXECUTE IMMEDIATE sql_stmt USING n; END; END;
Kemudian, user blake memberikan privilege EXECUTE pada object type Num kepada user scott:
GRANT EXECUTE ON Num TO scott;
Akhirnya, user scott menciptakan sebuah object table untuk menyimpan objects dengan tipe Num, kemudian memanggil procedure new_num untuk mempopulasikan table tersebut:
CONNECT scott/tiger; CREATE TABLE num_tab OF blake.Num; / BEGIN blake.Num.new_num(1001, 'scott', 'num_tab'); blake.Num.new_num(1002, 'scott', 'num_tab'); blake.Num.new_num(1003, 'scott', 'num_tab'); END; /
Pemanggilan berhasil karena procedure dijalankan dengan privileges dari current user-nya (scott), bukan ownernya (blake).
Untuk subtypes di dalam sebuah hirarki object type, aturan-aturan berikut berlaku:
- Jika sebuah subtype tidak secara eksplisit menyebutkan klausa AUTHID, maka ia mewarisi AUTHID dari supertype-nya.
- Jika sebuah subtype tidak menyebutkan klausa AUTHID, maka AUTHID-nya harus sesuai dengan AUTHID dari supertype-nya. Juga, jika AUTHID tersebut adalah DEFINER, baik supertype maupun subtype harus diciptakan di dalam schema yang sama.
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, Uranus dsb. |


































