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 dall'istanza database RDS for PostgreSQL è possibile 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'estensione oracle_fdw
è supportata su RDS for PostgreSQL 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'utilizzo di un server esterno collegato a un database Amazon RDS for Oracle.
Come creare un server esterno collegato a un database RDS for Oracle
-
Annotare le seguenti informazioni sull'istanza database 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 segnala il seguente errore, controllare il gruppo di sicurezza e la lista di controllo degli accessi (ACL) per assicurarsi che entrambe le istanze possano comunicare.
ERROR: connection for foreign table "mytab" cannot be established
DETAIL: ORA-12170: TNS:Connect timeout occurred
Utilizzo della crittografia in transito
PostgreSQL-to-Oracle la crittografia in transito 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 e utilizza Oracle Security Library (libnnz) per la crittografia.
Se il database si trova su RDS for Oracle, consultare Crittografia di rete nativa Oracle per configurare la crittografia.
Informazioni sulla visualizzazione pg_user_mappings e sulle autorizzazioni
Il catalogo PostgreSQL pg_user_mapping
archivia la mappatura da un utente RDS for PostgreSQL all'utente in un server remoto di dati esterni. 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
.