Interazione con un database Oracle utilizzando l'estensione oracle_fdw - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Interazione con un database Oracle utilizzando l'estensione oracle_fdw

Per accedere a un database Oracle dal per l'istanza Postgre SQL DB, puoi installare e utilizzare l'estensione. oracle_fdw Questa estensione è un wrapper di dati esterni per database Oracle. Per ulteriori informazioni sull'estensione, consultare la documentazione di oracle_fdw.

L'oracle_fdwestensione è supportata su Postgre RDS SQL 12.7, 13.3 e versioni successive.

Attivazione dell'estensione oracle_fdw

Per utilizzare l'estensione oracle_fdw, eseguire la procedura riportata di seguito.

Come attivare l'estensione oracle_fdw
  • Eseguire il seguente comando utilizzando un account con le autorizzazioni rds_superuser.

    CREATE EXTENSION oracle_fdw;

Esempio: utilizzo di un server esterno collegato a un database Amazon RDS for Oracle

L'esempio seguente mostra l'uso di un server esterno collegato a un database Amazon RDS for Oracle.

Per creare un server esterno collegato a un database RDS per Oracle
  1. Tieni presente quanto segue sull'istanza DB RDS for Oracle:

    • Endpoint

    • Porta

    • Nome del database

  2. Creare un server esterno.

    test=> CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//endpoint:port/DB_name'); CREATE SERVER
  3. Concedere l'utilizzo a un utente che non dispone dei privilegi rds_superuser, ad esempiouser1.

    test=> GRANT USAGE ON FOREIGN SERVER oradb TO user1; GRANT
  4. Connettersi come user1 e creare una mappatura a un utente Oracle.

    test=> CREATE USER MAPPING FOR user1 SERVER oradb OPTIONS (user 'oracleuser', password 'mypassword'); CREATE USER MAPPING
  5. Creare una tabella esterna collegata a una tabella Oracle.

    test=> CREATE FOREIGN TABLE mytab (a int) SERVER oradb OPTIONS (table 'MYTABLE'); CREATE FOREIGN TABLE
  6. Eseguire una query sulla tabella esterna.

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

Se la query riporta il seguente errore, controlla il gruppo di sicurezza e l'elenco di controllo degli accessi (ACL) per assicurarti che entrambe le istanze siano in grado di comunicare.

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

Utilizzo della crittografia in transito

La crittografia in transito SQL da Postgre a Oracle si basa su una combinazione di parametri di configurazione client e server. Per un esempio di utilizzo di Oracle 21c, consultare Informazioni sui valori per la negoziazione di crittografia e integrità nella documentazione Oracle. Il client utilizzato per oracle_fdw su RDS Amazon è configurato ACCEPTED con, il che significa che la crittografia dipende dalla configurazione del server di database Oracle.

Se il database è attivo RDS per Oracle, consulta la crittografia di rete nativa di Oracle per configurare la crittografia.

Informazioni sulla visualizzazione pg_user_mappings e sulle autorizzazioni

Il SQL catalogo Postgre pg_user_mapping memorizza la mappatura da e per l'utente RDSPostgre SQL Aurora all'utente su un server di dati esterno (remoto). L'accesso al catalogo è limitato, ma puoi usare la visualizzazione pg_user_mappings per vedere le mappature. Di seguito è possibile trovare un esempio che mostra come si applicano le autorizzazioni con un database Oracle, sebbene le stesse informazioni si applichino più in generale a qualsiasi wrapper di dati esterno.

Nel seguente output sono presenti ruoli e autorizzazioni mappati su tre diversi utenti di esempio. Gli utenti rdssu1 e rdssu2 sono membri del ruolo rds_superuser, mentre user1 non lo è. Nell'esempio viene utilizzato il metacomando psql \du per elencare i ruoli esistenti.

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

Tutti gli utenti, inclusi gli utenti che godono dei privilegi rds_superuser, sono autorizzati a visualizzare le proprie mappature utente (umoptions) nella tabella pg_user_mappings. Come mostrato nell'esempio seguente, quando rdssu1 cerca di ottenere tutte le mappature utente, viene generato un errore anche se gode dei privilegi rdssu1rds_superuser:

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

Di seguito vengono riportati alcuni esempi.

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)

A causa delle differenze nell'implementazione di information_schema._pg_user_mappings e pg_catalog.pg_user_mappings, un rds_superuser creato manualmente richiede autorizzazioni aggiuntive per visualizzare le password in pg_catalog.pg_user_mappings.

Non sono necessarie autorizzazioni aggiuntive per un rds_superuser che desideri visualizzare le password in information_schema._pg_user_mappings.

Gli utenti che non dispongono del ruolo rds_superuser possono visualizzare le password in pg_user_mappings solo nelle seguenti condizioni:

  • L'utente corrente è l'utente mappato e possiede il server oppure detiene il privilegio USAGE su di esso.

  • L'utente corrente è il proprietario del server e la mappatura è per PUBLIC.