Ringkasan tampilan yang diberi parameter
Di Bigtable, Anda dapat menggunakan tampilan yang diberi parameter untuk memfilter rentang data secara dinamis untuk tampilan logis berdasarkan konteks aplikasi. Pendekatan ini melindungi aplikasi Anda dari injeksi SQL dan mengurangi kebutuhan akan beberapa tampilan statis.
Untuk menangani informasi sensitif, tampilan Bigtable yang diberi parameter menggunakan konteks terisolasi yang terpisah dari teks kueri SQL. Karena database mengikat nilai ini di sisi server, pengguna dan agen AI tidak dapat memanipulasi parameter kueri. Database secara otomatis membatasi akses data ke konteks spesifik Anda, terlepas dari cara Anda menulis kueri.
Manfaat tampilan yang diberi parameter
Tampilan yang diberi parameter sangat cocok untuk mengelola cakupan data di tingkat database, terutama dalam aplikasi yang memproses kueri bentuk bebas yang diterjemahkan dari bahasa alami. Cakupan data adalah proses membatasi hasil kueri ke subset data tertentu. Tampilan ini menawarkan cara yang fleksibel untuk menerapkan hal berikut:
- Penyebaran identitas tingkat mendalam: menerapkan izin data terperinci di tingkat pengguna, yang memastikan bahwa pengguna hanya dapat mengakses konteks data mereka sendiri. Misalnya, aplikasi dapat memastikan bahwa pengguna atau penyewa mengambil baris yang hanya berada dalam batas yang ditentukan.
- Manajemen pengguna yang disederhanakan: menggunakan satu peran database untuk semua pengguna database bukan peran terpisah untuk setiap pengguna.
- Isolasi parameter: tampilan yang diberi parameter mengurangi risiko dengan meneruskan nilai sebagai konteks terisolasi yang tetap berada di luar kontrol LLM atau pengguna akhir. Karena nilai ini dipisahkan dari teks kueri, pengguna atau agen AI yang membuat kueri tidak dapat memanipulasinya.
- Mitigasi injeksi SQL: saat membuat aplikasi, mengganti parameter di sisi klien dalam teks kueri dapat menyebabkan manipulasi kueri. Tampilan yang diberi parameter mengurangi risiko ini dengan melakukan pengikatan parameter di sisi server setelah struktur kueri diuraikan. Hal ini mencegah injeksi SQL karena nilai yang dikontrol penyerang tidak dapat mengubah struktur kueri.
Misalnya, pertimbangkan aplikasi pelacak kesehatan yang menyimpan catatan medis pasien, termasuk kadar kolesterol. Jika pasien mengkueri data mereka sendiri, agen yang berbahaya atau berperilaku buruk dapat membuat atau meminta kueri yang mencoba mengambil catatan pasien lain. Dengan menggunakan tampilan yang diberi parameter, aplikasi akan menerapkan isolasi pasien di tingkat database. Tampilan ditentukan dengan parameter tampilan patient_id:
CREATE VIEW patient_health_pv AS
(SELECT * FROM patient_health_records WHERE patient_id = CAST(VIEW_PARAMETERS('patient_id') AS BYTES))
Saat klien ingin mengkueri pembacaan cholesterol pasien:
SELECT readings['value'], readings['date']
FROM patient_health_pv
WHERE readings['test_name'] = 'cholesterol'
Karena kueri tampilan, Bigtable secara otomatis mengikat dan menerapkan nilai patient_id dari peta parameter terisolasi. LLM atau pengguna akhir tidak dapat mengubah atau menghapus filter ini, sehingga memastikan cakupan tingkat pengguna yang kuat dan menghilangkan vektor injeksi SQL.
Cara kerja tampilan yang diberi parameter
Tampilan yang diberi parameter menggunakan mekanisme yang disebut parameter tampilan untuk meneruskan konteks tingkat aplikasi, seperti ID pengguna, ke database dengan aman. Tampilan yang diberi parameter mencapai hal ini dengan meneruskan nilai parameter tampilan sebagai konteks terpisah dan terisolasi dengan permintaan kueri. Bigtable kemudian dapat mengakses konteks ini selama eksekusi kueri, tetapi kueri itu sendiri tidak dapat membaca atau mengubah konteks.
Fungsi VIEW_PARAMETERS() adalah antarmuka SQL untuk mengakses parameter ini dalam definisi tampilan. Misalnya, untuk memfilter data berdasarkan ID pengguna yang membuat kueri, Anda dapat menyertakan hal berikut dalam klausa WHERE tampilan:
CREATE VIEW purchase_history_pv AS
(SELECT * FROM purchases WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES))
Anda juga dapat menggunakan VIEW_PARAMETERS() untuk memberi parameter pada kualifikasi kolom. Hal ini memungkinkan tampilan menampilkan kolom tertentu secara dinamis berdasarkan konteks aplikasi yang disediakan.
CREATE VIEW specific_test_result_pv AS
SELECT
tests[VIEW_PARAMETERS('test_name')] AS reading,
_timestamp AS reading_time
FROM patients
Perbedaan dari parameter kueri standar
Parameter tampilan beroperasi secara berbeda dibandingkan dengan parameter kueri standar:
- Sintaksis dan konteks: Parameter kueri standar ditentukan menggunakan sintaksis
@paramdan tidak dapat dideklarasikan di dalam definisi tampilan, hanya dalam kueri. Parameter tampilan diakses menggunakan fungsiVIEW_PARAMETERS('key'), yang dapat dipanggil dalam konteks kueri atau tampilan apa pun. - Perilaku gagal-tertutup: Jika definisi tampilan yang berisi referensi
VIEW_PARAMETERS('key')dikueri, tetapi nilai yang sesuai tidak disediakan dalam peta parameter tampilan permintaan, kueri akan langsung gagal dengan errornot found / missing parameter. Hal ini mencegah eksposur data yang tidak disengaja jika konfigurasi salah diterapkan.
Batasan
Batasan berikut berlaku untuk tampilan yang diberi parameter:
- Anda hanya dapat membuat tampilan yang diberi parameter dari tampilan logis. Anda membuat tampilan logis yang diberi parameter baru menggunakan Google Cloud CLI. Anda tidak mengubah tampilan logis yang ada.
- Parameter tampilan hanya mendukung nilai jenis string. Jika parameter
mewakili jenis data yang berbeda dalam definisi SQL tampilan Anda, Anda harus
meneruskan nilai parameter sebagai string dan mentransmisikannya di dalam definisi tampilan—misalnya,
CAST(VIEW_PARAMETERS('parameter_name') AS INT64).