Mengamankan dan mengontrol akses ke data aplikasi menggunakan tampilan aman berparameter

Tampilan aman berparameter di AlloyDB untuk PostgreSQL memungkinkan Anda membatasi akses pengguna aplikasi ke baris database tertentu berdasarkan parameter bernama. Dalam tutorial ini, Anda akan membuat dan mengkueri tampilan aman berparameter menggunakan AlloyDB Studio atau psql.

Contoh dalam tutorial ini mengilustrasikan kemampuan tampilan aman berparameter hanya untuk tujuan demonstrasi.

Tujuan

  • Membuat tampilan aman yang diberi parameter 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.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.

Sebelum memulai

Mengaktifkan penagihan dan API yang diperlukan

  1. Di konsol Google Cloud , pilih project.

    Buka pemilih project

  2. Pastikan penagihan diaktifkan untuk project Google Cloud Anda.

  3. Aktifkan Cloud API yang diperlukan untuk membuat dan terhubung ke AlloyDB.

    Mengaktifkan API

    1. Pada langkah Confirm project, klik Next untuk mengonfirmasi nama project yang akan Anda ubah.
    2. Pada langkah Enable APIs, klik Enable untuk mengaktifkan hal berikut:

      • AlloyDB API

Membuat dan menghubungkan ke database

  1. Buat cluster dan instance utamanya.
  2. Terhubung ke instance dan membuat database.

Menyiapkan lingkungan Anda

Untuk bersiap menjalankan kueri pada tampilan aman berparameter, Anda harus menyiapkan tampilan berparameter, database dan peran database, ekstensi parameterized_views, serta skema aplikasi terlebih dahulu.

Mengaktifkan ekstensi yang diperlukan

Aktifkan flag database parameterized_views.enabled, yang memuat library ekstensi yang diperlukan. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database instance.

Menyiapkan database

Buat database bernama database untuk data aplikasi dan tampilan berparameter. Untuk mengetahui informasi selengkapnya tentang cara membuat database, lihat Membuat database.

Membuat peran database, ekstensi, dan skema aplikasi

  1. Untuk terhubung ke database sebagai pengguna postgres atau sebagai pengguna dengan hak istimewa superuser AlloyDB, gunakan AlloyDB Studio atau psql.

    psql database -U postgres

    Untuk mengetahui informasi selengkapnya, lihat Tentang pengelolaan pengguna database di AlloyDB.

  2. Buat ekstensi parameterized_views di database.

    -- Requires parameterized_views.enabled set to true
    CREATE EXTENSION parameterized_views;
    

    Saat ekstensi dibuat, sistem juga membuat skema bernama parameterized_views sehingga API dimuat dalam namespace skema tersebut dan agar API tersebut tidak bertentangan dengan API yang ada.

  3. Buat peran administratif AlloyDB, 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.

  4. Buat peran database baru untuk menjalankan kueri terhadap tampilan aman yang diberi parameter. Ini adalah peran AlloyDB 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.

    CREATE ROLE psv_user WITH LOGIN PASSWORD '...';
    

    Untuk mengetahui informasi selengkapnya tentang cara membuat pengguna PostgreSQL, lihat CREATE USER.

  5. Hubungkan sebagai pengguna administratif.

    SET role TO admin_user;
    
  6. Buat skema yang berisi tabel.

    CREATE SCHEMA schema;
    
  7. 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 istimewa akses

Untuk membuat tampilan berparameter yang aman dan menyiapkan hak istimewa akses yang sesuai untuk tabel dasar dan tampilan, ikuti langkah-langkah berikut:

  1. Untuk terhubung ke database sebagai admin_user, gunakan AlloyDB Studio atau psql.

    psql database -U admin_user
  2. Untuk 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;
    
  3. Memberikan akses ke tabel virtual.

    GRANT SELECT ON schema.secure_checked_items TO psv_user;
    
  4. Untuk mengakses tampilan, berikan akses ke skema.

    GRANT USAGE ON SCHEMA schema TO psv_user;
    
  5. 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 yang digunakan aplikasi untuk terhubung dan login ke database untuk menjalankan kueri.

  1. Terhubung sebagai pengguna tampilan aman berparameter.

    psql database -U psv_user
  2. Pastikan tabel dasar tidak dapat diakses:

    SELECT * FROM schema.checked_items;
    

    Outputnya mirip dengan hal berikut ini:

    ERROR:  permission denied for table checked_items
    
  3. Akses 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']
    );
    
  4. Untuk meningkatkan keamanan kueri yang dihasilkan bahasa alami, integrasikan tampilan aman berparameter menggunakan bahasa alami AlloyDB AI.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Jika Anda ingin mempertahankan cluster dan hanya menghapus objek database yang Anda buat dalam tutorial ini, jalankan perintah berikut:

  1. Untuk terhubung ke database sebagai postgres, gunakan AlloyDB Studio atau psql:

    psql database -U postgres
  2. Hapus objek yang Anda buat:

    DROP VIEW schema.secure_checked_items;
    DROP TABLE schema.checked_items;
    DROP SCHEMA schema;
    DROP ROLE psv_user;
    DROP ROLE admin_user;
    DROP EXTENSION parameterized_views;
    

Untuk menghapus seluruh cluster AlloyDB dan jaringan VPC, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud , buka halaman Clusters.

    Buka Cluster

  2. Klik nama cluster Anda, my-cluster, di kolom Resource name.

  3. Klik Delete cluster.

  4. Di Delete cluster my-cluster, masukkan my-cluster untuk mengonfirmasi bahwa Anda ingin menghapus cluster.

  5. Klik Hapus.

  6. Jika Anda membuat koneksi pribadi saat membuat cluster, buka halaman Networking di konsol Google Cloud , lalu klik Delete VPC network.

Langkah berikutnya