Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

Trabalhar com um banco de dados Oracle usando a extensão oracle_fdw

Modo de foco
Trabalhar com um banco de dados Oracle usando a extensão oracle_fdw - Amazon Relational Database Service

Para acessar um banco de dados Oracle pela instância de banco de dados do RDS for PostgreSQL, você pode instalar e usar a extensão oracle_fdw. Essa extensão é um invólucro de dados externos para bancos de dados Oracle. Para saber mais sobre a extensão, consulte a documentação do oracle_fdw.

A extensão oracle_fdw é compatível com o RDS for PostgreSQL 12.7, 13.3 e versões posteriores.

Ativação da extensão oracle_fdw

Para usar a extensão oracle_fdw, realize o procedimento a seguir.

Para ativar a extensão oracle_fdw
  • Execute o comando a seguir usando uma conta que tenha as permissões de rds_superuser.

    CREATE EXTENSION oracle_fdw;

Exemplo: usar um servidor externo vinculado a um banco de dados Amazon RDS for Oracle

O exemplo a seguir mostra o uso de um servidor externo vinculado a um banco de dados Amazon RDS for Oracle.

Para criar um servidor externo vinculado a um banco de dados do RDS for Oracle
  1. Na instância de banco de dados do RDS for Oracle, observe:

    • Endpoint

    • Port

    • Database name

  2. Crie um servidor externo.

    test=> CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//endpoint:port/DB_name'); CREATE SERVER
  3. Conceda uso a um usuário que não tenha privilégios rds_superuser, por exemplo user1.

    test=> GRANT USAGE ON FOREIGN SERVER oradb TO user1; GRANT
  4. Conecte-se como user1 e crie um mapeamento para um usuário Oracle.

    test=> CREATE USER MAPPING FOR user1 SERVER oradb OPTIONS (user 'oracleuser', password 'mypassword'); CREATE USER MAPPING
  5. Crie uma tabela estrangeira vinculada a uma tabela Oracle.

    test=> CREATE FOREIGN TABLE mytab (a int) SERVER oradb OPTIONS (table 'MYTABLE'); CREATE FOREIGN TABLE
  6. Consulte a tabela externa.

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

Se a consulta relatar o seguinte erro, verifique seu grupo de segurança e a lista de controle de acesso (ACL) para verificar se as duas instâncias podem se comunicar.

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

Como trabalhar com criptografia em trânsito

A criptografia PostgreSQL-to-Oracle em trânsito é baseada em uma combinação de parâmetros de configuração de cliente e servidor. Para obter um exemplo usando o Oracle 21c, consulte About the Values for Negotiating Encryption and Integrity (Sobre os valores para negociar criptografia e integridade) na documentação do Oracle. O cliente usado para oracle_fdw no Amazon RDS é configurado com ACCEPTED, portanto a criptografia depende da configuração do servidor de banco de dados do Oracle.

Se o banco de dados estiver no RDS for Oracle, consulte Criptografia de rede nativa do Oracle para configurar a criptografia.

Noções básicas da visualização e das permissões de pg_user_mappings

O catálogo PostgreSQL pg_user_mapping armazena o mapeamento de um usuário do RDS for PostgreSQL para o usuário em um servidor de dados externo (remoto). O acesso ao catálogo é restrito, mas você usa a visualização pg_user_mappings para ver os mapeamentos. Veja a seguir um exemplo que mostra como as permissões se aplicam a um banco de dados Oracle de exemplo, mas essas informações se aplicam de forma mais geral a qualquer wrapper de dados externo.

Na saída a seguir, você pode encontrar funções e permissões mapeadas para três usuários de exemplo diferentes. Usuários eo rdssu1 e rdssu2 são membros da função rds_superuser, e user1 não é. O exemplo usa o metacomando \du do psql para listar as funções existentes.

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

Todos os usuários, incluindo aqueles com privilégios rds_superuser, têm permissão para visualizar seus próprios mapeamentos de usuário (umoptions) na tabela pg_user_mappings. Como mostrado no exemplo a seguir, quando rdssu1 tenta obter todos os mapeamentos do usuário, é gerado um erro, mesmo com privilégios rdssu1rds_superuser:

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

Veja a seguir alguns exemplos:

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)

Devido às diferenças na implementação de information_schema._pg_user_mappings e pg_catalog.pg_user_mappings, um rds_superuser criado manualmente requer outras permissões para visualizar senhas no pg_catalog.pg_user_mappings.

Nenhuma permissão adicional é necessária para um rds_superuser visualizar senhas no information_schema._pg_user_mappings.

Usuários que não tenham a função rds_superuser poderão visualizar senhas em pg_user_mappings somente nas seguintes condições:

  • O usuário atual é o usuário que está sendo mapeado e é proprietário do servidor ou mantém o privilégio USAGE sobre ele.

  • O usuário atual é o proprietário do servidor, e o mapeamento é para PUBLIC.

PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.