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 Ihrem aus auf eine Oracle-Datenbank zuzugreifen, können Sie die oracle_fdw Erweiterung 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 oracle_fdw Erweiterung wird RDS für Postgre SQL 12.7, 13.3 und höhere Versionen 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 ausländischen Servers, der mit einer Amazon RDS for Oracle-Datenbank verknüpft ist

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

Um einen Fremdserver zu erstellen, der mit einer RDS für Oracle-Datenbank verknüpft ist
  1. Beachten Sie Folgendes in Bezug auf die RDS 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 Ihre Zugriffskontrollliste (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

Die SQL Postgre-zu-Oracle-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 verwendete Client RDS ist mit konfiguriertACCEPTED, was bedeutet, dass die Verschlüsselung von der Oracle-Datenbankserverkonfiguration abhängt.

Wenn Ihre Datenbank für Oracle aktiviert ist, finden Sie Informationen RDS zur Konfiguration der Verschlüsselung unter Oracle Native Network Encryption.

Informationen zur Ansicht pg_user_mappings und zu Berechtigungen

Der SQL Postgre-Katalog pg_user_mapping speichert die Zuordnung von einem RDSfür Postgre SQL zum 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.