Bekerja dengan basis data Oracle menggunakan ekstensi oracle_fdw - Layanan Basis Data Relasional Amazon

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

Bekerja dengan basis data Oracle menggunakan ekstensi oracle_fdw

Untuk mengakses database Oracle dari RDScluster , Anda dapat SQL menginstal dan menggunakan ekstensi. oracle_fdw Ekstensi ini adalah pembungkus data asing untuk basis data Oracle. Untuk mempelajari selengkapnya tentang ekstensi ini, lihat dokumentasi oracle_fdw.

oracle_fdwEkstensi ini didukung RDS untuk Postgre SQL 12.7, 13.3, dan versi yang lebih tinggi.

Mengaktifkan ekstensi oracle_fdw

Untuk menggunakan ekstensi oracle_fdw, lakukan prosedur berikut.

Untuk mengaktifkan ekstensi oracle_fdw
  • Jalankan perintah berikut menggunakan akun yang memiliki izin rds_superuser.

    CREATE EXTENSION oracle_fdw;

Contoh: Menggunakan server asing yang ditautkan ke database Amazon RDS untuk Oracle

Contoh berikut menunjukkan penggunaan server asing yang ditautkan ke Amazon RDS untuk database Oracle.

Untuk membuat server asing yang ditautkan ke database RDS untuk Oracle
  1. Perhatikan hal berikut pada contoh RDS untuk Oracle DB:

    • Titik Akhir

    • Port

    • Nama basis data

  2. Membuat server asing.

    test=> CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//endpoint:port/DB_name'); CREATE SERVER
  3. Izinkan penggunaan kepada pengguna yang tidak memiliki hak istimewa rds_superuser, misalnya user1.

    test=> GRANT USAGE ON FOREIGN SERVER oradb TO user1; GRANT
  4. Hubungkan sebagai user1, lalu buat pemetaan kepada pengguna Oracle.

    test=> CREATE USER MAPPING FOR user1 SERVER oradb OPTIONS (user 'oracleuser', password 'mypassword'); CREATE USER MAPPING
  5. Buat tabel asing yang dihubungkan ke tabel Oracle.

    test=> CREATE FOREIGN TABLE mytab (a int) SERVER oradb OPTIONS (table 'MYTABLE'); CREATE FOREIGN TABLE
  6. Buat kueri tabel asing.

    test=> SELECT * FROM mytab; a --- 1 (1 row)

Jika kueri melaporkan kesalahan berikut, periksa grup keamanan dan daftar kontrol akses (ACL) untuk memastikan bahwa kedua instance dapat berkomunikasi.

ERROR: connection for foreign table "mytab" cannot be established DETAIL: ORA-12170: TNS:Connect timeout occurred

Bekerja dengan enkripsi bergerak

Enkripsi SQL Postgre--to-Oracle dalam perjalanan didasarkan pada kombinasi parameter konfigurasi klien dan server. Untuk contoh menggunakan Oracle 21c, lihat Tentang Nilai untuk Melakukan Negosiasi Enkripsi dan Integritas pada dokumentasi Oracle. Klien yang digunakan untuk oracle_fdw di RDS Amazon dikonfigurasi ACCEPTED dengan, artinya enkripsi bergantung pada konfigurasi server database Oracle.

Jika database Anda aktif RDS untuk Oracle, lihat enkripsi jaringan asli Oracle untuk mengonfigurasi enkripsi.

Memahami tampilan dan izin pg_user_mappings

SQLKatalog Postgre pg_user_mapping menyimpan pemetaan dari pengguna RDSPostgre SQL Aurora asing (jarak jauh). Akses ke katalog dibatasi, tetapi Anda menggunakan tampilan pg_user_mappings untuk melihat pemetaan. Berikut ini Anda dapat menemukan contoh yang menunjukkan bagaimana izin berlaku dengan contoh basis data Oracle, tetapi informasi ini biasanya berlaku untuk pembungkus data asing apa pun.

Pada output berikut, Anda dapat menemukan peran dan izin yang dipetakan kepada tiga pengguna contoh yang berbeda. Pengguna rdssu1 dan rdssu2 adalah anggota dengan peran rds_superuser, sedangkan user1 tidak. Contoh menggunakan metacommand psql \du untuk daftar peran yang ada.

test=> \du List of roles Role name | Attributes | Member of -----------------+------------------------------------------------------------+------------------------------------------------------------- rdssu1 | | {rds_superuser} rdssu2 | | {rds_superuser} user1 | | {}

Semua pengguna, termasuk pengguna yang memiliki hak istimewa rds_superuser, diizinkan untuk melihat pemetaan pengguna (umoptions) mereka sendiri di tabel pg_user_mappings. Seperti yang ditunjukkan pada contoh berikut, saat rdssu1 mencoba untuk mendapatkan semua pemetaan pengguna, kesalahan ditampilkan meskipun hak istimewa rdssu1 rds_superuser:

test=> SELECT * FROM pg_user_mapping; ERROR: permission denied for table pg_user_mapping

Berikut adalah beberapa contoh.

test=> SET SESSION AUTHORIZATION rdssu1; SET test=> SELECT * FROM pg_user_mappings; umid | srvid | srvname | umuser | usename | umoptions -------+-------+---------+--------+------------+---------------------------------- 16414 | 16411 | oradb | 16412 | user1 | 16423 | 16411 | oradb | 16421 | rdssu1 | {user=oracleuser,password=mypwd} 16424 | 16411 | oradb | 16422 | rdssu2 | (3 rows) test=> SET SESSION AUTHORIZATION rdssu2; SET test=> SELECT * FROM pg_user_mappings; umid | srvid | srvname | umuser | usename | umoptions -------+-------+---------+--------+------------+---------------------------------- 16414 | 16411 | oradb | 16412 | user1 | 16423 | 16411 | oradb | 16421 | rdssu1 | 16424 | 16411 | oradb | 16422 | rdssu2 | {user=oracleuser,password=mypwd} (3 rows) test=> SET SESSION AUTHORIZATION user1; SET test=> SELECT * FROM pg_user_mappings; umid | srvid | srvname | umuser | usename | umoptions -------+-------+---------+--------+------------+-------------------------------- 16414 | 16411 | oradb | 16412 | user1 | {user=oracleuser,password=mypwd} 16423 | 16411 | oradb | 16421 | rdssu1 | 16424 | 16411 | oradb | 16422 | rdssu2 | (3 rows)

Karena perbedaan implementasi antara information_schema._pg_user_mappings dan pg_catalog.pg_user_mappings, maka rds_superuser yang dibuat secara manual memerlukan izin tambahan untuk dapat melihat kata sandi di pg_catalog.pg_user_mappings.

rds_superuser tidak memerlukan izin tambahan untuk dapat melihat kata sandi di information_schema._pg_user_mappings.

Pengguna yang tidak memiliki peran rds_superuser dapat melihat kata sandi pg_user_mappings hanya dalam kondisi berikut:

  • Pengguna saat ini adalah pengguna yang dipetakan dan memiliki server atau memegang hak istimewa USAGE atas server tersebut.

  • Pengguna saat ini adalah pemilik server dan pemetaannya untuk PUBLIC.