Menggunakan keamanan tingkat baris dengan fitur BigQuery lainnya

Dokumen ini menjelaskan cara menggunakan keamanan akses tingkat baris dengan fitur BigQuery lainnya.

Sebelum membaca dokumen ini, pahami keamanan tingkat baris dengan membaca Pengantar keamanan tingkat baris BigQuery dan Bekerja dengan keamanan tingkat baris.

Filter TRUE

Kebijakan akses tingkat baris dapat memfilter data hasil yang Anda lihat saat menjalankan kueri. Untuk menjalankan operasi non-kueri, seperti DML, Anda memerlukan akses penuh ke semua baris dalam tabel. Akses penuh diberikan menggunakan kebijakan akses baris dengan ekspresi filter yang ditetapkan ke TRUE. Kebijakan akses tingkat baris ini disebut filter TRUE.

Setiap pengguna dapat diberi akses filter TRUE, termasuk akun layanan.

Contoh operasi non-kueri adalah:

Contoh

Membuat filter TRUE

CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);

Fitur yang berfungsi dengan filter TRUE

Tugas penyalinan

Untuk menyalin tabel dengan satu atau beberapa kebijakan akses tingkat baris, Anda harus terlebih dahulu diberi akses filter TRUE pada tabel sumber. Semua kebijakan akses tingkat baris pada tabel sumber juga disalin ke tabel tujuan yang baru. Jika Anda menyalin tabel sumber tanpa kebijakan akses tingkat baris ke tabel tujuan yang memiliki kebijakan akses tingkat baris, maka kebijakan akses tingkat baris akan dihapus dari tabel tujuan, kecuali flag --append_table digunakan atau "writeDisposition": "WRITE_APPEND" telah disetel.

Salinan lintas-region diizinkan dan semua kebijakan disalin. Kueri berikutnya mungkin rusak setelah penyalinan selesai jika kueri berisi referensi tabel yang tidak valid dalam kebijakan subkueri.

Kebijakan akses tingkat baris pada tabel harus memiliki nama yang unik. Terjadi konflik pada nama kebijakan akses tingkat baris selama penyalinan akan menyebabkan error input tidak valid.

Izin yang diperlukan untuk menyalin tabel dengan kebijakan akses tingkat baris

Untuk menyalin tabel dengan satu atau beberapa kebijakan akses tingkat baris, Anda harus memiliki izin berikut, selain peran untuk menyalin tabel dan partisi.

Izin Resource
bigquery.rowAccessPolicies.list Tabel sumber.
bigquery.rowAccessPolicies.getIamPolicy Tabel sumber.
Filter TRUE Tabel sumber.
bigquery.rowAccessPolicies.create Tabel tujuan.
bigquery.rowAccessPolicies.setIamPolicy Tabel tujuan.

Tabledata.list di BigQuery API

Anda memerlukan akses filter TRUE untuk menggunakan metode tabledata.list di BigQuery API pada tabel dengan kebijakan akses tingkat baris.

DML

Untuk menjalankan pernyataan DML yang mengupdate tabel yang memiliki kebijakan akses tingkat baris, Anda memerlukan akses filter TRUE untuk tabel tersebut.

Secara khusus, pernyataan MERGE berinteraksi dengan kebijakan akses tingkat baris seperti berikut:

  • Jika tabel target berisi kebijakan akses tingkat baris, Anda memerlukan akses filter TRUE ke tabel target.
  • Jika tabel sumber berisi kebijakan akses tingkat baris, pernyataan MERGE hanya berfungsi pada baris yang terlihat oleh pengguna.

Snapshot tabel

Snapshot tabel mendukung keamanan tingkat baris. Izin yang Anda perlukan untuk tabel dasar (tabel sumber) dan snapshot tabel (tabel tujuan) dijelaskan di Izin yang diperlukan untuk menyalin tabel dengan kebijakan akses tingkat baris.

Tabel BigQuery dengan kolom JSON

Kebijakan akses tingkat baris tidak dapat diterapkan pada kolom JSON. Untuk mempelajari lebih lanjut batasan keamanan tingkat baris, lihat Batasan.

BigQuery BI Engine dan Looker Studio

BigQuery BI Engine tidak mempercepat kueri yang dijalankan pada tabel dengan satu atau beberapa kebijakan akses tingkat baris; kueri tersebut dijalankan sebagai kueri standar di BigQuery.

Data di dasbor Looker Studio difilter sesuai dengan kebijakan akses tingkat baris tabel sumber yang mendasarinya.

Keamanan tingkat kolom

Keamanan tingkat baris dan keamanan tingkat kolom, yang mencakup kontrol akses tingkat kolom dan penyamaran data dinamis, sepenuhnya kompatibel.

Poin utamanya adalah:

  • Anda dapat menerapkan kebijakan akses tingkat baris untuk memfilter data di kolom mana pun, meskipun Anda tidak memiliki akses ke data di kolom tersebut.
    • Upaya untuk mengakses kolom ini dengan kebijakan akses tingkat baris subkueri akan menghasilkan error yang menunjukkan bahwa akses ditolak. Kolom ini tidak dianggap sebagai kolom yang direferensikan sistem.
    • Upaya untuk mengakses kolom ini dengan kebijakan akses tingkat baris non-subkueri akan mengabaikan keamanan tingkat kolom.
  • Jika kolom dibatasi karena keamanan tingkat kolom, dan kolom tersebut diberi nama dalam pernyataan SELECT kueri atau kebijakan akses tingkat baris subkueri, Anda akan menerima error.
  • Keamanan tingkat kolom juga berlaku dengan pernyataan kueri SELECT *. SELECT * diperlakukan sama seperti kueri yang secara eksplisit memberi nama kolom yang dibatasi.

Contoh keamanan tingkat baris dan keamanan tingkat kolom yang berinteraksi

Contoh ini memandu Anda melakukan langkah-langkah untuk mengamankan tabel dan kemudian membuat kuerinya.

Data

Misalkan Anda memiliki peran DataOwner untuk set data bernama my_dataset yang mencakup tabel dengan tiga kolom bernama my_table. Tabel berisi data yang ditampilkan dalam tabel berikut.

Dalam contoh ini, satu penggunanya adalah Alice, yang alamat emailnya adalah alice@example.com. Pengguna kedua adalah Bob, rekan Alice.

peringkat buah warna
1 apel merah
2 oranye oranye
3 lemon kuning
4 hijau limau hijau

Keamanan

Anda ingin Alice dapat melihat semua baris yang memiliki angka ganjil di kolom rank, tetapi bukan baris bilangan genap. Anda tidak ingin Bob melihat baris apa pun, genap atau ganjil. Anda tidak ingin orang lain melihat data apa pun di kolom fruit.

  • Untuk membatasi Alice agar tidak melihat baris bernomor genap, Anda membuat kebijakan akses tingkat baris yang memiliki ekspresi filter berdasarkan data yang muncul di kolom rank. Untuk mencegah Bob melihat baris ganjil atau genap, Anda tidak memasukkannya dalam daftar penerima hibah.

    CREATE ROW ACCESS POLICY only_odd ON my_dataset.my_table GRANT
    TO ('user:alice@example.com') FILTER USING (MOD(rank, 2) = 1);
    
  • Untuk membatasi semua pengguna agar tidak melihat data di kolom bernama fruit, Anda perlu membuat tag kebijakan keamanan tingkat kolom yang melarang semua pengguna mengakses datanya.

Terakhir, Anda juga membatasi akses ke kolom bernama color dengan dua cara: kolom ini diatur oleh tag kebijakan keamanan tingkat kolom yang melarang semua akses oleh siapa pun, dan dipengaruhi oleh kebijakan akses tingkat baris, yang memfilter beberapa data baris dalam kolom color.

  • Kebijakan akses tingkat baris kedua ini hanya menampilkan baris dengan nilai green dalam kolom color.

    CREATE ROW ACCESS POLICY only_green ON my_dataset.my_table
    GRANT TO ('user:alice@example.com') FILTER USING (color="green");
    

Kueri Bob

Jika rekan kerja Anita mencoba membuat kueri data dari my_dataset.my_table, dia tidak akan melihat baris apa pun, karena Bob tidak tercantum dalam daftar penerima hibah untuk kebijakan akses tingkat baris apa pun di tabel tersebut.

Kueri my_dataset.my_table Komentar
rank

(Beberapa data terpengaruh oleh kebijakan akses baris only_odd)
fruit

(Semua data dilindungi oleh tag kebijakan CLS)
color

(Semua data dilindungi oleh tag kebijakan CLS, dan beberapa data dipengaruhi oleh kebijakan akses baris only_green)
SELECT rank FROM my_dataset.my_table
(0) baris yang ditampilkan
Bob tidak termasuk dalam daftar penerima hibah kebijakan akses tingkat baris; sehingga kueri ini berhasil, tetapi tidak ada data baris yang ditampilkan.

Pesan akan ditampilkan kepada Bob yang menyatakan bahwa hasilnya mungkin difilter oleh kebijakan akses baris.

Kueri Alice

Saat Alice menjalankan kueri untuk mengakses data dari my_dataset.my_table, hasilnya bergantung pada kueri yang dia jalankan dan keamanan, seperti yang ditunjukkan dalam tabel berikut.

Kueri my_dataset.my_table Komentar
rank

(Beberapa data terpengaruh oleh kebijakan akses baris only_odd)
fruit

(Semua data dilindungi oleh tag kebijakan CLS)
color

(Semua data dilindungi oleh tag kebijakan CLS, dan beberapa data dipengaruhi oleh kebijakan akses baris only_green)

SELECT rank FROM my_dataset.my_table


(2) baris bernomor ganjil ditampilkan.
Alice termasuk dalam daftar penerima hibah untuk kebijakan akses tingkat baris only_odd pada data di kolom peringkat. Oleh karena itu, Alice hanya melihat data baris bernomor ganjil. Baris bernomor genap disembunyikan oleh kebijakan akses tingkat baris yang bernama only_odd.

Pesan akan ditampilkan kepada Alice yang menyatakan bahwa hasilnya mungkin difilter oleh kebijakan akses baris.

SELECT fruit FROM my_dataset.my_table


access denied

Kolom fruit diberi nama secara eksplisit dalam kueri.

Keamanan tingkat kolom berlaku.

Akses ditolak.

SELECT color FROM my_dataset.my_table


access denied

Kolom color diberi nama secara eksplisit dalam kueri.

Keamanan tingkat kolom berlaku, sebelum kebijakan akses tingkat baris pada data di kolom color diterapkan.

Akses ditolak.

SELECT rank, fruit FROM my_dataset.my_table


access denied

Kolom `fruit` diberi nama secara eksplisit dalam kueri.

Keamanan tingkat kolom berlaku, sebelum kebijakan akses tingkat baris pada data di kolom rank diterapkan.

Akses ditolak.

SELECT rank, color FROM my_dataset.my_table


access denied

Kolom color diberi nama secara eksplisit dalam kueri

Keamanan tingkat kolom pada kolom color berlaku, sebelum kebijakan akses tingkat baris pada data di kolom rank dan color diterapkan.

Akses ditolak.

SELECT fruit, color FROM my_dataset.my_table


access denied


access denied

Kolom fruit dan color diberi nama secara eksplisit dalam kueri.

Keamanan tingkat kolom di kolom fruit dan color berlaku, sebelum kebijakan akses tingkat baris pada data di kolom color diterapkan.

Akses ditolak.

SELECT * FROM my_dataset.my_table


access denied


access denied

Kolom fruit dan color diberi nama secara implisit menggunakan "SELECT *" dalam kueri.

Keamanan tingkat kolom pada kolom fruit dan color berlaku, sebelum kebijakan akses tingkat baris pada data di kolom rank atau color diterapkan.

Akses ditolak.

Akses filter TRUE

Terakhir, seperti yang dijelaskan di bagian tentang akses filter TRUE, jika Alice atau Bob memiliki akses filter TRUE, maka mereka dapat melihat semua baris dalam tabel, dan menggunakannya dalam tugas non-kueri. Namun, jika tabel memiliki keamanan tingkat kolom, keamanan tersebut masih berlaku dan dapat memengaruhi hasil.

Grafik eksekusi

Anda tidak dapat menggunakan grafik eksekusi kueri untuk tugas dengan kebijakan akses tingkat baris.

Tugas ekstraksi

Jika tabel memiliki kebijakan akses tingkat baris, hanya data yang dapat Anda lihat yang diekspor ke Cloud Storage saat Anda menjalankan tugas ekstrak.

Legacy SQL

Kebijakan akses tingkat baris tidak kompatibel dengan Legacy SQL. Kueri pada tabel dengan kebijakan akses tingkat baris harus menggunakan GoogleSQL. Kueri SQL lama ditolak.

Tabel berpartisi dan dikelompokkan

Keamanan tingkat baris tidak berpartisipasi dalam pruning kueri, yang merupakan fitur tabel berpartisi.

Meskipun keamanan tingkat baris kompatibel dengan tabel yang dipartisi dan dikelompokkan, kebijakan akses tingkat baris yang memfilter data baris tidak diterapkan selama pruning partisi. Anda masih dapat menggunakan pruning partisi pada tabel yang menggunakan keamanan tingkat baris dengan menentukan klausa WHERE yang beroperasi di kolom partisi. Demikian pula, kebijakan akses tingkat baris sendiri tidak memberikan manfaat performa apa pun untuk kueri terhadap tabel yang dikelompokkan, tetapi tidak mengganggu pemfilteran lain yang Anda terapkan.

Pemangkasan kueri dilakukan selama eksekusi kebijakan akses tingkat baris menggunakan filter dengan kebijakan.

Mengganti nama tabel

Anda tidak memerlukan akses filter TRUE untuk mengganti nama tabel dengan satu atau beberapa kebijakan akses bari di tabel tersebut. Anda dapat mengganti nama tabel dengan pernyataan DDL.

Sebagai alternatif, Anda juga dapat menyalin tabel dan memberi nama lain pada tabel tujuan. Jika tabel sumber memiliki kebijakan akses tingkat baris, lihat tugas penyalinan tabel di halaman ini untuk informasi selengkapnya.

Update streaming

Untuk melakukan operasi tabel streaming UPDATE atau DELETE dengan mengubah pengambilan data, Anda harus memiliki akses filter TRUE.

Perjalanan waktu

Hanya administrator tabel yang dapat mengakses data historis untuk tabel yang memiliki, atau sebelumnya memiliki, kebijakan akses tingkat baris. Pengguna lain akan mendapatkan error access denied jika mereka menggunakan dekorator perjalanan waktu di tabel yang memiliki akses tingkat baris. Untuk mengetahui informasi selengkapnya, lihat Perjalanan waktu dan akses tingkat baris.

Tampilan dan tampilan terwujud

Data yang ditampilkan dalam tampilan atau tampilan terwujud difilter sesuai dengan kebijakan akses tingkat baris tabel sumber yang mendasarinya.

Selain itu, jika tampilan terwujud berasal dari tabel pokok yang memiliki kebijakan akses tingkat baris, performa kuerinya akan sama seperti saat Anda membuat kueri sumber tabel secara langsung. Dengan kata lain, jika tabel sumber memiliki keamanan tingkat baris, Anda tidak akan melihat manfaat performa umum membuat kueri tampilan terwujud versus membuat kueri tabel sumber.

Anda tidak dapat mereferensikan tampilan atau tampilan terwujud dalam kebijakan akses tingkat baris.

Kueri karakter pengganti

Kueri karakter pengganti terhadap tabel dengan kebijakan akses tingkat baris akan gagal dengan menampilkan error INVALID_INPUT.

Langkah berikutnya