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:
- BigQuery API lainnya, seperti BigQuery Storage Read API.
- Beberapa
perintah alat command line
bq
, seperti perintahbq head
. - Menyalin tabel
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 kolomcolor
.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 ) |
||
|
(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. |
||
|
|
Kolom fruit diberi nama secara eksplisit dalam kueri. Keamanan tingkat kolom berlaku. Akses ditolak. |
||
|
|
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. |
||
|
|
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. |
||
|
|
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. |
||
|
|
|
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. |
|
|
|
|
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
- Untuk mengetahui informasi tentang praktik terbaik terkait kebijakan akses tingkat baris, lihat Praktik terbaik untuk keamanan tingkat baris di BigQuery.