Contoh disertakan untuk mengilustrasikan kemampuan tampilan aman yang diberi parameter. Contoh ini hanya dimaksudkan untuk tujuan demonstrasi.
Tujuan
- Buat tampilan berparameter aman dengan parameter tampilan bernama.
- Buat peran database yang digunakan oleh aplikasi untuk terhubung ke database dan mengakses tampilan aman berparameter.
- Berikan izin peran baru ke tampilan aman dan cabut akses ke tabel dasar.
- Hubungkan menggunakan peran baru dan pastikan tabel yang dibatasi tidak dapat diakses.
- Jalankan kueri pada tampilan aman berparameter menggunakan fungsi
execute_parameterized_query.
Menginstal dan terhubung ke database
Menyiapkan lingkungan Anda
Untuk bersiap menjalankan kueri pada tampilan aman berparameter, Anda harus menyiapkan tampilan berparameter, database dan peran database, ekstensi parameterized_view, serta skema aplikasi terlebih dahulu.
Sebelum menggunakan tampilan aman yang diberi parameter, Anda harus melakukan hal berikut satu kali di
lingkungan Linux Anda.
Setiap setelan dapat diterapkan menggunakan ALTER SYSTEM atau
dengan mengedit postgresql.conf secara langsung.:
- Tambahkan "parameterized_views" ke
shared_preload_libraries. - Aktifkan fitur dengan menetapkan
parameterized_views.enabled=on. - Mulai ulang postgres agar perubahan diterapkan.
Menyiapkan database
- Buat database bernama
databaseuntuk data aplikasi dan tampilan berparameter.
Membuat peran database, ekstensi, dan skema aplikasi
Menggunakan psql, hubungkan ke database sebagai pengguna
postgresatau sebagai pengguna dengan hak istimewa superuser AlloyDB Omni./usr/lib/postgresql/18/bin/psql -h localhost -U postgresBuat ekstensi
parameterized_viewsdi database.-- Requires parameterized_views.enabled set to true CREATE EXTENSION parameterized_views;Saat ekstensi dibuat, sistem juga membuat skema bernama
parameterized_viewssehingga API dimuat dalam namespace skema tersebut dan agar API tersebut tidak bertentangan dengan API yang ada.Buat peran administratif AlloyDB Omni, yang memiliki dan mengelola database.
CREATE ROLE admin_user WITH LOGIN PASSWORD '...'; GRANT ALL PRIVILEGES ON DATABASE database TO admin_user;Untuk informasi selengkapnya, lihat
CREATE USER.Buat peran database baru untuk menjalankan kueri terhadap tampilan aman yang diberi parameter. Ini adalah peran AlloyDB Omni yang digunakan aplikasi untuk terhubung dan login ke database guna menjalankan kueri dengan akses terbatas ke fungsi atau objek publik ke set minimum yang diperlukan.
Untuk informasi selengkapnya, lihat
CREATE USER.Hubungkan sebagai pengguna administratif.
SET role TO admin_user;Buat skema yang berisi tabel.
CREATE SCHEMA schema;Membuat tabel dan menyisipkan data.
CREATE TABLE schema.checked_items(bag_id INT,timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT); INSERT INTO schema.checked_items (bag_id, timestamp, loc_code, scan_type, location, customer_id) VALUES (101, '2023-10-26 10:00:00', 'ABC', 'I', 'Warehouse A', 123), (102, '2023-10-26 10:15:30', 'DEF', 'O', 'Loading Dock B', 456), (103, '2023-10-26 10:30:45', 'GHI', 'I', 'Conveyor Belt 1', 789), (104, '2023-10-26 11:00:00', 'JKL', 'O', 'Shipping Area C', 101), (105, '2023-10-26 11:45:15', 'MNO', 'I', 'Sorting Station D', 202), (106, '2023-10-26 12:00:00', 'PQR', 'O', 'Truck Bay E', 303);
Membuat tampilan berparameter yang aman dan menyiapkan hak akses
Untuk membuat tampilan berparameter yang aman dan menyiapkan hak istimewa akses yang sesuai untuk tabel dasar dan tampilan, ikuti langkah-langkah berikut:
Menggunakan psql, hubungkan ke database sebagai
admin_user./usr/lib/postgresql/18/bin/psql -h localhost -U admin_userUntuk memberikan akses terbatas ke tampilan, buat tampilan aman berparameter.
CREATE VIEW schema.secure_checked_items WITH (security_barrier) AS SELECT bag_id, timestamp, location FROM schema.checked_items t WHERE customer_id = $@app_end_userid;Memberikan akses ke tabel virtual.
GRANT SELECT ON schema.secure_checked_items TO psv_user;Untuk mengakses tampilan, berikan akses ke skema.
GRANT USAGE ON SCHEMA schema TO psv_user;Cabut akses langsung ke tabel dasar.
REVOKE ALL PRIVILEGES ON schema.checked_items FROM psv_user;
Memverifikasi keamanan data
Untuk memverifikasi bahwa tampilan aman berparameter membatasi akses ke
tampilan yang ditentukan, jalankan perintah berikut sebagai psv_user. Ini adalah peran database AlloyDB Omni yang digunakan aplikasi untuk terhubung dan login ke database guna menjalankan kueri.
Terhubung sebagai pengguna tampilan aman berparameter.
/usr/lib/postgresql/18/bin/psql -h localhost -U psv_userPastikan tabel dasar tidak dapat diakses.
SELECT * FROM schema.checked_items; ERROR: permission denied for table checked_itemsAkses tampilan aman berparameter menggunakan fungsi
execute_parameterized_query.SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from schema.secure_checked_items', param_names => ARRAY ['app_end_userid'], param_values => ARRAY ['303'] );Untuk meningkatkan keamanan kueri yang dihasilkan bahasa alami, integrasikan tampilan aman berparameter Anda menggunakan bahasa alami.
Pembersihan
Untuk melakukan pembersihan, Anda dapat meng-uninstal instance AlloyDB Omni atau mempertahankan instance dan menghapus setiap objek.
Langkah berikutnya
- Pelajari tampilan aman yang diberi parameter.
- Pelajari cara mengelola keamanan data aplikasi menggunakan tampilan aman berparameter.