在 Oracle 数据库实例上配置出站网络访问 - Amazon Relational Database Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 Oracle 数据库实例上配置出站网络访问

Amazon RDS 支持对 Oracle 数据库实例进行出站网络访问。要将实例连接到网络,您可以使用以下 PL/SQL 软件包:

  • UTL_HTTP – 从 SQL 和 PL/SQL 进行 HTTP 标注。您可以使用它通过 HTTP 访问 Internet 上的数据。有关详细信息,请参阅 Oracle 文档中的 UTL_HTTP

  • UTL_TCP – 在 PL/SQL 中提供 TCP/IP 客户端访问功能。此软件包对于使用 Internet 协议和电子邮件的 PL/SQL 应用程序很有用。有关更多信息,请参阅 Oracle 文档中的 UTL_TCP

  • UTL_SMTP – 提供 SMTP 命令的接口,使客户端能够向 SMTP 服务器发送电子邮件。有关详细信息,请参阅 Oracle 文档中的 UTL_SMTP

请注意有关使用出站网络访问的以下几点:

  • 仅 VPC 中的 Oracle 数据库实例支持使用 UTL_HTTPUTL_TCPUTL_SMTP 进行出站网络访问。要确定数据库实例是否在 VPC 中,请参阅确定您使用的是 EC2-VPC 还是 EC2-Classic 平台。要将不在 VPC 中的数据库实例移动到 VPC 中,请参阅将不在 VPC 中的数据库实例移动到 VPC 中

  • 要将 SMTP 与 UTL_MAIL 选项结合使用,请参阅Oracle UTL_MAIL

  • 远程主机的域名服务器 (DNS) 名称满足以下所有条件:

    • 可公开解析。

    • Amazon RDS 数据库实例的终端节点。

    • 可通过自定义 DNS 服务器解析。有关更多信息,请参阅 设置自定义 DNS 服务器

    • 同一 VPC 或对等 VPC 中的 Amazon EC2 实例的私有 DNS 名称。在这种情况下,请确认该名称可通过自定义 DNS 服务器解析。或者,要使用 Amazon 提供的 DNS,您可以启用 VPC 设置中的 enableDnsSupport 属性,并启用对 VPC 对等连接的 DNS 解析支持。有关更多信息,请参阅 VPC 中的 DNS 支持修改 VPC 对等连接

若要安全地连接到远程 SSL/TLS 资源,您可以创建和上传自定义 Oracle wallet。使用与 Amazon RDS for Oracle 功能集成的 Amazon S3,您可以将 Wallet 从 Amazon S3 下载到 Oracle 数据库实例。有关 Oracle 的 Amazon S3 集成的信息,请参阅Amazon S3 集成

要创建用于通过 UTL_HTTP 访问 HTTP 地址的 Wallet,请执行以下操作:

  1. Amazon Trust Services 存储库获取 Amazon Root CA 1 的证书。

  2. 创建新的 Wallet 并添加以下证书:

    orapki wallet create -wallet . -auto_login_only orapki wallet add -wallet . -trusted_cert -cert AmazonRootCA1.pem -auto_login_only orapki wallet display -wallet .
  3. 将 Wallet 上传到您的 Amazon S3 存储桶。

  4. 完成 Amazon S3 与 Oracle 集成的先决条件,然后将 S3_INTEGRATION 选项添加到您的 Oracle 数据库实例。确保该选项的 IAM 角色具有您正在使用的 Amazon S3 存储桶的访问权限。

    有关更多信息,请参阅 Amazon S3 集成

  5. 连接到数据库实例,并在数据库中创建一个目录以保存 Wallet。下面的示例创建一个名为 SSL_WALLET 的目录:

    EXEC rdsadmin.rdsadmin_util.create_directory('SSL_WALLET');
  6. 将 Wallet 从您的 Amazon S3 存储桶下载到 Oracle 数据库实例。

    下面的示例将 Wallet 下载到数据库实例目录 SSL_WALLET

    SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3( p_bucket_name => 'bucket_name', p_s3_prefix => 'wallet_name', p_directory_name => 'SSL_WALLET') AS TASK_ID FROM DUAL;

    bucket_name 替换为您正在使用的存储桶的名称,并且将 wallet_name 替换为 Wallet 的名称。

  7. 通过运行以下程序,为 utl_http 事务设置此 Wallet:

    DECLARE l_wallet_path all_directories.directory_path%type; BEGIN select directory_path into l_wallet_path from all_directories where upper(directory_name)='SSL_WALLET'; utl_http.set_wallet('file:/' || l_wallet_path); END;
  8. 通过 SSL/TLS 从上面访问 URL。以下示例将访问 https://status.aws.amazon.com/robots.txt。

    SELECT utl_http.request('https://status.aws.amazon.com/robots.txt') AS ROBOTS_TXT FROM DUAL; ROBOTS_TXT -------------------------------------------------------------------------------- User-agent: * Allow: /
注意

Wallet 所需的具体证书因服务而异。对于 AWS 服务,通常可在 Amazon Trust Services 存储库中找到证书。

您可以使用类似的设置,通过 SSL/TLS 上的 UTL_SMTP(包括 Amazon Simple Email Service)发送电子邮件。

如果为每个实例配置了 Oracle SSL 选项,您可以在 SSL/TLS 终端节点上的 Oracle 数据库实例之间建立数据库连接。无需作进一步配置。有关更多信息,请参阅 Oracle 安全套接字层