Tampilan yang diotorisasi dan tampilan terwujud
Dokumen ini menjelaskan cara membuat tampilan yang diotorisasi dan tampilan terwujud di BigQuery.
Tampilan yang diotorisasi dan tampilan terwujud yang diotorisasi memungkinkan Anda membagikan hasil kueri dengan pengguna dan grup tertentu tanpa memberi mereka akses ke data sumber yang mendasarinya. Tampilan atau tampilan terwujud diberi akses ke data, bukan pengguna. Anda juga dapat menggunakan kueri SQL yang membuat tampilan atau tampilan terwujud untuk membatasi kolom yang dapat dikueri pengguna.
Saat membuat tampilan yang diotorisasi atau tampilan terwujud di set data lain, set data dari data sumber dan set data tampilan yang diotorisasi harus berada di lokasi regional yang sama.
Untuk mendapatkan informasi tentang cara memberikan otorisasi untuk semua tampilan dalam set data, bukan memberi otorisasi untuk masing-masing tampilan, lihat Set data yang diotorisasi.
Sebelum memulai
Berikan peran Identity and Access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini.
Izin yang diperlukan
Untuk membuat atau memperbarui tampilan yang diotorisasi, Anda memerlukan izin pada set data yang berisi tampilan dan pada set data yang memberikan akses ke tampilan tersebut.
Izin pada set data yang berisi tampilan
Tampilan diperlakukan sebagai resource tabel di BigQuery, sehingga pembuatan tampilan memerlukan izin yang sama seperti pembuatan tabel. Anda juga harus memiliki izin untuk membuat kueri setiap tabel yang direferensikan oleh kueri SQL tampilan.
Untuk membuat tampilan, Anda memerlukan izin IAM
bigquery.tables.create
. Peran IAM roles/bigquery.dataEditor
yang telah ditetapkan mencakup izin yang diperlukan untuk membuat tampilan.
Selain itu, jika Anda memiliki izin bigquery.datasets.create
, Anda dapat
membuat tampilan dalam set data yang Anda buat. Agar dapat membuat tampilan untuk data yang
bukan milik Anda, Anda harus memiliki izin bigquery.tables.getData
untuk tabel tersebut.
Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, lihat Peran dan izin yang telah ditetapkan.
Izin pada set data yang memberikan akses ke tampilan
Untuk memperbarui properti set data, Anda memerlukan izin IAM berikut:
bigquery.datasets.update
bigquery.datasets.setIamPolicy
(hanya diperlukan saat memperbarui kontrol akses set data di Konsol Google Cloud)
Peran IAM roles/bigquery.dataOwner
yang telah ditetapkan mencakup
izin yang Anda perlukan untuk memperbarui properti set data.
Selain itu, jika memiliki izin bigquery.datasets.create
, Anda dapat
memperbarui properti set data yang Anda buat.
Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, lihat Peran dan izin yang telah ditetapkan.
Memberi otorisasi untuk tampilan
Untuk memberikan akses lihat ke set data, ikuti langkah-langkah berikut:
Konsol
Buka halaman BigQuery di Konsol Google Cloud.
Di panel Explorer, luaskan project Anda dan pilih set data.
Klik
Lihat tindakan, lalu klik Buka.Di panel Dataset info, klik
Sharing, lalu pilih Authorize Views.Untuk Authorize view, ketik nama tampilan yang akan diotorisasi.
Klik Tambahkan otorisasi.
Klik Close.
bq
Tulis informasi set data yang ada (termasuk kontrol akses) ke file JSON menggunakan perintah
bq show
. Jika set data berada dalam project selain project default Anda, tambahkan project ID ke nama set data dalam format berikut:project_id:dataset
.bq show \ --format=prettyjson \ project_id:dataset > path_to_file
Dengan keterangan:
- project_id adalah project ID Anda.
- dataset adalah nama set data Anda.
- path_to_file adalah jalur ke file JSON di komputer lokal Anda.
Contoh:
Masukkan perintah berikut untuk menulis kontrol akses bagi
mydataset
ke file JSON.mydataset
berada di project default Anda.bq show --format=prettyjson mydataset > /tmp/mydataset.json
Masukkan perintah berikut untuk menulis kontrol akses bagi
mydataset
ke file JSON.mydataset
berada dimyotherproject
.bq show --format=prettyjson \ myotherproject:mydataset > /tmp/mydataset.json
Tambahkan tampilan yang diotorisasi ke bagian "akses" file JSON.
Misalnya, bagian akses file JSON set data akan terlihat seperti berikut:
{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" } { "role": "READER", "specialGroup": "allAuthenticatedUsers" } { "role": "READER", "domain": "[DOMAIN_NAME]" } { "role": "WRITER", "userByEmail": "[USER_EMAIL]" } { "role": "READER", "groupByEmail": "[GROUP_EMAIL]" }, { "view":{ "datasetId": "[DATASET_NAME]", "projectId": "[PROJECT_NAME]", "tableId": "[VIEW_NAME]" } } ], }
Setelah pengeditan selesai, gunakan perintah
bq update
dan sertakan file JSON menggunakan flag--source
. Jika set data berada dalam project selain project default Anda, tambahkan project ID ke nama set data dalam format berikut:project_id:dataset
.bq update \ --source path_to_file \ project_id:dataset
Dengan keterangan:
- path_to_file adalah jalur ke file JSON di komputer lokal Anda.
- project_id adalah project ID Anda.
- dataset adalah nama set data Anda.
Contoh:
Masukkan perintah berikut untuk memperbarui kontrol akses bagi
mydataset
.mydataset
berada di project default Anda.bq update --source /tmp/mydataset.json mydataset
Masukkan perintah berikut untuk memperbarui kontrol akses bagi
mydataset
.mydataset
berada dimyotherproject
.bq update --source /tmp/mydataset.json myotherproject:mydataset
Untuk memverifikasi perubahan kontrol akses, masukkan kembali perintah
show
tanpa perlu menuliskan informasi tersebut ke file.bq show --format=prettyjson [DATASET]
atau
bq show --format=prettyjson [PROJECT_ID]:[DATASET]
API
Panggil datasets.patch
dan gunakan properti access
untuk memperbarui kontrol akses. Untuk
informasi selengkapnya, lihat Set Data.
Karena metode datasets.update
menggantikan seluruh resource set data,
datasets.patch
adalah metode yang lebih disukai untuk memperbarui kontrol akses.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Menghapus otorisasi ke tampilan
Untuk menghapus otorisasi ke tampilan:
Konsol
Buka halaman BigQuery di Konsol Google Cloud.
Di panel Explorer, luaskan project Anda dan pilih set data.
Klik > Otorisasi tampilan.
BerbagiKlik
Hapus otorisasi.Klik Tutup.
Kuota dan batas
- Tampilan yang diotorisasi tunduk pada batas set data. Untuk mengetahui informasi selengkapnya, lihat Batas set data.
- Jika Anda menghapus tampilan yang diotorisasi, perlu waktu hingga 24 jam untuk menghapus semua referensi ke tampilan tersebut dari sistem. Untuk menghindari error, tunggu 24 jam sebelum menggunakan kembali nama tampilan yang dihapus, atau buat nama unik untuk tampilan Anda.
Menerapkan akses tingkat baris dengan tampilan
Tampilan dapat digunakan untuk membatasi akses ke kolom tertentu. Jika ingin
membatasi akses ke masing-masing baris dalam tabel, Anda tidak perlu membuat
tampilan terpisah untuk setiap pengguna atau grup. Sebagai gantinya, Anda dapat menggunakan fungsi SESSION_USER()
untuk menampilkan alamat email pengguna saat ini.
Untuk menampilkan baris yang berbeda kepada pengguna yang berbeda, tambahkan kolom lain ke tabel Anda
yang berisi pengguna yang diizinkan untuk melihat baris tersebut. Kemudian, buat tampilan yang menggunakan
fungsi SESSION_USER()
. Pada contoh berikut, nama pengguna
disimpan di kolom allowed_viewer
:
SELECT COLUMN_1, COLUMN_2 FROM `dataset.view` WHERE allowed_viewer = SESSION_USER()
Keterbatasan pendekatan ini adalah Anda dapat memberikan akses hanya kepada satu
pengguna dalam satu waktu. Anda dapat mengatasi keterbatasan ini dengan membuat allowed_viewer
sebagai kolom berulang. Pendekatan ini memungkinkan Anda menyediakan daftar pengguna untuk setiap baris.
Namun, meskipun Anda menggunakan kolom berulang, menyimpan nama pengguna dalam tabel tetap
mengharuskan Anda melacak secara manual setiap pengguna yang memiliki akses ke setiap
baris.
Sebagai gantinya, isi kolom allowed_viewer
dengan nama grup, dan buat
tabel terpisah yang memetakan grup ke pengguna. Tabel yang memetakan grup ke pengguna
akan memiliki skema yang menyimpan nama grup dan nama pengguna. Contoh:
{group:string, user_name:string}
. Pendekatan ini memungkinkan Anda mengelola informasi pengguna
dan grup secara terpisah dari tabel yang berisi data.
Jika tabel pemetaan diberi nama
private.access_control
, kueri SQL yang digunakan untuk membuat tampilan yang diotorisasi
adalah:
SELECT c.customer, c.id FROM `private.customers` c INNER JOIN ( SELECT group FROM `private.access_control` WHERE SESSION_USER() = user_name) g ON c.allowed_group = g.group
Langkah berikutnya
- Untuk tutorial tentang cara membuat tampilan yang diotorisasi, lihat Membuat tampilan yang diotorisasi.
- Untuk informasi tentang pembuatan tampilan, lihat Membuat tampilan.
- Untuk informasi tentang cara membuat tampilan terwujud, lihat Membuat tampilan terwujud.
- Untuk informasi tentang cara mendapatkan metadata tampilan, baca Mendapatkan informasi tentang tampilan.
- Untuk informasi selengkapnya tentang mengelola tampilan, lihat Mengelola tampilan.
- Untuk informasi tentang cara memberikan otorisasi untuk semua tampilan dalam set data, lihat Set data yang diotorisasi.