View a markdown version of this page

Pertimbangan dan batasan menggunakan kebijakan RLS - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pertimbangan dan batasan menggunakan kebijakan RLS

Pertimbangan-pertimbangan

Berikut ini adalah pertimbangan untuk bekerja dengan kebijakan RLS:

  • Amazon Redshift menerapkan kebijakan RLS untuk pernyataan SELECT, UPDATE, atau DELETE.

  • Amazon Redshift tidak menerapkan kebijakan RLS untuk pernyataan INSERT, COPY, ALTER TABLE APPEND.

  • Kebijakan RLS dapat dilampirkan ke tabel, tampilan, tampilan pengikatan terlambat (LBV), dan tampilan terwujud (MV).

  • Row-level keamanan bekerja dengan keamanan tingkat kolom untuk melindungi data Anda.

  • Saat RLS diaktifkan untuk relasi sumber, Amazon Redshift mendukung pernyataan ALTER TABLE APPEND untuk pengguna super, pengguna yang telah secara eksplisit diberikan izin sistem IGNORE RLS, atau peran sys:secadmin. Dalam hal ini, Anda dapat menjalankan pernyataan ALTER TABLE APPEND untuk menambahkan baris ke tabel target dengan memindahkan data dari tabel sumber yang ada. Amazon Redshift memindahkan semua tupel dari relasi sumber ke relasi target. Status RLS dari relasi target tidak mempengaruhi pernyataan ALTER TABLE APPEND.

  • Untuk memfasilitasi migrasi dari sistem gudang data lainnya, Anda dapat mengatur dan mengambil variabel konteks sesi yang disesuaikan untuk koneksi dengan menentukan nama dan nilai variabel.

    Contoh berikut menetapkan variabel konteks sesi untuk kebijakan keamanan tingkat baris (RLS).

    -- Set a customized context variable. SELECT set_config(‘app.category’, ‘Concerts’, FALSE); -- Create a RLS policy using current_setting() to get the value of a customized context variable. CREATE RLS POLICY policy_categories WITH (catgroup VARCHAR(10)) USING (catgroup = current_setting('app.category', FALSE)); -- Set correct roles and attach the policy on the target table to one or more roles. ATTACH RLS POLICY policy_categories ON tickit_category_redshift TO ROLE analyst, ROLE dbadmin;

    Untuk detail tentang cara mengatur dan mengambil variabel konteks sesi yang disesuaikan, bukaSET,SET_CONFIG,MENUNJUKKAN,CURRENT_SETTING, danMENGATUR ULANG. Untuk informasi lebih lanjut tentang memodifikasi konfigurasi server secara umum, bukaMemodifikasi konfigurasi server.

    penting

    Saat menggunakan variabel konteks sesi dalam kebijakan RLS, kebijakan keamanan bergantung pada pengguna atau peran yang memanggil kebijakan. Berhati-hatilah untuk menghindari kerentanan keamanan saat menggunakan variabel konteks sesi dalam kebijakan RLS.

  • Mengubah pengguna sesi menggunakan SET SESSION AUTHORIZATION antara DECLARE dan FETCH atau antara pernyataan FETCH berikutnya tidak akan menyegarkan paket yang sudah disiapkan berdasarkan kebijakan pengguna pada waktu DECLARE. Hindari mengubah pengguna sesi saat kursor digunakan dengan RLS-protected tabel.

  • Ketika objek dasar di dalam objek tampilan ada RLS-protected, kebijakan yang dilampirkan ke pengguna yang menjalankan kueri diterapkan pada objek dasar masing-masing. Ini berbeda dari pemeriksaan izin tingkat objek, di mana izin pemilik tampilan diperiksa terhadap objek dasar tampilan. Anda dapat melihat RLS-protected hubungan kueri dalam output rencana EXPLAIN.

  • Ketika fungsi yang ditentukan pengguna (UDF) direferensikan dalam kebijakan RLS dari relasi yang dilampirkan ke pengguna, pengguna harus memiliki izin EXECUTE atas UDF untuk menanyakan relasi.

  • Row-level keamanan mungkin membatasi optimasi kueri. Sebaiknya evaluasi kinerja kueri dengan cermat sebelum menerapkan RLS-protected tampilan pada kumpulan data besar.

  • Row-level kebijakan keamanan yang diterapkan pada tampilan yang mengikat terlambat mungkin didorong ke tabel federasi. Kebijakan RLS ini mungkin terlihat di log mesin pemrosesan eksternal.

Batasan

Berikut ini adalah batasan saat bekerja dengan kebijakan RLS:

  • Kebijakan RLS tidak dapat dilampirkan ke tabel eksternal dan beberapa jenis relasi lainnya. Untuk informasi selengkapnya, lihat LAMPIRKAN KEBIJAKAN RLS.

  • Amazon Redshift mendukung pernyataan SELECT untuk kebijakan RLS tertentu dengan pencarian yang memiliki gabungan kompleks, tetapi tidak mendukung pernyataan UPDATE atau DELETE. Dalam kasus dengan pernyataan UPDATE atau DELETE, Amazon Redshift mengembalikan kesalahan berikut:

    ERROR: One of the RLS policies on target relation is not supported in UPDATE/DELETE.
  • Setiap kali fungsi yang ditentukan pengguna (UDF) direferensikan dalam kebijakan RLS dari relasi yang dilampirkan ke pengguna, pengguna harus memiliki izin EXECUTE atas UDF untuk menanyakan relasi.

  • Subquery yang berkorelasi tidak didukung. Amazon Redshift mengembalikan kesalahan berikut:

    ERROR: RLS policy could not be rewritten.
  • Amazon Redshift tidak mendukung berbagi data dengan RLS. Jika relasi tidak menonaktifkan RLS untuk berbagi data, kueri gagal pada cluster konsumen dengan kesalahan berikut:

    RLS-protected relation "rls_protected_table" cannot be accessed via datasharing query.

    Anda dapat mematikan RLS untuk berbagi data menggunakan perintah ALTER TABLE dengan parameter ROW LEVEL SECURITY OFF FOR DATASHARES. Untuk informasi lebih lanjut tentang menggunakan ALTER TABLE untuk mengaktifkan atau menonaktifkan RLS, buka. ALTER TABLE

  • Dalam kueri lintas database, Amazon Redshift memblokir pembacaan ke RLS-protected relasi. Pengguna dengan izin IGNORE RLS dapat mengakses relasi yang dilindungi menggunakan kueri lintas database. Ketika pengguna tanpa izin IGNORE RLS mengakses RLS-protected relasi melalui kueri lintas database, kesalahan berikut muncul:

    RLS-protected relation "rls_protected_table" cannot be accessed via cross-database query.
  • ALTER RLS POLICY hanya mendukung modifikasi kebijakan RLS menggunakan klausa USING (using_predicate_exp). Anda tidak dapat mengubah kebijakan RLS dengan klausa WITH saat menjalankan ALTER RLS POLICY.

  • Anda tidak dapat menanyakan relasi yang mengaktifkan keamanan tingkat baris jika nilai untuk salah satu opsi konfigurasi berikut tidak cocok dengan nilai default sesi:

    • enable_case_sensitive_super_attribute

    • enable_case_sensitive_identifier

    • downcase_delimited_identifier

    Pertimbangkan untuk mengatur ulang opsi konfigurasi sesi Anda jika Anda mencoba menanyakan relasi dengan keamanan tingkat baris aktif dan melihat pesan “Relasi yang dilindungi RLS tidak mendukung konfigurasi tingkat sesi pada sensitivitas huruf besar yang berbeda dari nilai defaultnya.”

  • Jika cluster yang disediakan atau namespace tanpa server memiliki kebijakan keamanan tingkat baris, perintah berikut diblokir untuk pengguna biasa:

    ALTER <current_user> SET enable_case_sensitive_super_attribute/enable_case_sensitive_identifier/downcase_delimited_identifier

    Saat membuat kebijakan RLS, sebaiknya ubah setelan opsi konfigurasi default untuk pengguna biasa agar sesuai dengan setelan opsi konfigurasi sesi pada saat kebijakan dibuat. Pengguna super dan pengguna dengan hak istimewa ALTER USER dapat melakukan ini dengan menggunakan pengaturan grup parameter atau perintah ALTER USER. Untuk informasi tentang grup parameter, lihat grup parameter Amazon Redshift di Panduan Manajemen Amazon Redshift. Untuk informasi tentang perintah ALTER USER, lihatALTER USER.

  • Tampilan dan tampilan yang mengikat terlambat dengan kebijakan keamanan tingkat baris tidak dapat diganti oleh pengguna biasa menggunakan perintah. CREATE VIEW Untuk mengganti tampilan atau LBV dengan kebijakan RLS, pertama-tama lepaskan kebijakan RLS yang dilampirkan padanya, ganti tampilan atau LBV, dan lampirkan kembali kebijakan. Pengguna super dan pengguna dengan sys:secadmin permission dapat menggunakan CREATE VIEW pada tampilan atau LBV dengan kebijakan RLS tanpa melepaskan kebijakan.

  • Tampilan dengan kebijakan keamanan tingkat baris tidak dapat mereferensikan tabel sistem dan tampilan sistem.

  • Tampilan pengikatan terlambat yang direferensikan oleh tampilan biasa tidak dapat dilindungi RLS.

  • RLS-protected hubungan dan data bersarang dari danau data tidak dapat diakses dalam kueri yang sama.