Ringkasan tabel virtual

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 direpresentasikannya. Setelah membuat tampilan, Anda dapat menjalankan kueri yang merujuk ke tampilan seolah-olah itu adalah tabel.

Saat kueri yang merujuk ke tampilan dijalankan, Spanner akan 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 untuk pengguna.

Tampilan hak pemanggilTampilan hak penentu
Deskripsi Jika Anda membuat tampilan dengan hak pemanggil, peran database memerlukan hak istimewa pada tampilan dan semua objek skema yang dirujuk oleh tampilan tersebut untuk mengkueri tampilan. Untuk 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 dengan tampilan hak penentu. Jika tidak, tampilan hak penentu tidak akan menambahkan kontrol akses tambahan. Untuk mengetahui informasi selengkapnya, lihat Tampilan hak penentu.
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 ke tampilan dan semua objek skema yang mendasarinya untuk membuat kueri tampilan. Peran database memerlukan hak istimewa ke tampilan (dan hanya tampilan) untuk mengkueri tampilan.

Manfaat penayangan

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

  • Tampilan dapat memberikan pemodelan data yang logis ke aplikasi.

    Terkadang, pilihan yang sesuai 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 digunakan secara luas atau kompleks, Anda dapat memfaktorkan teks kueri dari aplikasi dan memusatkankannya. 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 memastikan bahwa perubahan skema pada objek (tabel, kolom, dan sebagainya) yang dirujuk oleh kueri tidak membatalkan validasi 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 mengaitkan data.

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 penentu dilindungi dengan lebih baik dan memiliki lebih banyak batasan karena admin database dapat memberikan hak istimewa pada tabel dan kolom yang dirujuk dalam tampilan kepada lebih sedikit pengguna. Tampilan hak penentu berguna saat pengguna memerlukan cara untuk mengakses subset database Spanner yang relevan dengan aman. Misalnya, Anda mungkin ingin membuat tampilan hak penentu untuk data berikut:

  • Data akun pribadi (misalnya, pelanggan aplikasi).
  • Data khusus peran (misalnya, Pegawai SDM, tenaga penjualan).
  • Data spesifik per lokasi.

Tampilan hak pemanggil

Jika tampilan memiliki hak pemanggil, artinya saat pengguna, pemanggil, menjalankan kueri terhadap tampilan, Spanner akan memeriksa hak istimewa pengguna pada tampilan dan pada semua objek skema yang dirujuk tampilan. Pengguna harus memiliki hak istimewa di semua objek skema untuk membuat kueri tampilan.

Tampilan hak penentu

Tampilan hak penentu menambahkan fungsi keamanan tambahan ke tampilan. Tindakan ini memberikan hak istimewa yang berbeda 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 mengkueri tampilan hak penentu, Spanner 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 yang mendasarinya, mereka dapat mengakses tampilan dan melihat kontennya. Tampilan hak penentu memberi pengguna akses ke data baru, yang dibatasi 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 penentu. Jika tidak, tampilan hak penentu tidak akan menambahkan kontrol akses tambahan. Hal ini karena jika pengguna memiliki izin baca di database, mereka memiliki izin baca di 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. Data tersebut 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 penentu 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 penentu adalah mode NORMAL.

    Pengguna yang tidak memiliki akses ke objek skema pokok dari tampilan hak penentu akan 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 di tampilan hak penentu.

    Misalnya, asumsikan ada tampilan QualifiedStudentScores berikut yang menampilkan skor siswa yang memenuhi syarat untuk kursus. Kriteria untuk memenuhi syarat didasarkan pada level dan skor ujian siswa. Jika tingkat siswa sama dengan atau lebih rendah dari enam, skor akan menjadi penting, dan siswa harus mendapatkan minimal 50 poin pada ujian untuk 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 dan lebih tinggi untuk level tersebut.

Performa kueri saat menggunakan tampilan

Kueri yang merujuk ke tampilan berperforma sebanding dengan kueri yang sama dengan referensi tampilannya diganti oleh 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 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 selanjutnya