Bekerja dengan Ekstensi Bahasa Tepercaya untuk PostgreSQL - Amazon Aurora

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

Bekerja dengan Ekstensi Bahasa Tepercaya untuk PostgreSQL

Ekstensi Bahasa Tepercaya untuk PostgreSQL adalah kit pengembangan sumber terbuka untuk mendesain ekstensi PostgreSQL. Ini memungkinkan Anda untuk membangun ekstensi PostgreSQL performa tinggi dan menjalankannya dengan aman di klaster DB Aurora PostgreSQL. Dengan menggunakan Ekstensi Bahasa Tepercaya (TLE) untuk PostgreSQL, Anda dapat membuat ekstensi PostgreSQL yang mengikuti pendekatan terdokumentasi untuk memperluas fungsionalitas PostgreSQL. Lihat informasi selengkapnya, lihat Packaging Related Objects into an Extension dalam dokumentasi PostgreSQL.

Salah satu manfaat utama TLE adalah Anda dapat menggunakannya di lingkungan yang tidak menyediakan akses ke sistem file yang mendasari instans PostgreSQL. Sebelumnya, penginstalan ekstensi baru memerlukan akses ke sistem file. TLE menghilangkan batasan ini. Ini menyediakan lingkungan pengembangan untuk membuat ekstensi baru untuk basis data PostgreSQL apa pun, termasuk yang berjalan di klaster DB Aurora PostgreSQL.

TLE dirancang untuk mencegah akses ke sumber daya yang tidak aman untuk ekstensi yang Anda buat menggunakan TLE. Lingkungan runtime-nya membatasi dampak kerusakan ekstensi apa pun ke koneksi basis data tunggal. TLE juga memberi administrator basis data kontrol terperinci atas siapa saja yang dapat menginstal ekstensi, dan memberikan model izin untuk menjalankannya.

TLE didukung pada Aurora PostgreSQL versi 14.5 dan yang lebih tinggi.

Lingkungan pengembangan dan runtime Ekstensi Bahasa Tepercaya dikemas sebagai ekstensi PostgreSQL pg_tle, versi 1.0.1. Ini mendukung pembuatan ekstensi di JavaScript, Perl, Tcl, PL/PGSQL, dan SQL. Anda menginstal ekstensi pg_tle di klaster DB Aurora PostgreSQL dengan cara yang sama seperti Anda menginstal ekstensi PostgreSQL lainnya. Setelah pg_tle disiapkan, developer dapat menggunakannya untuk membuat ekstensi PostgreSQL baru, yang dikenal sebagai ekstensi TLE.

Dalam topik berikut, Anda dapat menemukan informasi tentang cara mengatur Ekstensi Bahasa Tepercaya dan cara memulai membuat ekstensi TLE Anda sendiri.

Terminologi

Untuk membantu Anda lebih memahami Ekstensi Bahasa Tepercaya, lihat glosarium berikut untuk istilah yang digunakan dalam topik ini.

Ekstensi Bahasa Tepercaya untuk PostgreSQL

Ekstensi Bahasa Tepercaya untuk PostgreSQL adalah nama resmi kit pengembangan sumber terbuka yang dikemas sebagai ekstensi pg_tle. Ini dapat digunakan pada sistem PostgreSQL apa pun. Untuk informasi selengkapnya, lihat aws/pg_tle di. GitHub

Ekstensi Bahasa Terpercaya

Ekstensi Bahasa Tepercaya adalah singkatan dari Ekstensi Bahasa Tepercaya untuk PostgreSQL. Nama singkat ini dan singkatannya (TLE) juga digunakan dalam dokumentasi ini.

bahasa tepercaya

Bahasa tepercaya adalah bahasa pemrograman atau skrip yang memiliki atribut keamanan tertentu. Misalnya, bahasa tepercaya biasanya membatasi akses ke sistem file, dan membatasi penggunaan properti jaringan tertentu. Kit pengembangan TLE dirancang untuk mendukung bahasa tepercaya. PostgreSQL mendukung beberapa bahasa yang berbeda yang digunakan untuk membuat ekstensi tepercaya atau tidak tepercaya. Sebagai contoh, lihat Trusted and Untrusted PL/Perl dalam dokumentasi PostgreSQL. Saat Anda membuat ekstensi menggunakan Ekstensi Bahasa Tepercaya, ekstensi tersebut akan menggunakan mekanisme bahasa tepercaya secara inheren.

Ekstensi TLE

Ekstensi TLE adalah ekstensi PostgreSQL yang dibuat dengan menggunakan kit pengembangan Ekstensi Bahasa Tepercaya (TLE).

Persyaratan untuk menggunakan Ekstensi Bahasa Tepercaya untuk PostgreSQL

Berikut ini adalah persyaratan untuk menyiapkan dan menggunakan kit pengembangan TLE.

  • Versi Aurora PostgreSQL – Ekstensi Bahasa Tepercaya didukung pada Aurora PostgreSQL versi 14.5 dan versi yang lebih tinggi saja.

  • Memerlukan hak istimewa rds_superuser – Untuk menyiapkan dan mengonfigurasi ekstensi pg_tle, peran pengguna basis data Anda harus memiliki izin peran rds_superuser. Secara default, peran ini diberikan kepada postgres pengguna yang membuat klaster DB Aurora PostgreSQL.

  • Memerlukan grup parameter DB kustom - Klaster DB Aurora PostgreSQL Anda harus dikonfigurasi dengan grup parameter DB kustom. Anda menggunakan grup parameter DB kustom untuk instans penulis klaster DB Aurora PostgreSQL.

Membuat dan menerapkan grup parameter DB kustom

Gunakan langkah-langkah berikut untuk membuat grup parameter DB kustom dan mengonfigurasi klaster DB Aurora PostgreSQL untuk menggunakannya.

Untuk membuat grup parameter DB kustom dan menggunakannya dengan klaster DB Aurora PostgreSQL
  1. Masuk ke AWS Management Console dan buka konsol Amazon RDS di https://console.aws.amazon.com/rds/.

  2. Pilih grup Parameter dari menu Amazon RDS.

  3. Pilih Buat grup parameter.

  4. Di halaman Detail grup parameter, masukkan informasi berikut.

    • Untuk Keluarga grup Parameter, pilih aurora-postgresql14.

    • Untuk Jenis, pilih Grup Parameter DB.

    • Untuk Nama grup, berikan grup parameter Anda nama yang bermakna dalam konteks operasi Anda.

    • Untuk Deskripsi, masukkan deskripsi yang berguna sehingga orang lain di tim Anda dapat dengan mudah menemukannya.

  5. Pilih Buat. Grup parameter DB kustom Anda dibuat di Wilayah AWS. Anda sekarang dapat mengubah klaster DB Aurora PostgreSQL untuk menggunakannya dengan mengikuti langkah selanjutnya.

  6. Pilih Basis data dari menu Amazon RDS.

  7. Pilih klaster DB Aurora PostgreSQL yang ingin digunakan dengan TLE dari yang tercantum tersebut, lalu pilih Ubah.

  8. Di halaman Ubah pengaturan klaster DB, cari Opsi basis data dan gunakan pemilih untuk memilih grup parameter DB kustom Anda.

  9. Pilih Lanjutkan untuk menyimpan perubahan.

  10. Pilih Terapkan langsung sehingga Anda dapat melanjutkan penyiapan klaster DB Aurora PostgreSQL untuk menggunakan TLE.

Untuk melanjutkan penyiapan sistem untuk Ekstensi Bahasa Tepercaya, lihat Menyiapkan Ekstensi Bahasa Tepercaya di klaster DB Aurora PostgreSQL Anda.

Untuk informasi selengkapnya tentang cara menggunakan Grup parameter DB dan klaster DB, lihat Menggunakan grup parameter klaster DB.

Anda dapat menghindari penentuan argumen --region saat menggunakan perintah CLI dengan mengonfigurasi AWS CLI dengan Wilayah AWS default. Untuk informasi selengkapnya, lihat Dasar-dasar konfigurasi di Panduan Pengguna AWS Command Line Interface .

Untuk membuat grup parameter DB kustom dan menggunakannya dengan klaster DB Aurora PostgreSQL
  1. Wilayah AWSPerhatikan bahwa dalam langkah ini Anda membuat grup parameter DB untuk diterapkan ke instans penulis klaster DB Aurora PostgreSQL Anda.

    Untuk Linux, macOS, atau Unix:

    aws rds create-db-parameter-group \ --region aws-region \ --db-parameter-group-name custom-params-for-pg-tle \ --db-parameter-group-family aurora-postgresql14 \ --description "My custom DB parameter group for Trusted Language Extensions"

    Untuk Windows:

    aws rds create-db-parameter-group ^ --region aws-region ^ --db-parameter-group-name custom-params-for-pg-tle ^ --db-parameter-group-family aurora-postgresql14 ^ --description "My custom DB parameter group for Trusted Language Extensions"

    Grup parameter DB kustom Anda tersedia di Wilayah AWS Anda, sehingga Anda dapat mengubah instans penulis klaster DB Aurora PostgreSQL untuk menggunakannya.

  2. Gunakan modify-db-instance AWS CLI perintah untuk menerapkan grup parameter DB kustom Anda ke instance penulis cluster Aurora PostgreSQL DB Anda. Perintah ini langsung mem-boot ulang instans yang aktif.

    Untuk Linux, macOS, atau Unix:

    aws rds modify-db-instance \ --region aws-region \ --db-instance-identifier your-writer-instance-name \ --db-parameter-group-name custom-params-for-pg-tle \ --apply-immediately

    Untuk Windows:

    aws rds modify-db-instance ^ --region aws-region ^ --db-instance-identifier your-writer-instance-name ^ --db-parameter-group-name custom-params-for-pg-tle ^ --apply-immediately

Untuk melanjutkan penyiapan sistem untuk Ekstensi Bahasa Tepercaya, lihat Menyiapkan Ekstensi Bahasa Tepercaya di klaster DB Aurora PostgreSQL Anda.

Untuk informasi selengkapnya, lihat Bekerja dengan grup parameter DB dalam instance DB .

Menyiapkan Ekstensi Bahasa Tepercaya di klaster DB Aurora PostgreSQL Anda

Langkah-langkah berikut mengasumsikan bahwa klaster DB Aurora PostgreSQL Anda dikaitkan dengan grup parameter klaster DB kustom. Anda dapat menggunakan AWS Management Console atau AWS CLI untuk langkah-langkah ini.

Saat menyiapkan Ekstensi Bahasa Tepercaya di klaster DB Aurora PostgreSQL , Anda menginstalnya di basis data tertentu untuk digunakan oleh pengguna basis data yang memiliki izin pada basis data tersebut.

Untuk menyiapkan Ekstensi Bahasa Tepercaya

Lakukan langkah-langkah berikut menggunakan akun yang merupakan anggota grup rds_superuser (peran).

  1. Masuk ke AWS Management Console dan buka konsol Amazon RDS di https://console.aws.amazon.com/rds/.

  2. Di panel navigasi, pilih Instans penulis klaster DB Aurora PostgreSQL .

  3. Buka tab Konfigurasi untuk instans penulis klaster DB Aurora PostgreSQL. Di antara detail Instans, temukan tautan Grup parameter.

  4. Pilih tautan untuk membuka parameter kustom yang terkait dengan klaster DB Aurora PostgreSQL Anda.

  5. Di kolom pencarian Parameter, ketik shared_pre untuk menemukan parameter shared_preload_libraries.

  6. Pilih Edit parameter untuk mengakses nilai properti.

  7. Tambahkan pg_tle ke daftar di kolom Nilai. Gunakan koma untuk memisahkan item dalam daftar nilai.

    Gambar parameter shared_preload_libraries dengan pg_tle ditambahkan.
  8. Boot ulang instans penulis klaster DB Aurora PostgreSQL Anda sehingga perubahan pada parameter shared_preload_libraries dapat diterapkan.

  9. Ketika instans tersedia, verifikasi bahwa pg_tle telah diinisialisasi. Gunakan psql untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL, lalu jalankan perintah berikut.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pg_tle (1 row)
  10. Dengan ekstensi pg_tle yang diinisialisasi, Anda kini dapat membuat ekstensi.

    CREATE EXTENSION pg_tle;

    Anda dapat memverifikasi bahwa ekstensi diinstal dengan menggunakan metacommand psql berikut.

    labdb=> \dx List of installed extensions Name | Version | Schema | Description ---------+---------+------------+-------------------------------------------- pg_tle | 1.0.1 | pgtle | Trusted-Language Extensions for PostgreSQL plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
  11. Berikan peran pgtle_admin ke nama pengguna utama yang Anda buat untuk klaster DB Aurora PostgreSQL jika Anda menyiapkannya. Jika Anda menerima opsi default-nya, berarti nilainya postgres.

    labdb=> GRANT pgtle_admin TO postgres; GRANT ROLE

    Anda dapat memverifikasi bahwa pemberian telah terjadi dengan menggunakan metacommand psql seperti yang ditunjukkan pada contoh berikut. Hanya peran pgtle_admin dan postgres yang ditampilkan dalam output. Untuk informasi selengkapnya, lihat Memahami peran dan izin PostgreSQL.

    labdb=> \du List of roles Role name | Attributes | Member of -----------------+---------------------------------+----------------------------------- pgtle_admin | Cannot login | {} postgres | Create role, Create DB +| {rds_superuser,pgtle_admin} | Password valid until infinity |...
  12. Tutup sesi psql menggunakan metacommand \q.

    \q

Untuk mulai membuat ekstensi TLE, lihat Contoh: Membuat ekstensi bahasa tepercaya menggunakan SQL.

Anda dapat menghindari penentuan argumen --region saat menggunakan perintah CLI dengan mengonfigurasi AWS CLI dengan Wilayah AWS default. Untuk informasi selengkapnya, lihat Dasar-dasar konfigurasi di Panduan Pengguna AWS Command Line Interface .

Untuk menyiapkan Ekstensi Bahasa Tepercaya
  1. Gunakan modify-db-parameter-group AWS CLI perintah untuk pg_tle menambah shared_preload_libraries parameter.

    aws rds modify-db-parameter-group \ --db-parameter-group-name custom-param-group-name \ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pg_tle,ApplyMethod=pending-reboot" \ --region aws-region
  2. Gunakan reboot-db-instance AWS CLI perintah untuk me-reboot instance penulis Aurora PostgreSQL DB cluster instance PostgreSQL DB dan menginisialisasi perpustakaan. pg_tle

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region
  3. Saat instans tersedia, verifikasikan bahwa pg_tle telah diinisialisasi. Gunakan psql untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL, lalu jalankan perintah berikut.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pg_tle (1 row)

    Dengan pg_tle diinisialisasi, Anda sekarang dapat membuat ekstensi.

    CREATE EXTENSION pg_tle;
  4. Berikan peran pgtle_admin ke nama pengguna utama yang Anda buat untuk klaster DB Aurora PostgreSQL jika Anda menyiapkannya. Jika Anda menerima opsi default-nya, berarti nilainya postgres.

    GRANT pgtle_admin TO postgres; GRANT ROLE
  5. Tutup sesi psql seperti berikut.

    labdb=> \q

Untuk mulai membuat ekstensi TLE, lihat Contoh: Membuat ekstensi bahasa tepercaya menggunakan SQL.

Ikhtisar Ekstensi Bahasa Tepercaya untuk PostgreSQL

Ekstensi Bahasa Tepercaya untuk PostgreSQL adalah ekstensi PostgreSQL yang Anda instal di klaster DB Aurora PostgreSQL dengan cara yang sama seperti Anda menyiapkan ekstensi PostgreSQL lainnya. Pada gambar contoh basis data berikut alat klien pgAdmin, Anda dapat melihat beberapa komponen yang terdiri atas ekstensi pg_tle.

Gambar yang menunjukkan beberapa komponen yang menyusun kit pengembangan TLE.

Anda dapat melihat detail berikut.

  1. Kit pengembangan Ekstensi Bahasa Tepercaya (TLE) untuk PostgreSQL dikemas sebagai ekstensi pg_tle. Dengan demikian, pg_tle ditambahkan ke ekstensi yang tersedia untuk basis data tempat kit ini diinstal.

  2. TLE memiliki skemanya sendiri, pgtle. Skema ini berisi fungsi pembantu (3) untuk menginstal dan mengelola ekstensi yang Anda buat.

  3. TLE dilengkapi dengan banyak fungsi pembantu untuk menginstal, mendaftarkan, dan mengelola ekstensi Anda. Untuk mempelajari selengkapnya tentang fungsi ini, lihat Referensi fungsi untuk Ekstensi Bahasa Tepercaya untuk PostgreSQL.

Komponen lain dari ekstensi pg_tle meliputi:

  • Peran pgtle_admin – Peran pgtle_admin dibuat jika ekstensi pg_tle diinstal. Peran ini diistimewakan dan harus diperlakukan semestinya. Sebaiknya Anda mengikuti prinsip hak akses paling rendah saat memberikan peran pgtle_admin kepada pengguna basis data. Dengan kata lain, berikan peran pgtle_admin hanya kepada pengguna basis data yang diizinkan untuk membuat, menginstal, dan mengelola ekstensi TLE baru, seperti postgres.

  • Tabel pgtle.feature_info – Tabel pgtle.feature_info adalah tabel yang dilindungi yang berisi informasi tentang TLE, hook, serta prosedur dan fungsi tersimpan kustom yang mereka gunakan. Jika Anda memiliki hak istimewa pgtle_admin, gunakan fungsi Ekstensi Bahasa Tepercaya berikut untuk menambahkan dan memperbarui informasi tersebut dalam tabel.

Membuat ekstensi TLE untuk Aurora PostgreSQL

Anda dapat menginstal ekstensi apa pun yang Anda buat dengan TLE di setiap klaster DB Aurora PostgreSQL yang ekstensi pg_tle-nya telah diinstal. Ekstensi pg_tle dicakup ke basis data PostgreSQL tempat ekstensi diinstal. Ekstensi yang Anda buat menggunakan TLE dicakup ke basis data yang sama.

Gunakan berbagai fungsi pgtle untuk menginstal kode yang membentuk ekstensi TLE Anda. Semua fungsi Ekstensi Bahasa Tepercaya berikut memerlukan peran pgtle_admin.

Contoh: Membuat ekstensi bahasa tepercaya menggunakan SQL

Contoh berikut menunjukkan cara membuat ekstensi TLE bernama pg_distance yang berisi beberapa fungsi SQL untuk menghitung jarak menggunakan berbagai formula. Dalam daftar, Anda dapat menemukan fungsi untuk menghitung jarak Manhattan dan fungsi untuk menghitung jarak Euclidean. Untuk informasi selengkapnya tentang perbedaan antara formula ini, lihat Geometri taksi dan Geometri Euclidean di Wikipedia.

Anda dapat menggunakan contoh ini di klaster DB Aurora PostgreSQL Anda sendiri jika Anda memiliki ekstensi pg_tle yang diatur seperti yang dijelaskan Menyiapkan Ekstensi Bahasa Tepercaya di klaster DB Aurora PostgreSQL Anda.

catatan

Untuk mengikuti prosedur ini, Anda harus memiliki hak istimewa peran pgtle_admin.

Untuk membuat contoh ekstensi TLE

Langkah-langkah berikut menggunakan contoh basis data bernama labdb. Basis data ini milik pengguna utama postgres. Peran postgres juga memiliki izin peran pgtle_admin.

  1. Gunakan psql untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL.

    psql --host=db-instance-123456789012.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. Buat ekstensi TLE bernama pg_distance dengan menyalin kode berikut dan menempelkannya ke konsol sesi psql Anda.

    SELECT pgtle.install_extension ( 'pg_distance', '0.1', 'Distance functions for two points', $_pg_tle_$ CREATE FUNCTION dist(x1 float8, y1 float8, x2 float8, y2 float8, norm int) RETURNS float8 AS $$ SELECT (abs(x2 - x1) ^ norm + abs(y2 - y1) ^ norm) ^ (1::float8 / norm); $$ LANGUAGE SQL; CREATE FUNCTION manhattan_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 1); $$ LANGUAGE SQL; CREATE FUNCTION euclidean_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 2); $$ LANGUAGE SQL; $_pg_tle_$ );

    Anda akan melihat output seperti berikut.

    install_extension --------------- t (1 row)

    Artefak yang membentuk ekstensi pg_distance sekarang diinstal di basis data Anda. Artefak ini mencakup file kontrol dan kode untuk ekstensi, yang merupakan item yang harus ada sehingga ekstensi dapat dibuat menggunakan perintah CREATE EXTENSION. Dengan kata lain, Anda masih perlu membuat ekstensi agar fungsinya tersedia bagi pengguna basis data.

  3. Untuk membuat ekstensi, gunakan perintah CREATE EXTENSION seperti yang Anda lakukan untuk ekstensi lainnya. Seperti ekstensi lainnya, pengguna basis data harus memiliki izin CREATE dalam basis data.

    CREATE EXTENSION pg_distance;
  4. Untuk menguji ekstensi TLE pg_distance, Anda dapat menggunakannya untuk menghitung Jarak Manhattan antara empat titik.

    labdb=> SELECT manhattan_dist(1, 1, 5, 5); 8

    Untuk menghitung Jarak Euclidean antara kumpulan titik yang sama, Anda dapat menggunakan berikut.

    labdb=> SELECT euclidean_dist(1, 1, 5, 5); 5.656854249492381

Ekstensi pg_distance memuat fungsi dalam basis data dan membuatnya tersedia bagi setiap pengguna dengan izin pada basis data.

Mengubah ekstensi TLE

Untuk meningkatkan performa kueri untuk fungsi yang dikemas dalam ekstensi TLE ini, tambahkan dua atribut PostgreSQL berikut ke spesifikasinya.

  • IMMUTABLE – Atribut IMMUTABLE memastikan bahwa pengoptimal kueri dapat menggunakan pengoptimalan untuk meningkatkan waktu respons kueri. Untuk informasi selengkapnya, lihat Function Volatility Categories dalam dokumentasi PostgreSQL.

  • PARALLEL SAFE – Atribut PARALLEL SAFE adalah atribut lain yang memungkinkan PostgreSQL menjalankan fungsi dalam mode paralel. Untuk informasi selengkapnya, lihat CREATE FUNCTION dalam dokumentasi PostgreSQL.

Dalam contoh berikut, Anda dapat melihat bagaimana fungsi pgtle.install_update_path digunakan untuk menambahkan atribut ini ke setiap fungsi guna membuat ekstensi TLE pg_distance versi 0.2. Untuk informasi selengkapnya tentang fungsi ini, lihat pgtle.install_update_path. Anda harus memiliki peran pgtle_admin untuk melakukan tugas ini.

Untuk memperbarui ekstensi TLE yang ada dan menentukan versi default
  1. Hubungkan ke instans penulis klaster DB Aurora PostgreSQL Anda menggunakan psql atau alat klien lainnya, seperti pgAdmin.

    psql --host=db-instance-123456789012.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. Buat ekstensi TLE yang ada dengan menyalin kode berikut dan menempelkannya ke konsol sesi psql Anda.

    SELECT pgtle.install_update_path ( 'pg_distance', '0.1', '0.2', $_pg_tle_$ CREATE OR REPLACE FUNCTION dist(x1 float8, y1 float8, x2 float8, y2 float8, norm int) RETURNS float8 AS $$ SELECT (abs(x2 - x1) ^ norm + abs(y2 - y1) ^ norm) ^ (1::float8 / norm); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION manhattan_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 1); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION euclidean_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 2); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; $_pg_tle_$ );

    Anda akan melihat hasil yang mirip dengan berikut ini.

    install_update_path --------------------- t (1 row)

    Anda dapat menjadikan versi ekstensi ini sebagai versi default, sehingga pengguna basis data tidak perlu menentukan versi saat mereka membuat atau memperbarui ekstensi di basis data mereka.

  3. Untuk menentukan bahwa versi modifikasi (versi 0.2) ekstensi TLE Anda adalah versi default, gunakan fungsi pgtle.set_default_version seperti yang ditunjukkan pada contoh berikut.

    SELECT pgtle.set_default_version('pg_distance', '0.2');

    Untuk informasi selengkapnya tentang fungsi ini, lihat pgtle.set_default_version.

  4. Dengan kode yang diterapkan, Anda dapat memperbarui ekstensi TLE yang diinstal seperti biasa, dengan menggunakan perintah ALTER EXTENSION ... UPDATE, seperti yang ditunjukkan di sini:

    ALTER EXTENSION pg_distance UPDATE;

Menghapus ekstensi TLE dari basis data

Anda dapat menghapus ekstensi TLE Anda dengan menggunakan perintah DROP EXTENSION dengan cara yang sama seperti yang Anda lakukan untuk ekstensi PostgreSQL lainnya. Menghapus ekstensi tidak menghapus file penginstalan yang membentuk ekstensi, yang memungkinkan pengguna membuat ulang ekstensi. Untuk menghapus ekstensi dan file penginstalannya, lakukan proses dua langkah berikut.

Untuk menghilangkan ekstensi TLE dan menghapus file penginstalannya
  1. Gunakan psql atau alat klien lain untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL.

    psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=dbname
  2. Hilangkan ekstensi seperti yang Anda lakukan pada ekstensi PostgreSQL.

    DROP EXTENSION your-TLE-extension

    Misalnya, jika Anda membuat ekstensi pg_distance seperti yang dijelaskan dalamContoh: Membuat ekstensi bahasa tepercaya menggunakan SQL, Anda dapat menghilangkan ekstensi sebagai berikut.

    DROP EXTENSION pg_distance;

    Anda melihat output yang mengonfirmasi bahwa ekstensi telah dihilangkan, sebagai berikut.

    DROP EXTENSION

    Pada titik ini, ekstensi tidak lagi aktif dalam basis data. Namun, file penginstalan dan file kontrolnya masih tersedia di basis data, sehingga pengguna basis data dapat membuat ekstensi lagi jika ingin.

    • Jika ingin membiarkan file ekstensi tetap utuh sehingga pengguna basis data dapat membuat ekstensi TLE, Anda dapat berhenti di sini.

    • Jika Anda ingin menghapus semua file yang membentuk ekstensi, lanjutkan ke langkah berikutnya.

  3. Untuk menghapus semua file penginstalan untuk ekstensi Anda, gunakan fungsi pgtle.uninstall_extension. Fungsi ini menghapus semua kode dan file kontrol untuk ekstensi Anda.

    SELECT pgtle.uninstall_extension('your-tle-extension-name');

    Misalnya, untuk menghapus semua file penginstalan pg_distance, gunakan perintah berikut.

    SELECT pgtle.uninstall_extension('pg_distance'); uninstall_extension --------------------- t (1 row)

Menghapus instalan Ekstensi Bahasa Tepercaya untuk PostgreSQL

Jika tidak ingin lagi membuat ekstensi TLE Anda sendiri menggunakan TLE, Anda dapat menghilangkan ekstensi pg_tle dan menghapus semua artefak. Tindakan ini mencakup menghilangkan ekstensi TLE apa pun dalam basis data dan menghilangkan skema pgtle.

Untuk menghilangkan ekstensi pg_tle dan skema dari basis data
  1. Gunakan psql atau alat klien lain untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL.

    psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=dbname
  2. Hilangkan ekstensi pg_tle dari basis data. Jika basis data memiliki ekstensi TLE Anda sendiri yang masih berjalan di basis data, Anda juga harus menghilangkan ekstensi tersebut. Untuk melakukannya, Anda dapat menggunakan kata kunci CASCADE, seperti yang ditunjukkan berikut ini.

    DROP EXTENSION pg_tle CASCADE;

    Jika ekstensi pg_tle masih tidak aktif dalam basis data, Anda tidak perlu menggunakan kata kunci CASCADE.

  3. Hilangkan skema pgtle. Tindakan ini akan menghapus semua fungsi manajemen dari basis data.

    DROP SCHEMA pgtle CASCADE;

    Perintah ini menampilkan hasil berikut setelah proses selesai.

    DROP SCHEMA

    Ekstensi pg_tle, skema dan fungsinya, serta semua artefak dihapus. Untuk membuat ekstensi baru menggunakan TLE, lanjutkan proses penyiapan lagi. Untuk informasi selengkapnya, lihat Menyiapkan Ekstensi Bahasa Tepercaya di klaster DB Aurora PostgreSQL Anda.

Menggunakan hook PostgreSQL dengan ekstensi TLE

Hook adalah mekanisme callback yang tersedia di PostgreSQL yang memungkinkan developer memanggil fungsi kustom atau rutinitas lainnya selama operasi basis data reguler. Kit pengembangan TLE mendukung hook PostgreSQL sehingga Anda dapat mengintegrasikan fungsi kustom dengan perilaku PostgreSQL saat runtime. Misalnya, Anda dapat menggunakan hook untuk mengaitkan proses autentikasi dengan kode kustom Anda sendiri, atau mengubah proses perencanaan dan eksekusi kueri untuk kebutuhan spesifik Anda.

Ekstensi TLE Anda dapat menggunakan hook. Jika hook cakupannya global, ini berlaku di semua basis data. Oleh karena itu, jika ekstensi TLE Anda menggunakan hook global, Anda perlu membuat ekstensi TLE di semua basis data yang dapat diakses pengguna.

Saat menggunakan ekstensi pg_tle untuk membuat Ekstensi Bahasa Tepercaya Anda sendiri, Anda dapat menggunakan hook yang tersedia dari SQL API untuk membangun fungsi ekstensi. Anda harus mendaftarkan hook apa pun di pg_tle. Untuk beberapa hook, Anda mungkin juga perlu mengatur berbagai parameter konfigurasi. Misalnya, hook pemeriksaan passcode dapat diatur ke aktif, nonaktif, wajib. Untuk informasi selengkapnya tentang persyaratan khusus untuk hook pg_tle yang tersedia, lihat Referensi hook untuk Ekstensi Bahasa Tepercaya untuk PostgreSQL.

Contoh: Membuat ekstensi yang menggunakan hook PostgreSQL

Contoh yang dibahas di bagian ini menggunakan hook PostgreSQL untuk memeriksa kata sandi yang diberikan selama operasi SQL tertentu dan mencegah pengguna basis data mengatur kata sandi mereka ke salah satu basis data yang tercantum dalam tabel password_check.bad_passwords. Tabel berisi sepuluh besar pilihan kata sandi yang paling umum digunakan, tetapi mudah dipecahkan.

Untuk menyiapkan contoh ini di klaster DB Aurora PostgreSQL, Anda harus sudah menginstal Ekstensi Bahasa Tepercaya. Untuk detailnya, lihat Menyiapkan Ekstensi Bahasa Tepercaya di klaster DB Aurora PostgreSQL Anda.

Untuk menyiapkan contoh hook pemeriksaan kata sandi
  1. Gunakan psql untuk terhubung ke instans penulis klaster DB Aurora PostgreSQL.

    psql --host=db-instance-123456789012.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. Salin kode dari Daftar kode hook pemeriksaan kata sandi dan tempel ke basis data Anda.

    SELECT pgtle.install_extension ( 'my_password_check_rules', '1.0', 'Do not let users use the 10 most commonly used passwords', $_pgtle_$ CREATE SCHEMA password_check; REVOKE ALL ON SCHEMA password_check FROM PUBLIC; GRANT USAGE ON SCHEMA password_check TO PUBLIC; CREATE TABLE password_check.bad_passwords (plaintext) AS VALUES ('123456'), ('password'), ('12345678'), ('qwerty'), ('123456789'), ('12345'), ('1234'), ('111111'), ('1234567'), ('dragon'); CREATE UNIQUE INDEX ON password_check.bad_passwords (plaintext); CREATE FUNCTION password_check.passcheck_hook(username text, password text, password_type pgtle.password_types, valid_until timestamptz, valid_null boolean) RETURNS void AS $$ DECLARE invalid bool := false; BEGIN IF password_type = 'PASSWORD_TYPE_MD5' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE ('md5' || md5(bp.plaintext || username)) = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common password dictionary'; END IF; ELSIF password_type = 'PASSWORD_TYPE_PLAINTEXT' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE bp.plaintext = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common common password dictionary'; END IF; END IF; END $$ LANGUAGE plpgsql SECURITY DEFINER; GRANT EXECUTE ON FUNCTION password_check.passcheck_hook TO PUBLIC; SELECT pgtle.register_feature('password_check.passcheck_hook', 'passcheck'); $_pgtle_$ );

    Setelah ekstensi dimuat ke basis data, Anda akan melihat output seperti berikut.

    install_extension ------------------- t (1 row)
  3. Jika masih terhubung ke basis data, Anda kini dapat membuat ekstensi.

    CREATE EXTENSION my_password_check_rules;
  4. Anda dapat mengonfirmasi bahwa ekstensi telah dibuat dalam basis data dengan menggunakan metacommand psql berikut.

    \dx List of installed extensions Name | Version | Schema | Description -------------------------+---------+------------+------------------------------------------------------------- my_password_check_rules | 1.0 | public | Prevent use of any of the top-ten most common bad passwords pg_tle | 1.0.1 | pgtle | Trusted-Language Extensions for PostgreSQL plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language (3 rows)
  5. Buka sesi terminal lain untuk bekerja dengan AWS CLI. Anda perlu mengubah grup parameter DB kustom untuk mengaktifkan hook pemeriksaan kata sandi. Untuk melakukannya, gunakan perintah modify-db-parameter-groupCLI seperti yang ditunjukkan pada contoh berikut.

    aws rds modify-db-parameter-group \ --region aws-region \ --db-parameter-group-name your-custom-parameter-group \ --parameters "ParameterName=pgtle.enable_password_check,ParameterValue=on,ApplyMethod=immediate"

    Mungkin diperlukan waktu beberapa menit agar perubahan pada pengaturan grup parameter diterapkan. Akan tetapi, parameter ini bersifat dinamis, jadi Anda tidak perlu memulai ulang instans penulis klaster DB Aurora PostgreSQL untuk menerapkan pengaturan.

  6. Buka sesi psql dan kirim kueri ke basis data untuk memverifikasi bahwa hook password_check telah diaktifkan.

    labdb=> SHOW pgtle.enable_password_check; pgtle.enable_password_check ----------------------------- on (1 row)

Hook password_check kini aktif. Anda dapat mengujinya dengan membuat peran baru dan menggunakan salah satu kata sandi yang buruk, seperti pada contoh berikut.

CREATE ROLE test_role PASSWORD 'password'; ERROR: Cannot use passwords from the common password dictionary CONTEXT: PL/pgSQL function password_check.passcheck_hook(text,text,pgtle.password_types,timestamp with time zone,boolean) line 21 at RAISE SQL statement "SELECT password_check.passcheck_hook( $1::pg_catalog.text, $2::pg_catalog.text, $3::pgtle.password_types, $4::pg_catalog.timestamptz, $5::pg_catalog.bool)"

Output ini telah diformat agar mudah dibaca.

Contoh berikut menunjukkan bahwa perilaku \password metacommand interaktif pgsql juga dipengaruhi oleh hook password_check.

postgres=> SET password_encryption TO 'md5'; SET postgres=> \password Enter new password for user "postgres":***** Enter it again:***** ERROR: Cannot use passwords from the common password dictionary CONTEXT: PL/pgSQL function password_check.passcheck_hook(text,text,pgtle.password_types,timestamp with time zone,boolean) line 12 at RAISE SQL statement "SELECT password_check.passcheck_hook($1::pg_catalog.text, $2::pg_catalog.text, $3::pgtle.password_types, $4::pg_catalog.timestamptz, $5::pg_catalog.bool)"

Anda dapat menghilangkan ekstensi TLE ini dan menghapus instalan file sumbernya jika ingin. Untuk informasi selengkapnya, lihat Menghapus ekstensi TLE dari basis data.

Daftar kode hook pemeriksaan kata sandi

Kode contoh yang ditampilkan di sini menentukan spesifikasi untuk ekstensi TLE my_password_check_rules. Jika kode ini disalin dan ditempelkan ke basis data, kode untuk ekstensi my_password_check_rules akan dimuat ke dalam basis data, dan hook password_check akan didaftarkan untuk digunakan oleh ekstensi.

SELECT pgtle.install_extension ( 'my_password_check_rules', '1.0', 'Do not let users use the 10 most commonly used passwords', $_pgtle_$ CREATE SCHEMA password_check; REVOKE ALL ON SCHEMA password_check FROM PUBLIC; GRANT USAGE ON SCHEMA password_check TO PUBLIC; CREATE TABLE password_check.bad_passwords (plaintext) AS VALUES ('123456'), ('password'), ('12345678'), ('qwerty'), ('123456789'), ('12345'), ('1234'), ('111111'), ('1234567'), ('dragon'); CREATE UNIQUE INDEX ON password_check.bad_passwords (plaintext); CREATE FUNCTION password_check.passcheck_hook(username text, password text, password_type pgtle.password_types, valid_until timestamptz, valid_null boolean) RETURNS void AS $$ DECLARE invalid bool := false; BEGIN IF password_type = 'PASSWORD_TYPE_MD5' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE ('md5' || md5(bp.plaintext || username)) = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common password dictionary'; END IF; ELSIF password_type = 'PASSWORD_TYPE_PLAINTEXT' THEN SELECT EXISTS( SELECT 1 FROM password_check.bad_passwords bp WHERE bp.plaintext = password ) INTO invalid; IF invalid THEN RAISE EXCEPTION 'Cannot use passwords from the common common password dictionary'; END IF; END IF; END $$ LANGUAGE plpgsql SECURITY DEFINER; GRANT EXECUTE ON FUNCTION password_check.passcheck_hook TO PUBLIC; SELECT pgtle.register_feature('password_check.passcheck_hook', 'passcheck'); $_pgtle_$ );