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_fdw
estensione è supportata su Postgre RDS SQL 12.7, 13.3 e versioni successive.
Argomenti
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
-
Tieni presente quanto segue sull'istanza DB RDS for Oracle:
-
Endpoint
-
Porta
-
Nome del database
-
-
Creare un server esterno.
test=>
CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//
endpoint
:port
/DB_name
');CREATE SERVER
-
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
-
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
-
Creare una tabella esterna collegata a una tabella Oracle.
test=>
CREATE FOREIGN TABLE
mytab
(a int) SERVER oradb OPTIONS (table 'MYTABLE'
);CREATE FOREIGN TABLE
-
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à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 rdssu1
rds_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
.