Dokumen ini memperkenalkan dan menjelaskan tampilan Spanner.
Ringkasan
Tampilan adalah tabel virtual yang ditentukan oleh kueri SQL. Saat membuat tampilan, Anda menentukan kueri SQL yang diwakilinya. Setelah membuat tampilan, Anda dapat menjalankan kueri yang merujuk ke tampilan seolah-olah itu adalah tabel.
Saat kueri yang merujuk ke tampilan dijalankan, Spanner membuat tabel virtual dengan menjalankan kueri yang ditentukan dalam tampilan, dan konten tabel virtual tersebut digunakan oleh kueri yang merujuk.
Karena kueri yang menentukan tampilan dijalankan setiap kali kueri yang merujuk ke tampilan dijalankan, tampilan terkadang disebut tampilan logis atau tampilan dinamis untuk membedakannya dari tampilan terwujud SQL, yang menyimpan hasil kueri yang menentukan tampilan sebagai tabel sebenarnya dalam penyimpanan data.
Di Spanner, Anda dapat membuat tampilan sebagai tampilan hak pemanggil atau tampilan hak penentu. Keduanya adalah dua jenis model keamanan yang mengontrol akses ke tampilan bagi pengguna.
Tampilan hak pemanggil | Tampilan hak penentu | |
---|---|---|
Deskripsi | Jika Anda membuat tampilan dengan hak pemanggil, peran database memerlukan hak istimewa pada tampilan dan semua objek skema yang dirujuk tampilan untuk mengkueri tampilan tersebut. Untuk mengetahui informasi selengkapnya, lihat Tampilan hak pemanggil. | Jika Anda membuat tampilan dengan hak penentu, peran database memerlukan hak istimewa pada tampilan (dan hanya tampilan) untuk membuat kueri tampilan. Gunakan kontrol akses terperinci bersama tampilan hak penentu, jika tidak, tampilan hak penentu tidak akan menambahkan kontrol akses tambahan. Untuk informasi selengkapnya, lihat Tampilan hak pemilik. |
Izin yang diperlukan untuk membuat tampilan | Untuk membuat, memberikan, dan mencabut
akses ke salah satu jenis tampilan, Anda harus memiliki izin
spanner.database.updateDdl tingkat database. |
|
Hak istimewa yang diperlukan untuk membuat kueri tampilan | Peran database memerlukan hak istimewa untuk tampilan dan semua objek skemanya yang mendasarinya untuk membuat kueri tampilan. | Peran database memerlukan hak istimewa ke tampilan (dan hanya tampilan) untuk mengirim kueri ke tampilan. |
Manfaat penayangan
Tampilan menawarkan beberapa manfaat dibandingkan menyertakan kueri yang ditentukan dalam logika aplikasi.
Tampilan dapat menyediakan pemodelan data logis ke aplikasi.
Terkadang pilihan yang masuk akal untuk pemodelan data fisik di Spanner bukanlah abstraksi terbaik untuk aplikasi yang membaca data tersebut. Tampilan dapat menyajikan skema tabel alternatif yang merupakan abstraksi yang lebih sesuai untuk aplikasi.
Tampilan memusatkan definisi kueri sehingga menyederhanakan pemeliharaan.
Dengan membuat tampilan untuk kueri yang banyak digunakan atau kompleks, Anda dapat memisahkan teks kueri dari aplikasi dan memusatkannya. Dengan begitu, memperbarui teks kueri di seluruh aplikasi menjadi lebih sederhana dan memungkinkan revisi serta penyesuaian kueri tanpa perlu mengubah kode aplikasi.
Tampilan memberikan stabilitas di seluruh perubahan skema.
Karena kueri yang menentukan tampilan disimpan dalam skema database, bukan dalam logika aplikasi, Spanner dapat dan memastikan bahwa perubahan skema pada objek (tabel, kolom, dan sebagainya) yang dirujuk oleh kueri tidak membatalkan kueri.
Kasus penggunaan umum
Gunakan tampilan saat database Spanner Anda menyertakan data yang sangat istimewa yang tidak boleh diekspos ke semua pengguna database atau jika Anda ingin mengenkapsulasi data Anda.
Jika tampilan Anda tidak memerlukan fungsi keamanan tambahan dan semua pemanggil tampilan memiliki akses ke semua objek skema yang dirujuk tampilan, buat tampilan hak pemanggil.
Jika Anda ingin membuat tampilan yang tidak semua pemanggilnya memiliki akses ke semua objek skema yang dirujuk tampilan, buat tampilan hak penentu. Tampilan hak definer lebih terlindungi dan memiliki lebih banyak batasan karena admin database dapat memberikan hak istimewa kepada lebih sedikit pengguna pada tabel dan kolom yang dirujuk dalam tampilan. Tampilan hak penentu berguna saat pengguna memerlukan cara untuk mengakses subset database Spanner yang relevan secara aman. Misalnya, Anda mungkin ingin membuat tampilan hak pemilik untuk data berikut:
- Data akun pribadi (misalnya, pelanggan aplikasi).
- Data khusus peran (misalnya, Personel HR, tenaga penjualan).
- Data spesifik per lokasi.
Tampilan hak pemanggil
Jika tampilan memiliki hak pemanggil, artinya saat pengguna, yaitu pemanggil, menjalankan kueri terhadap tampilan, Spanner akan memeriksa hak istimewa pengguna pada tampilan dan pada semua objek skema yang dirujuk oleh tampilan. Pengguna harus memiliki hak istimewa pada semua objek skema untuk membuat kueri tampilan.
Tampilan hak penentu
Tampilan hak penentu menambahkan fungsi keamanan tambahan ke tampilan. Hak istimewa yang berbeda diberikan pada tampilan dan objek skema yang mendasarinya. Seperti untuk tampilan hak pemanggil, pengguna harus memiliki izin tingkat database untuk membuat tampilan hak penentu. Perbedaan utamanya adalah saat peran database mengirimkan kueri ke tampilan hak istimewa penentu, Spanner akan memverifikasi bahwa peran tersebut memiliki akses ke tampilan itu sendiri (dan hanya tampilan tersebut). Oleh karena itu, meskipun pengguna yang membuat kueri tampilan tidak memiliki akses ke semua objek skema pokok, mereka dapat mengakses tampilan dan melihat isinya. Tampilan hak penentu memberikan akses pengguna ke data baru, yang dibatasi pada baris yang ditentukan dalam tampilan.
Izin Identity and Access Management (IAM) Spanner diberikan di tingkat database. Gunakan kontrol akses terperinci
bersama tampilan hak penentu, jika tidak, tampilan hak penentu tidak akan menambahkan
kontrol akses tambahan. Hal ini karena jika pengguna memiliki izin baca
pada database, mereka memiliki izin baca pada semua objek skema dalam
database. Setelah Anda mengonfigurasi kontrol akses terperinci di database, pengguna kontrol akses terperinci dengan hak istimewa SELECT
pada tampilan dan pengguna dengan izin tingkat database di database dapat membuat kueri tampilan. Perbedaannya adalah pengguna kontrol akses terperinci tidak memerlukan hak istimewa pada objek pokok.
Batasan tampilan
Tampilan memiliki batasan dibandingkan dengan tabel sebenarnya yang membuatnya tidak sesuai untuk kasus penggunaan tertentu.
Tampilan bersifat hanya baca. Kabel ini tidak dapat digunakan untuk menambahkan, memperbarui, atau menghapus data.
Anda tidak dapat menggunakan tampilan dalam pernyataan DML (
INSERT
,UPDATE
,DELETE
).Kueri yang menentukan tampilan tidak dapat menggunakan parameter kueri.
Tampilan tidak dapat diindeks.
Referensi ke tampilan tidak dapat menggunakan petunjuk tabel.
Namun, kueri yang menentukan tampilan dapat menyertakan petunjuk tabel pada tabel yang dirujuknya.
Tampilan tidak didukung oleh Read API.
Tampilan hak-hak penentu tidak didukung dengan Data Boost Spanner.
Menjalankan kueri yang berisi tampilan hak pemilik di Data Boost akan menghasilkan error.
Mode kueri yang direkomendasikan untuk mengakses tampilan hak penentu adalah mode
NORMAL
.Pengguna yang tidak memiliki akses ke objek skema pokok tampilan hak istimewa penerapan menerima error saat membuat kueri dalam mode kueri selain normal.
Pengguna dapat membuat kueri yang dibuat dengan cermat yang menyebabkan Spanner menampilkan error yang menunjukkan atau mengungkapkan keberadaan data yang tidak tersedia dalam tampilan hak istimewa penentu.
Misalnya, asumsikan ada tampilan QualifiedStudentScores berikut yang menampilkan skor siswa yang memenuhi syarat untuk mengikuti kursus. Kriteria untuk memenuhi syarat didasarkan pada level dan skor ujian siswa. Jika tingkat siswa sama dengan atau lebih rendah dari enam, skor penting, dan siswa harus mendapatkan setidaknya 50 poin dalam ujian untuk memenuhi syarat. Jika tidak, untuk level yang sama dengan atau lebih besar dari enam, siswa memenuhi syarat secara default.
CREATE VIEW QualifiedStudentScores SQL SECURITY DEFINER AS SELECT s.Name, s.Level, sc.Score FROM Students AS s JOIN Scores AS sc ON sc.StudentId = s.StudentId WHERE (CASE WHEN (s.Level < 6) OR (s.Level >= 6 AND sc.Score >= 50) THEN 'QUALIFIED'; ELSE 'FAILED'; END) = 'QUALIFIED';
Pengguna dapat menjalankan kueri dalam bentuk
SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;
. Kueri ini dapat gagal dengan error pembagian dengan nol jika ada siswa di level 7 yang mendapat skor 20 poin, meskipun tampilan membatasi data hingga 50 poin ke atas untuk level tersebut.
Performa kueri saat menggunakan tampilan
Kueri yang merujuk ke tampilan berperforma sebanding dengan kueri yang sama dengan referensi tampilannya diganti dengan definisi tampilan.
Kuota dan batas yang berlaku untuk tampilan
Halaman Kuota & batas mencantumkan informasi kuota dan batas khusus untuk tampilan.
Penggunaan tampilan dalam kueri dapat memengaruhi kepatuhan kueri tersebut terhadap batas kueri karena definisi tampilan menjadi bagian dari kueri.
Dampak biaya
Penggunaan tampilan memiliki dampak yang sangat kecil pada biaya instance:
Penggunaan tampilan tidak memengaruhi kebutuhan kapasitas komputasi instance, dibandingkan dengan menyematkan teks kueri yang ditentukan dalam kueri yang merujuknya.
Penggunaan tampilan memiliki dampak yang sangat kecil pada penyimpanan database instance karena tabel yang dihasilkan dengan menjalankan definisi kueri tampilan tidak disimpan ke penyimpanan database persisten.
Langkah berikutnya
- Pelajari cara Membuat dan mengelola tampilan.