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
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Keamanan dan hak istimewa untuk prosedur tersimpan
Topik ini menjelaskan kredentif database yang diperlukan untuk membuat dan menjalankan prosedur tersimpan.
Secara default, semua pengguna memiliki hak istimewa untuk membuat prosedur. Untuk membuat prosedur, Anda harus memiliki hak istimewa USAGE pada bahasa PL/pgSQL, yang diberikan kepada PUBLIC secara default. Hanya pengguna super dan pemilik yang memiliki hak istimewa untuk memanggil prosedur secara default. Pengguna super dapat menjalankan REVOKE US PL/pgSQL AGE dari pengguna jika mereka ingin mencegah pengguna membuat prosedur tersimpan.
Untuk memanggil prosedur, Anda harus diberikan hak istimewa EXECUTE pada prosedur tersebut. Secara default, hak istimewa EXECUTE untuk prosedur baru diberikan kepada pemilik prosedur dan pengguna super. Untuk informasi selengkapnya, lihat HIBAH.
Pengguna yang membuat prosedur adalah pemilik secara default. Pemilik memiliki hak istimewa CREATE, DROP, dan EXECUTE pada prosedur secara default. Pengguna super memiliki semua hak istimewa.
Atribut SECURITY mengontrol hak istimewa prosedur untuk mengakses objek database. Saat Anda membuat prosedur tersimpan, Anda dapat mengatur atribut SECURITY menjadi DEFINER atau INVOKER. Atribut ini menentukan hak istimewa mana yang digunakan saat mengeksekusi pernyataan di badan prosedur yang disimpan. Jika Anda menentukan SECURITY INVOKER, prosedur menggunakan hak istimewa pengguna yang memanggil prosedur. Jika Anda menentukan SECURITY DEFINER, prosedur menggunakan hak istimewa pemilik prosedur. INVOKER adalah default.
Karena prosedur SECURITY DEFINER berjalan dengan hak istimewa pengguna yang memilikinya, Anda harus memastikan bahwa prosedur tidak dapat disalahgunakan. Untuk memastikan bahwa prosedur SECURITY DEFINER tidak dapat disalahgunakan, lakukan hal berikut:
Berikan EXECUTE pada prosedur SECURITY DEFINER kepada pengguna tertentu, dan bukan ke PUBLIK.
Kualifikasi semua objek database yang harus diakses prosedur dengan nama skema. Misalnya, gunakan al
myschema.mytableih-alih hanyamytable.Jika Anda tidak dapat memenuhi syarat nama objek dengan skema, atur
search_pathsaat membuat prosedur dengan menggunakan opsi SET. Setelsearch_pathuntuk mengecualikan skema apa pun yang dapat ditulis oleh pengguna yang tidak tepercaya. Pendekatan ini mencegah pemanggil prosedur ini membuat objek (misalnya, tabel atau tampilan) yang menutupi objek yang dimaksudkan untuk digunakan oleh prosedur. Untuk informasi selengkapnya tentang opsi SET, lihatBUAT PROSEDUR.
Contoh berikut ditetapkan search_path admin untuk memastikan bahwa user_creds tabel diakses dari admin skema dan bukan dari publik atau skema lain di pemanggil. search_path
CREATE OR REPLACE PROCEDURE sp_get_credentials(userid int, o_creds OUT varchar) AS $$ BEGIN SELECT creds INTO o_creds FROM user_creds WHERE user_id = $1; END; $$ LANGUAGE plpgsql SECURITY DEFINER -- Set a secure search_path SET search_path = admin;