Tutorial ini menjelaskan cara menggunakan tampilan aman yang diberi parameter di Cloud SQL untuk PostgreSQL guna membatasi akses pengguna ke tampilan yang diberi parameter menggunakan Cloud SQL Studio atau psql.
Tujuan
- Membuat tampilan aman yang diberi parameter dengan parameter tampilan bernama.
- Membuat peran database yang digunakan oleh aplikasi untuk terhubung ke database dan mengakses tampilan aman yang diberi parameter.
- Memberikan izin peran baru ke tampilan aman dan mencabut akses ke tabel dasar.
- Menghubungkan menggunakan peran baru dan memverifikasi bahwa tabel yang dibatasi tidak dapat diakses.
- Menjalankan kueri pada tampilan aman yang diberi parameter menggunakan fungsi
execute_parameterized_query.
Menyiapkan lingkungan Anda
Aktifkan flag database
cloudsql.enable_parameterized_viewsuntuk instance Cloud SQL Anda. Perubahan flag ini memerlukan restart database.Hubungkan ke database Anda sebagai pengguna
postgres.psql -U postgresBuat ekstensi
parameterized_viewsdi database.CREATE EXTENSION parameterized_views;Buat peran database baru untuk menjalankan kueri.
CREATE ROLE psv_user WITH LOGIN PASSWORD 'PASSWORD';Buat skema dan tabel untuk data aplikasi.
CREATE SCHEMA app_schema; CREATE TABLE app_schema.items(item_id INT, item_name TEXT, description TEXT, owner_id INT); INSERT INTO app_schema.items (item_id, item_name, description, owner_id) VALUES (1, 'Book', 'A great read', 123), (2, 'Laptop', 'Work machine', 456), (3, 'Pencil', 'For writing', 123);
Membuat tampilan aman yang diberi parameter dan menyiapkan hak akses
Buat tampilan aman yang diberi parameter:
CREATE VIEW app_schema.user_items_view WITH (security_barrier) AS SELECT item_id, item_name, description FROM app_schema.items WHERE owner_id = $@current_user_id;Berikan akses ke tampilan dan skema ke peran aplikasi.
GRANT USAGE ON SCHEMA app_schema TO psv_user; GRANT SELECT ON app_schema.user_items_view TO psv_user;Cabut akses langsung ke tabel dasar.
REVOKE ALL PRIVILEGES ON app_schema.items FROM psv_user;
Memverifikasi keamanan data
Hubungkan sebagai
psv_user.psql -U psv_user -d postgresVerifikasi bahwa tabel dasar tidak dapat diakses.
SELECT * FROM app_schema.items; -- ERROR: permission denied for table itemsAkses tampilan aman yang diberi parameter menggunakan fungsi
execute_parameterized_query:SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from app_schema.user_items_view', param_names => ARRAY ['current_user_id'], param_values => ARRAY ['123'] );Hasilnya hanya boleh menyertakan item dengan
owner_idadalah123.
Langkah berikutnya
- Pelajari ringkasan tampilan aman yang diberi parameter.
- Pelajari cara mengelola keamanan data aplikasi menggunakan tampilan aman yang diberi parameter.