Keamanan dan hak istimewa untuk prosedur tersimpan - Amazon Redshift

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 kredensil 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 USAGE hak istimewa pada bahasa PL/PGSQL, yang diberikan secara PUBLIC default. Hanya pengguna super dan pemilik yang memiliki hak istimewa untuk memanggil prosedur secara default. Superusers dapat berjalan REVOKE USAGE di PL/PG SQL dari pengguna jika mereka ingin mencegah pengguna membuat prosedur tersimpan.

Untuk memanggil prosedur, Anda harus diberikan EXECUTE hak istimewa pada prosedur ini. Secara default, EXECUTE hak istimewa untuk prosedur baru diberikan kepada pemilik prosedur dan pengguna super. Untuk informasi selengkapnya, lihat GRANT.

Pengguna yang membuat prosedur adalah pemilik secara default. Pemilik memilikiCREATE,DROP, dan EXECUTE hak istimewa pada prosedur secara default. Superuser memiliki semua hak istimewa.

SECURITYAtribut mengontrol hak istimewa prosedur untuk mengakses objek database. Saat Anda membuat prosedur tersimpan, Anda dapat mengatur SECURITY atribut ke salah satu DEFINER atauINVOKER. Jika Anda menentukan SECURITYINVOKER, prosedur menggunakan hak istimewa pengguna yang menjalankan prosedur. Jika Anda menentukan SECURITYDEFINER, prosedur menggunakan hak istimewa pemilik prosedur. INVOKERadalah default.

Karena SECURITY DEFINER prosedur berjalan dengan hak istimewa pengguna yang memilikinya, Anda harus memastikan bahwa prosedur tidak dapat disalahgunakan. Untuk memastikan bahwa SECURITY DEFINER prosedur tidak dapat disalahgunakan, lakukan hal berikut:

  • Berikan SECURITY DEFINER prosedur EXECUTE kepada pengguna tertentu, dan bukan untukPUBLIC.

  • Memenuhi syarat semua objek database yang prosedur harus mengakses dengan nama skema. Misalnya, gunakan myschema.mytable bukan hanyamytable.

  • Jika Anda tidak dapat memenuhi syarat nama objek dengan skemanya, atur search_path saat membuat prosedur dengan menggunakan opsi. SET Setel search_path untuk mengecualikan skema apa pun yang dapat ditulis oleh pengguna yang tidak tepercaya. Pendekatan ini mencegah penelepon prosedur ini membuat objek (misalnya, tabel atau tampilan) yang menutupi objek yang dimaksudkan untuk digunakan oleh prosedur. Untuk informasi selengkapnya tentang SET opsi, lihatCREATE PROCEDURE.

Contoh berikut ditetapkan search_path admin untuk memastikan bahwa user_creds tabel diakses dari admin skema dan bukan dari publik atau skema lain dalam 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;