Arbeiten mit Oracle-Datenbanken unter Verwendung der Erweiterung oracle_fdw - Amazon Relational Database Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Arbeiten mit Oracle-Datenbanken unter Verwendung der Erweiterung oracle_fdw

Um von Ihrer RDS-für-PostgreSQL-DB-Instance auf eine Oracle-Datenbank zuzugreifen, können Sie die Erweiterung oracle_fdw installieren und verwenden. Diese Erweiterung ist ein Fremddaten-Wrapper für Oracle-Datenbanken. Weitere Informationen zu dieser Erweiterung finden Sie in der oracle_fdw-Dokumentation.

Die Erweiterung oracle_fdw wird von den RDS-für-PostgreSQL-Versionen 12.7, 13.3 und höher unterstützt.

Aktivieren der Erweiterung oracle_fdw

So verwenden Sie die Erweiterung oracle_fdw:

Aktivieren der Erweiterung oracle_fdw
  • Führen Sie den folgenden Befehl mit einem Konto aus, das die rds_superuser-Berechtigungen besitzt.

    CREATE EXTENSION oracle_fdw;

Beispiel: Verwendung eines fremden Servers, der mit einer Amazon RDS for Oracle Database verknüpft ist

Das folgende Beispiel zeigt die Verwendung eines fremden Servers, der mit einer Amazon-RDS-für-Oracle-Datenbank verknüpft ist.

So erstellen Sie einen fremden Server, der mit einer RDS-for-Oracle-Datenbank verknüpft ist:
  1. Beachten Sie Folgendes auf der RDS-for-Oracle-DB-Instance:

    • Endpunkt

    • Port

    • Datenbankname

  2. Erstellen Sie einen fremden Server.

    test=> CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//endpoint:port/DB_name'); CREATE SERVER
  3. Gewähren Sie einem Benutzer, der keine rds_superuser-Berechtigungen hat, die Nutzung, zum Beispiel user1.

    test=> GRANT USAGE ON FOREIGN SERVER oradb TO user1; GRANT
  4. Verbinden Sie sich als user1 und erstellen Sie ein Mapping zu einem Oracle-Benutzer.

    test=> CREATE USER MAPPING FOR user1 SERVER oradb OPTIONS (user 'oracleuser', password 'mypassword'); CREATE USER MAPPING
  5. Erstellen einer fremden Tabelle, die mit einer Oracle-Tabelle verknüpft ist.

    test=> CREATE FOREIGN TABLE mytab (a int) SERVER oradb OPTIONS (table 'MYTABLE'); CREATE FOREIGN TABLE
  6. Fragen Sie die fremde Tabelle ab.

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

Wenn die Abfrage den folgenden Fehler meldet, überprüfen Sie Ihre Sicherheitsgruppe und Zugriffssteuerungsliste (Access Control List, ACL), um sicherzustellen, dass beide Instances kommunizieren können.

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

Datenverschlüsselung während der Übertragung

PostgreSQL-to-Oracle Die Verschlüsselung bei der Übertragung basiert auf einer Kombination von Client- und Serverkonfigurationsparametern. Ein Beispiel für Oracle 21c finden Sie unter Informationen zu den Werten für Verschlüsselung und Integrität in der Oracle-Dokumentation. Der für oracle_fdw auf Amazon RDS verwendete Client ist mit konfiguriertACCEPTED, was bedeutet, dass die Verschlüsselung von der Konfiguration des Oracle-Datenbankservers abhängt und für die Verschlüsselung die Oracle Security Library (libnnz) verwendet wird.

Wenn sich Ihre Datenbank auf RDS for Oracle befindet, finden Sie weitere Informationen zum Konfigurieren der Verschlüsselung unter Oracle Native Network Encryption.

Informationen zur Ansicht pg_user_mappings und zu Berechtigungen

Der PostgreSQL-Katalog pg_user_mapping speichert das Mapping eines Benutzers von RDS for PostgreSQL für den Benutzer auf einem fremden Datenserver (Remote). Der Zugriff auf den Katalog ist eingeschränkt, aber Sie verwenden die Ansicht pg_user_mappings, um die Mappings zu sehen. Das folgende Beispiel zeigt, wie Berechtigungen für eine Oracle-Beispieldatenbank gelten. Diese Informationen gelten im Allgemeinen für jeden fremden Daten-Wrapper.

In der folgenden Ausgabe finden Sie Rollen und Berechtigungen, die drei verschiedenen Beispielbenutzern zugeordnet sind. Benutzer rdssu1 und rdssu2 sind Mitglieder der rds_superuser-Rolle und user1 nicht. In dem Beispiel wird der psql-Metabefehl \du verwendet, um vorhandene Rollen aufzulisten.

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

Alle Benutzer, einschließlich Benutzer mit rds_superuser-Berechtigungen, dürfen ihre eigenen Benutzerzuordnungen (umoptions) in der pg_user_mappings-Tabelle anzeigen. Wie im folgenden Beispiel gezeigt, wird trotz rdssu1rds_superuser-Berechtigungen ein Fehler gemeldet, wenn rdssu1 versucht, alle Benutzerzuordnungen abzurufen:

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

Im Folgenden sind einige Beispiele aufgeführt.

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)

Aufgrund von Unterschieden in der Implementierung von information_schema._pg_user_mappings und pg_catalog.pg_user_mappings erfordert ein manuell erstelltes rds_superuser zusätzliche Berechtigungen zum Anzeigen von Passwörtern in pg_catalog.pg_user_mappings.

Es sind keine zusätzlichen Berechtigungen für rds_superuser nötig, um Kennwörter in information_schema._pg_user_mappings anzuzeigen.

Benutzer, die nicht über die rds_superuser-Rolle verfügen können Passwörter in pg_user_mappings nur unter den folgenden Bedingungen anzeigen:

  • Der aktuelle Benutzer ist der zugeordnete Benutzer und besitzt den Server oder besitzt die USAGE-Berechtigung dafür.

  • Der aktuelle Benutzer ist der Serverbesitzer und das Mapping ist für PUBLIC.