Anda di halaman 1dari 12

View dan Kontrol Akses

Views

View merupakan hasil dinamik dari satu atau lebih operasi relasional yang dioperasikan pada relasi dasar untuk menghasilkan relasi lain. View merupakan relasi virtual yang tidak perlu ada dalam database tetapi dihasilkan dari permintaan permintaan khusus para user pada saat itu. Isi dari view didefinisikan sebagai query pada satu atau lebih relasi dasar. Dengan view resolution (pemecahan), operasi apapun pada view secara otomatis di terjemahkan kedalam operasi pada relasi mana view tersebut dihasilkan. Dengan view materialization (perwujudan), view disimpan sebagai tabel sementara, yang diatur sebagai tabel dasar utama yang telah diubah.

SQL Membuat view (CREATE VIEW) Format penulisan CREATE VIEW : CREATE VIEW ViewName [ (newColumnName [,...]) ] AS subselect [WITH [CASCADED | LOCAL] CHECK OPTION]

Dapat menetapkan nama untuk setiap kolomnya. Jika nama kolom didefinisikan, akan memiliki jumlah item yang sama dengan jumlah kolom yang dihasilkan oleh subselect. Jika nama kolom tidak didefinisikan, maka setiap kolom akan memiliki nama sesuai dengan kolom dalam subselect. Nama tabel harus ditentukan jika terdapat nama kolom yang sama (ambiguity). Subselect dikenal juga sebagai defining query. Penggunaan WITH CHECK OPTION memastikan jika tidak ada baris yang memenuhi kondisi clause WHERE pada defining query, maka tidak akan ditambahkan pada tabel dasar yang ditetapkan.

Memerlukan hak SELECT pada semua tabel yang ditunjuk dalam subselect dan hak USAGE pada domain yang digunakan dalam kolom yang ditunjuk

Contoh Membuat view horisontal (Create Horizontal View) Buatlah view, sehingga manager dikantor cabang B003 hanya dapat melihat detail staff yang bekerja di kantor cabang tersebut. CREATE VIEW Manager3Staff AS SELECT * Nur Ani, ST BASIS DATA

Pusat Pengembangan Bahan Ajar - UMB

FROM Staff WHERE branchNo = B003;

Contoh Membuat view vertikal (Create Vertical View) Buatlah view detail staff dikantor cabang B003 tidak termasuk gaji. CREATE VIEW Staff3 AS SELECT staffNo, fName, lName, position, sex FROM Staff WHERE branchNo = B003;

Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Contoh View gabungan dan dikelompokan (Grouped and Joined Views) Buatlah view dari staff yang mengatur properti untuk disewakan, termasuk nomor kantor cabang tempat mereka bekerja, nomor staff dan jumlah properti yang ditangani.

CREATE VIEW StaffPropCnt (branchNo, staffNo, cnt) AS SELECT s.branchNo, s.staffNo, COUNT(*) FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo GROUP BY s.branchNo, s.staffNo;

SQL Menghapus View (DROP VIEW) Format penulisan DROP VIEW : DROP VIEW ViewName [RESTRICT | CASCADE] Akan menyebabkan terhapusnya pendefinisian view dari database.

Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Contoh

DROP VIEW Manager3Staff; Jika CASCADE didefinisikan, maka semua objek yang terkait/terhubung akan dihapus. Misalkan, view yang didefinisikan dari view yang dihapus. Jika RESTRICT (Default) didefinisikan, maka jika terdapat objek lain yang bergantung pada view yang akan dihapus, perintah penghapusan view akan ditolak.

View Resolution Carilah jumlah properti yang ditangani oleh setiap anggota staff dari kantor cabang B003. SELECT staffNo, cnt FROM StaffPropCnt WHERE branchNo = B003 ORDER BY staffNo; View resolution menggabungkan query diatas dengan defining query dari view StaffPropCnt sbb (a) : Nama kolom view dalam daftar SELECT diterjemahkan kedalam nama kolom yang dimaksud dalam defining query: SELECT s.staffNo As staffNo, COUNT(*) As cnt (b) Nama view dalam FROM digantikan dengan daftar FROM yang ditunjukan dalam defining query: FROM Staff s, PropertyForRent p (c) WHERE dari query user dikombinasikan dengan WHERE dari defining query menggunakan AND: WHERE s.staffNo = p.staffNo AND branchNo = B003 (d) Clause GROUP BY dan HAVING disalin dari defining query: GROUP BY s.branchNo, s.staffNo (e) ORDER BY disalin dari query dengan nama kolom view diterjemahkan kedalam nama kolom defining query :
Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

ORDER BY s.staffNo (f) Hasil akhir penggabungan query, dieksekusi untuk menampilkan hasil SELECT s.staffNo, COUNT(*) FROM staff s, PropertyForRent p WHERE s.staffNo = p.staffNo AND branchNo = B003 GROUP BY s.branchNo, s.staffNo ORDER BY s.staffNo; Pembatasan pada View (Restrictions on Views) SQL menentukan beberapa batasan pada pembuatan dan penggunaan view (a) Jika kolom dalam view berdasarkan pada fungsi aggregate, maka : Kolom hanya boleh muncul dalam clause SELECT dan ORDER BY dari query yang mengakses view. Kolom tidak dapat digunakan dalam WHERE maupun argumen untuk fungsi aggregate dalam query yang berasal dari view.

Contoh, query berikut adalah salah SELECT COUNT(cnt) FROM StaffPropCnt; Dan SELECT * FROM StaffPropCnt WHERE cnt > 2;

(b)

View yang dikelompokkan tidak akan pernah digabungkan dengan tabel dasar atau view.

Contoh

: view StaffPropCnt merupakan view yang dikelompokkan,

oleh sebab itu usaha untuk menggabungkan view ini atau tabel lainnya akan gagal.

View Updatability Seluruh update yang dilakukan pada tabel dasar akan terlihat dalam semua view Maka dapat dikatakan, jika view di-update/diubah maka tabel dasar akan yang mengandung tabel dasar tersebut. menggambarkan /menampilkan perubahannya.
Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Perhatikan view StaffPropCnt, jika akan dimasukan record pada kantor cabang INSERT INTO StaffPropCnt VALUES (B003, SG5, 2);

B003, SG5 mengatur 2 properti, dapat dituliskan :

Maka harus memasukan 2 record ke tabel PropertyForRent, yang menampilkan

properti mana yang diatur oleh SG5, tetapi tidak diketahui properti mana, yaitu tidak diketahui primary key dari property yang dimaksud.

Jika merubah pendefinisian view dan mengganti count dengan jumlah properti : CREATE VIEW StaffPropList (branchNo, staffNo, propertyNo) AS SELECT s.branchNo, s.staffNo, p.propertyNo FROM Staff s, PropertyForRent p WHERE s.staffNo = p.staffNo;

yang sebenarnya, sbb

Lalu masukan record : INSERT INTO StaffPropList VALUES (B003, SG5, PG19);

Maka masih akan tetap bermasalah, karena dalam tabel PropertyForRent,

seluruh kolom kecuali postcode dan staffNo tidak memperbolehkan NULL, dan tidak dapat memasukan nilai pada kolom-kolom NON NULL. ISO menetapkan, suatu view harus dapat di-update dalam sistem yang sesuai Sebuah view dapat di-update jika dan hanya jika o o o o o o DISTINCT tidak ditetapkan/digunakan. Setiap elemen dalam daftar SELECT dari defining query merupakan nama kolom dan tidak ada kolom yang muncul lebih dari satu kali Clause FORM ditetapkan hanya 1 tabel, tidak termasuk view yang berasal dari join, union, intersection atau difference. Tidak terdapat nested SELECT yang mengacu ke outer tabel. Tidak terdapat clause GROUP BY atau HAVING. Setiap baris yang ditambahkan melalui view harus tidak melanggar batasan integritas dari tabel dasar. : dengan standar.

Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Updatable View Untuk view yang dapat diubah, DBMS harus berkemampuan untuk menelusuri kebelakang setiap baris atau kolom pada baris atau kolom dalam tabel asal/sumber. WITH CHECK OPTION

Suatu baris muncul dalam view karena memenuhi kondisi dalam clause WHERE dari defining query. Jika baris berubah dan tidak lagi memenuhi kondisi, maka akan dihilangkan dari view. Baris baru akan muncul dalam view jika insert/update pada view memenuhi kondisi WHERE. Baris yang masuk atau keluar dari view disebut baris migrasi (migrating rows). WITH CHECK OPTION menghalangi baris migrasi keluar dari view. Terdapat qualifier optional LOCAL/CASCADED. Jika ditetapkan WITH LOCAL CHECK OPTION, maka setiap baris yang diinsert/update pada view ini dan setiap view yang didefinisikan secara langsung maupun tidak langsung pada view ini harus tidak menyebabkan baris hilang dari view kecuali baris dihilangkan dari derived view/table.

JIKA ditetapkan WITH CASCADED CHECK OPTION (Default), maka setiap baris yang di-insert/update pada view ini dan pada setiap view yang didefinisikan secara langsung ataupun tidak langsung pada view ini harus tidak menyebabkan baris hilang dari view.

Contoh - WITH CHECK OPTION Perhatikan statemen dibawah ini CREATE VIEW Manager3Staff AS SELECT * FROM Staff WHERE branchNo = B003 WITH CHECK OPTION; Misalkan salah satu baris akan di-update nomor cabangnya dari B003 menjadi B005, sbb : SET branchNo = B005 WHERE staffNo = SG37; UPDATE Manager3Staff :

Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Penulisan WITH CHECK OPTION pada definisi view akan menggagalkan perintah diatas, karena dapat menyebabkan baris bermigrasi. Juga tidak dapat memasukan baris kedalam view jika nomor cabang tidak sama dengan B003, contoh : INSERT INTO Manager3Staff VALUES (SL15, Mary, Black Assistant, F, DATE1967-06-21, 8000, B002);

Penulisan WITH CHECK OPTION pada definisi view akan mencegah pemasukkan data ke tabel Staff . Jika Manager3Staff didefinisikan tidak pada tabel Staff langsung tetapi pada view lain dari tabel Staff : CREATE VIEW LowSalary AS SELECT * FROM Staff WHERE salary > 9000; CREATE VIEW HighSalary AS SELECT * FROM LowSalary WHERE salary > 10000 WITH LOCAL CHECK OPTION; CREATE VIEW Manager3Staff AS SELECT * FROM HighSalary WHERE branchNo = B003;

Jika akan dilaksanakan update sbb : UPDATE Manager3Staff SET salary = 9500 WHERE staffNo = SG37;

Maka perintah diatas akan gagal, walaupun update akan menyebabkan baris hilang dari HighSalary, tetapi tidak akan hilang dari LowSalary. Jika update mencoba untuk menetapkan salary = 8000, update akan dilaksanakan dan baris tersebut tidak lagi menjadi bagian dari LowSalary. Jika HighSalary ditetapkan WITH CASCADED CHECK OPTION, penetapan salary menjadi 9500 atau 8000 akan ditolak karena menyebabkan baris dihilangkan dari HighSalary.

Untuk

mengatasi

penyimpangan

seperti

ini,

setiap

view

harus

dibuat

menggunakan WITH CASCADED CHECK OPTION.


Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Keuntungan dari Views Kemandirian data (Data independence) Ketepatan (Currency) Meningkatkan keamanan (Improved security) Mengurangi kerumitan (Reduced complexity) Kenyamanan (Convenience) Customization Integritas data (Data integrity)

Disadvantages of Views Pembatasan update (Update restriction) Pembatasan struktur (Structure restriction) Performance

View Materialization

View Materialization, yaitu menyimpan sebuah view sebagai tabel sementara (temporary) dalam database pada saat view di-query-kan pertama kali. Query yang berdasarkan materialized view akan lebih cepat dihasilkan daripada membuat ulang view setiap saat. Materialized view bermanfaat dalam aplikasi baru seperti data warehousing, replication server, data visualization, dan mobile system. Pemeriksaan batasan integritas dan optimisasi query juga merupakan manfaat dari materialized view. Kesulitan dari pendekatan ini adalah pemeliharaan ketepatan view ketika tabel dasar diubah. Proses perubahan (updating) suatu materialized view sebagai respon terhadap perubahan data sumber disebut View maintenance . Tujuan utama dari view maintenance adalah menampilkan hal-hal yang berubah agar ketepatan view selalu terjaga. Perhatikan view berikut :

CREATE VIEW StaffPropRent(staffNo) AS SELECT DISTINCT staffNo FROM PropertyForRent WHERE branchNo = B003 AND rent > 400;

Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Hasil dari perintah diatas

staffNo SG37 SG14 Jika akan dimasukan record baru ke tabel PropertyForRent dimana rent <= 400 maka view tidak akan berubah. Jika akan dimasukan data (PG24, , 550, CO40, SG19, B003) ke tabel PropertyForRent, maka baris baru akan muncul pada materialized view. Tetapi jika data yang akan dimasukan adalah (PG54, , 450, CO89, SG37, B003) maka tidak akan terjadi penambahan baris karena SG37 sudah ada dalam materialized view.

Access Control - Authorization Identifiers and Ownership

Authorization identifier merupakan identifier yang digunakan untuk membuat identifikasi dari user. Biasanya memiliki password. Digunakan untuk menetapkan objek apa yang boleh digunakan user dan operasi apa yang boleh dilakukan pada objek tersebut. Setiap object yang dibuat didalam SQL memiliki Owner, seperti yang ditetapkan dalam clause AUTHORIZATION dari skema objek yang dituju. Owner adalah orang yang mengetahui tentang keberadaan objek dan operasi apa saja yang dapat dilakukan.

Privileges (Hak) Aksi yang dapat dilakukan oleh user terhadap tabel dasar atau view o o o o o o SELECT INSERT Mengambil (Retrieve) data dari tabel Memasukan (Insert) baris baru kedalam tabel :

UPDATE Merubah (Modify) baris dari data dalam tabel DELETE Menghapus baris data dari tabel Kolom referensi (Reference columns) dari tabel yang Menggunakan domain, collation, character set, dan

REFERENCES USAGE translation.

disebutkan dalam integrity constraint.

Dapat membatasi INSERT/UPDATE/REFERENCES untuk kolom Pemilik tabel harus memberikan wewenang kepada user lain hak-hak

yang ditentukan. yang dianggap perlu dengan menggunakan perintah GRANT.

Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Untuk membuat view, user harus mempunyai hak SELECT pada

seluruh tabel yang digunakan untuk membuat view dan hak REFERENCE pada kolom tertentu. GRANT Format penulisan GRANT GRANT ON TO ObjectName {AuthorizationIdList | PUBLIC} : PRIVILEGES} {PrivilegeList | ALL

[WITH GRANT OPTION]

PrivilegeList berisi satu atau lebih hak (privilege) yang dipisahkan dengan koma. ALL PRIVILEGES memberikan seluruh hak (privilege) kepada user. PUBLIC memungkinkan akses diberikan ke user saat ini dan selanjutnya. ObjectName dapat berupa tabel dasar, view, domain, character set, collation (pemeriksaan) atau translation (penerjemahan). WITH GRANT OPTION memungkinkan privilege diberikan oleh seorang user ke user lainnya.

Contoh - GRANT Berikan hak penuh kepada manager untuk menggunakan tabel Staff : GRANT ALL PRIVILEGES ON Staff TO Manager WITH GRANT OPTION; Berikan user Personnel dan Director hak SELECT dan UPDATE pada kolom salary dari tabel Staff : GRANT SELECT, UPDATE (salary) ON Staff TO Personnel, Director; Contoh- GRANT Specific Privileges to PUBLIC Berikan seluruh user hak SELECT pada tabel Branch. GRANT SELECT ON Branch TO PUBLIC;

Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

REVOKE REVOKE, mengambil kembali hak yang diberikan oleh statemen GRANT, format penulisan REVOKE sbb: REVOKE [GRANT OPTION FOR] {PrivilegeList | ALL PRIVILEGES} ON ObjectName FROM {AuthorizationIdList| PUBLIC} [RESTRICT | CASCADE] ALL PRIVILEGES, seluruh hak yang diberikan untuk user. GRANT OPTION FOR memungkinkan hak (privilege) yang diberikan via WITH GRANT OPTION dari GRANT akan diambil terpisah. REVOKE akan gagal, jika hasil dalam objek yang diabaikan, seperti view, kecuali digunakan keyword CASCADE. Hak yang diberikan kepada user oleh user lainnya tidak berpengaruh

Contoh - REVOKE Specific Privileges Ambil hak SELECT pada tabel Branch dari seluruh user REVOKE SELECT ON Branch FROM PUBLIC; Ambil seluruh hak yang telah diberikan pada Director untuk tabel Staff. REVOKE ALL PRIVILEGES ON Staff FROM Director;

Pusat Pengembangan Bahan Ajar - UMB

Nur Ani, ST BASIS DATA

Anda mungkin juga menyukai