Topik 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 mengeksekusi kueri yang merujuk ke tampilan seolah-olah itu adalah tabel.
Saat kueri yang merujuk ke tampilan dijalankan, Spanner akan membuat tabel virtual dengan mengeksekusi kueri yang ditentukan dalam tampilan, dan konten tabel virtual tersebut digunakan oleh kueri perujuk.
Karena kueri yang menentukan tampilan dieksekusi setiap kali kueri yang merujuk pada tampilan dieksekusi, 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 invoker atau tampilan hak definisi. Keduanya adalah dua jenis model keamanan yang mengontrol akses ke tampilan untuk pengguna.
Tampilan hak Invoker | Tampilan hak definisi | |
---|---|---|
Deskripsi | Jika Anda membuat tampilan dengan hak invoker, peran database memerlukan hak istimewa pada tampilan dan semua objek skema yang dirujuk tampilan untuk mengkueri tampilan. Untuk informasi selengkapnya, lihat Tampilan hak Invoker. | Jika Anda membuat tampilan dengan hak pendefinisian, peran database memerlukan hak istimewa pada tampilan (dan hanya tampilan) untuk mengkueri tampilan. Gunakan kontrol akses terperinci bersama tampilan hak pendefinisi, jika tidak tampilan hak pendefinisi tidak akan menambahkan kontrol akses tambahan. Untuk informasi selengkapnya, lihat Tampilan hak definisi. |
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 mengkueri tampilan | Peran database memerlukan hak istimewa untuk melihat dan semua objek skema yang mendasarinya untuk mengkueri tampilan. | Peran database memerlukan hak istimewa untuk melihat (dan hanya tampilan) guna mengkueri tampilan. |
Manfaat tampilan
Tampilan menawarkan beberapa manfaat dibandingkan menyertakan kueri yang ditentukan dalam logika aplikasi.
View dapat menyediakan pemodelan data logis untuk aplikasi.
Terkadang pilihan yang masuk akal untuk pemodelan data fisik di Spanner bukan abstraksi terbaik untuk aplikasi yang membaca data tersebut. Tampilan dapat menyajikan skema tabel alternatif yang merupakan abstraksi yang lebih sesuai untuk aplikasi.
View memusatkan definisi kueri sehingga menyederhanakan pemeliharaan.
Dengan membuat tampilan untuk kueri yang banyak digunakan atau kompleks, Anda dapat memfaktorkan teks kueri dari aplikasi dan memusatkannya. Dengan melakukannya, menjadikan teks kueri yang terbaru di seluruh aplikasi jauh lebih sederhana dan memungkinkan revisi serta penyesuaian kueri tanpa memerlukan perubahan kode aplikasi.
View memberikan stabilitas di seluruh perubahan skema.
Karena kueri yang menentukan tampilan disimpan dalam skema database, bukan dalam logika aplikasi, Spanner dapat dan memastikan bahwa skema perubahan pada objek (tabel, kolom, dan sebagainya) yang dirujuk kueri tidak membatalkan kueri.
Kasus penggunaan umum
Gunakan tampilan saat database Spanner Anda menyertakan data dengan hak istimewa tinggi yang tidak boleh diekspos ke semua pengguna database, atau jika Anda ingin merangkum data.
Jika tampilan tidak memerlukan fungsi keamanan tambahan dan semua invoker tampilan memiliki akses ke semua objek skema yang dirujuk oleh tampilan, buat tampilan hak invoker.
Jika ingin membuat tampilan yang tidak semua invoker memiliki akses ke semua objek skema yang dirujuk tampilan, buat tampilan hak pendefinisi. Tampilan hak definisi lebih terlindungi dan memiliki lebih banyak pembatasan karena admin database dapat memberikan hak istimewa yang lebih sedikit kepada pengguna pada tabel dan kolom yang dirujuk dalam tampilan. Tampilan hak Definer berguna ketika pengguna memerlukan cara untuk mengakses subset yang relevan dari database Spanner dengan aman. Misalnya, Anda mungkin ingin membuat tampilan hak pendefinisi untuk data berikut:
- Data akun pribadi (mis., pelanggan aplikasi).
- Data khusus peran (mis., personel SDM, staf penjualan).
- Data khusus lokasi.
Tampilan hak Invoker
Jika tampilan memiliki hak invoker, artinya saat pengguna, si invoker, mengeksekusi kueri terhadap tampilan, Spanner akan memeriksa hak istimewa pengguna pada tampilan dan semua objek skema yang dirujuk tampilan. Pengguna harus memiliki hak istimewa di semua objek skema untuk mengkueri tampilan.
Tampilan hak definisi
Tampilan hak pendefinisian menambahkan fungsionalitas keamanan tambahan ke tampilan tersebut. Modul ini menyediakan hak istimewa yang berbeda pada tampilan dan objek skema yang mendasarinya. Seperti tampilan hak invoker, pengguna harus memiliki izin level database untuk membuat tampilan hak pendefinisi. Perbedaan utamanya adalah saat peran database mengkueri tampilan hak definisi, Spanner memverifikasi bahwa peran tersebut memiliki akses ke tampilan itu sendiri (dan hanya tampilan). Oleh karena itu, meskipun pengguna yang membuat kueri tampilan tidak memiliki akses ke semua objek skema dasarnya, mereka dapat mengakses tampilan dan melihat kontennya. Tampilan hak definisi memberi pengguna akses ke data baru, yang terbatas pada baris yang didefinisikan dalam tampilan.
Izin Spanner Identity and Access Management (IAM) diberikan di level database. Gunakan kontrol akses terperinci
bersama tampilan hak pendefinisi. Jika tidak, tampilan hak pendefinisi 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 yang mendetail pada database,
pengguna kontrol akses yang mendetail akan dikontrol dengan hak istimewa SELECT
di tampilan, dan
pengguna dengan izin tingkat database pada database dapat mengkueri tampilan tersebut. Perbedaannya adalah, pengguna kontrol akses yang terperinci tidak memerlukan hak istimewa pada objek yang mendasarinya.
Batasan tampilan
Tampilan memiliki batasan dibandingkan dengan tabel sebenarnya, yang membuatnya tidak sesuai untuk kasus penggunaan tertentu.
Penayangan bersifat hanya baca. Keduanya 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.
Penayangan tidak dapat diindeks.
Referensi ke tampilan tidak dapat menggunakan petunjuk tabel.
Namun, kueri yang menentukan tampilan dapat menyertakan petunjuk tabel pada tabel yang dirujuknya.
View tidak didukung oleh Read API.
Tampilan hak Definisi tidak didukung dengan Data Boost Spanner.
Menjalankan kueri yang berisi tampilan hak pendefinisi dalam Peningkatan Data akan menghasilkan error.
Mode kueri yang direkomendasikan untuk mengakses tampilan hak definisi adalah mode
NORMAL
.Pengguna yang tidak memiliki akses ke objek skema dasar dari tampilan hak pendefinisi akan menerima error saat membuat kueri dalam mode kueri selain biasanya.
Pengguna dapat membuat kueri yang dibuat dengan cermat yang menyebabkan Spanner menampilkan error yang menampilkan atau mengungkapkan keberadaan data yang tidak tersedia dalam tampilan hak pendefinisi.
Sebagai contoh, asumsikan ada tampilan Qualified StudentScores berikut yang menampilkan skor siswa yang memenuhi syarat. Kriteria kelayakan didasarkan pada level dan skor ujian siswa. Jika level siswa sama atau lebih rendah dari enam, skor itu penting, dan siswa harus mendapatkan minimal 50 poin untuk mengikuti ujian. Jika tidak, untuk level yang sama dengan atau lebih 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 mungkin gagal dengan error pembagian dengan nol jika ada siswa di level 7 yang mendapatkan skor 20 poin, meskipun tampilan membatasi data hingga 50 poin dan lebih tinggi untuk level tersebut.
Performa kueri saat menggunakan tampilan
Kueri yang merujuk ke tampilan memiliki performa yang sebanding dengan kueri yang sama tersebut dengan referensi tampilannya diganti dengan definisi tampilan.
Kuota dan batas yang berlaku untuk penayangan
Halaman Kuota & batas mencantumkan informasi kuota dan batas khusus untuk tampilan.
Menggunakan tampilan dalam kueri dapat memengaruhi kesesuaian kueri tersebut dengan batas kueri karena definisi tampilan menjadi bagian dari kueri.
Dampak biaya
Menggunakan tampilan memiliki dampak yang sangat kecil pada biaya instance:
Menggunakan tampilan tidak berdampak pada kebutuhan kapasitas komputasi instance, dibandingkan dengan menyematkan teks kueri yang ditentukan dalam kueri yang merujuknya.
Penggunaan tampilan berdampak sangat kecil pada penyimpanan database instance karena tabel yang dihasilkan dengan mengeksekusi definisi kueri tampilan tidak disimpan ke penyimpanan database persisten.
Langkah selanjutnya
- Pelajari cara Membuat dan mengelola tampilan.