Ringkasan tabel virtual

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 tampilan tersebut adalah tabel.

Saat kueri yang merujuk ke tabel virtual dijalankan, Spanner membuat tabel virtual dengan menjalankan kueri yang ditentukan dalam tabel virtual, 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 aktual dalam penyimpanan data.

Di Spanner, Anda dapat membuat tampilan sebagai tampilan hak invoker atau tampilan hak definer. Keduanya adalah dua jenis model keamanan yang mengontrol akses ke tampilan untuk pengguna.

Tampilan hak invokerTampilan hak pendefinisi
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 mengetahui informasi selengkapnya, lihat Tampilan hak invoker. Jika Anda membuat tampilan dengan hak penentu, peran database memerlukan hak istimewa pada tampilan (dan hanya tampilan) untuk mengkueri tampilan. Gunakan kontrol akses terperinci bersama dengan tampilan hak pendefinisi, jika tidak, tampilan hak pendefinisi tidak akan menambahkan kontrol akses tambahan. Untuk mengetahui informasi selengkapnya, lihat Tampilan hak pendefinisi.
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 tabel virtual Peran database memerlukan hak istimewa ke tampilan dan semua objek skema yang mendasarinya untuk membuat kueri tampilan. Peran database memerlukan hak istimewa ke tampilan (dan hanya tampilan) untuk membuat kueri tampilan.

Tampilan berparameter

Tampilan berparameter meningkatkan tampilan standar untuk menawarkan perlindungan data yang lebih kuat, terutama dalam aplikasi yang menggunakan agen AI atau model bahasa besar (LLM). Tujuan utamanya adalah memasukkan parameter dengan aman, seperti identitas pengguna, langsung ke dalam definisi tabel virtual. Jenis tampilan ini memerlukan model keamanan tampilan hak pendefinisi, yang memungkinkan Spanner menerapkan keamanan tingkat baris secara dinamis berdasarkan pengguna yang membuat kueri.

Untuk mengetahui informasi selengkapnya, lihat Ringkasan tampilan berparameter.

Manfaat tampilan

Tampilan menawarkan beberapa manfaat dibandingkan dengan menyertakan kueri yang ditentukan dalam logika aplikasi.

  • Tabel virtual dapat menyediakan pemodelan data logis untuk aplikasi.

    Terkadang, pilihan yang masuk akal untuk pemodelan data fisik di Spanner bukanlah abstraksi terbaik untuk aplikasi yang membaca data tersebut. Tampilan dapat menampilkan 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 memfaktorkan teks kueri dari aplikasi dan memusatkannya. Dengan demikian, menjaga teks kueri tetap terbaru di seluruh aplikasi menjadi jauh lebih mudah dan memungkinkan revisi serta penyesuaian kueri tanpa memerlukan perubahan 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 memang memastikan bahwa perubahan skema pada objek (tabel, kolom, dan sebagainya) yang dirujuk kueri tidak membatalkan kueri.

Kasus penggunaan umum

Gunakan tampilan jika database Spanner Anda menyertakan data dengan hak istimewa tinggi yang tidak boleh diekspos ke semua pengguna database atau jika Anda ingin mengenkapsulasi data.

Jika tabel virtual Anda tidak memerlukan fungsi keamanan tambahan dan semua pemanggil tabel virtual memiliki akses ke semua objek skema yang dirujuk oleh tabel virtual, buat tabel virtual hak pemanggil.

Jika Anda ingin membuat tampilan di mana tidak semua pemanggil memiliki akses ke semua objek skema yang dirujuk oleh tampilan, buat tampilan hak pendefinisi. Tampilan hak pendefinisi lebih terlindungi dan memiliki lebih banyak batasan karena admin database dapat memberikan hak istimewa kepada lebih sedikit pengguna pada tabel dan kolom yang direferensikan dalam tampilan. Tampilan hak pendefinisi berguna saat 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 (misalnya, pelanggan aplikasi).
  • Data khusus peran (misalnya, staf SDM, sales associate).
  • Data spesifik per lokasi.

Tampilan hak invoker

Jika tampilan memiliki hak invoker, artinya saat pengguna, yaitu invoker, 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 tabel virtual.

Tampilan hak pendefinisi

Tampilan hak pendefinisi menambahkan fungsi keamanan tambahan ke tampilan. Peran ini memberikan hak istimewa yang berbeda pada tampilan dan objek skema yang mendasarinya. Seperti untuk tampilan hak invoker, pengguna harus memiliki izin tingkat database untuk membuat tampilan hak definer. Perbedaan utamanya adalah saat peran database mengkueri tampilan hak pendefinisi, Spanner memverifikasi bahwa peran tersebut memiliki akses ke tampilan itu sendiri (dan hanya tampilan tersebut). Oleh karena itu, meskipun pengguna yang mengkueri tampilan tidak memiliki akses ke semua objek skema yang mendasarinya, mereka dapat mengakses tampilan dan melihat kontennya. Tampilan hak pendefinisi memberi pengguna akses ke data terbaru, yang terbatas pada baris yang ditentukan dalam tampilan.

Izin Identity and Access Management (IAM) Spanner diberikan di level database. Gunakan kontrol akses terperinci bersama dengan 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 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 yang mendasarinya.

Batasan tampilan

Tampilan memiliki batasan dibandingkan dengan tabel sebenarnya yang membuatnya tidak sesuai untuk kasus penggunaan tertentu.

  • Tampilan bersifat hanya baca. Kueri 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 pendefinisi tidak didukung dengan Data Boost Spanner.

    Menjalankan kueri yang berisi tampilan hak penentu di Data Boost akan menghasilkan error.

  • Mode kueri yang direkomendasikan untuk mengakses tampilan hak pendefinisi adalah mode NORMAL.

    Pengguna yang tidak memiliki akses ke objek skema pokok dari tampilan hak pendefinisi akan menerima error saat membuat kueri dalam mode kueri selain normal.

  • Pengguna dapat membuat kueri yang disusun dengan cermat yang menyebabkan Spanner menampilkan error yang menunjukkan atau mengungkapkan keberadaan data yang tidak tersedia dalam tampilan hak pendefinisi.

    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, skornya akan diperhitungkan, dan siswa harus mendapatkan setidaknya 50 poin dalam ujian agar memenuhi syarat. Jika tidak, untuk level yang sama dengan atau lebih besar dari enam, siswa akan 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 ke atas untuk level tersebut.

Performa kueri saat menggunakan tampilan

Kueri yang merujuk ke tampilan memiliki performa yang 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.

  • Menggunakan tampilan dalam kueri dapat memengaruhi kesesuaian kueri tersebut dengan batas kueri karena definisi tampilan menjadi bagian dari kueri.

Dampak biaya

Penggunaan tampilan memiliki dampak yang sangat kecil terhadap biaya instance:

  • Penggunaan tampilan tidak memengaruhi kebutuhan kapasitas komputasi instance, dibandingkan dengan menyematkan teks kueri yang ditentukan dalam kueri yang merujuk ke tampilan tersebut.

  • 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