云对象存储 URI 格式

本文介绍了使用 DBMS_CLOUD 的操作中源文件 URI 的格式。格式取决于您使用的对象存储服务。DBMS_CLOUD 保证安全通信,您指定的任何 URI 必须使用 HTTPS,https:// 作为 URI 的前缀。

Oracle Cloud Infrastructure Object Storage Native URI 格式

注:自治 AI 数据库仅支持标准层存储桶。它不支持归档层存储桶。

如果源文件位于商业领域 (OC1) 中的 Oracle Cloud Infrastructure Object Storage 上,则建议您使用以下 URI 格式,该格式使用对象存储专用端点。有关详细信息,请参阅对象存储专用端点

https://namespace-string.objectstorage.region.oci.customer-oci.com/n/namespace-string/b/bucketname/o/filename

注: OCI 对象存储专用端点 URL 仅在商业领域 (OC1) 中受支持,在 19.24 及更高版本中可用。

如果源文件位于 Oracle Cloud Infrastructure Object Storage 上,并且不在商业领域 (OC1) 中,则必须使用以下格式:

https://objectstorage.region.oraclecloud.com/n/namespace-string/b/bucket/o/filename

例如,在商业领域 (OC1) 中,Phoenix 数据中心 *bucketname* 存储桶中文件 channels.txt 的本机 URI 为:

https://namespace.objectstorage.region.oci.customer-oci.com/n/namespace/b/bucketname/o/channels.txt

在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关详细信息,请参阅了解对象存储名称空间

您可以从对象存储的右侧省略号菜单中的 Oracle Cloud Infrastructure Object Storage“Object Details(对象详细信息)”中找到 URI:

  1. 通过单击 Oracle Cloud 旁边的 “导航”图标 打开 Oracle Cloud Infrastructure 控制台。

  2. 从 Oracle Cloud Infrastructure 左侧导航菜单中,单击 Storage 。在对象存储和归档存储下,单击存储桶

  3. 在“列表范围”下,选择一个区间

  4. 单击名称列下的存储桶名称。

  5. 对象选项卡上,打开操作,然后单击感兴趣对象的查看对象详细信息

  6. 对象详细信息页上, URL 路径 (URI) 字段显示用于访问对象的 URI。

Oracle Cloud Infrastructure Object Storage Swift URI 格式

如果源文件位于商业领域 (OC1) 中的 Oracle Cloud Infrastructure Object Storage 上,则建议您使用以下 URI 格式,该格式使用对象存储专用端点。有关详细信息,请参阅对象存储专用端点

https://namespace-string.swiftobjectstorage.region.oci.customer-oci.com/v1/namespace-string/bucket/filename

注: OCI 对象存储专用端点 URL 仅在商业领域 (OC1) 中受支持,在 19.24 及更高版本中可用。

如果源文件位于 Oracle Cloud Infrastructure Object Storage 上,并且不在商业领域 (OC1) 中,则必须使用以下格式:

https://swiftobjectstorage.region.oraclecloud.com/v1/namespace-string/bucket/filename

例如,在商业领域 (OC1) 中,Phoenix 数据中心 *bucketname* 存储桶中文件 channels.txt 的 Swift URI 为:

https://namespace-string.swiftobjectstorage.us-phoenix-1.oci.customer-oci.com/v1/namespace-string/bucketname/channels.txt

在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关详细信息,请参阅了解对象存储名称空间

注:源文件需要存储在对象存储层存储桶中。自治 AI 数据库不支持归档存储层中的存储桶。有关更多信息,请参见对象存储概述

使用预先验证的请求 URL 的 Oracle Cloud Infrastructure Object Storage URI 格式

如果源文件位于 Oracle Cloud Infrastructure Object Storage 上,则可以使用 Oracle Cloud Infrastructure 预先验证的 URI。创建预先验证身份的请求时,将生成唯一的 URL。然后,您可以向组织、合作伙伴或第三方中的用户提供唯一的 URL,以访问预先验证身份的请求中标识的对象存储资源目标。

注:仔细评估预验证访问权限的业务需求和安全性影响。创建预先验证的请求 URL 时,请注意到期访问类型,以确保它们适合您使用。

预先验证的请求 URL 允许对请求中标识的目标具有 URL 访问权限的任何人,只要该请求处于活动状态即可。除了考虑预先验证的访问的运营需求外,管理其分发也同样重要。

如果源文件位于商业领域 (OC1) 中的 Oracle Cloud Infrastructure Object Storage 上,则建议您使用以下 URI 格式,该格式使用对象存储专用端点。有关详细信息,请参见 Object Storage Dedicated Endpoints

https://namespace-string.objectstorage.region.oci.customer-oci.com/p/encrypted_string/n/namespace-string/b/bucket/o/filename

注: OCI 对象存储专用端点 URL 仅在商业领域 (OC1) 中受支持,在 19.24 及更高版本中可用。

如果源文件位于 Oracle Cloud Infrastructure Object Storage 上,并且不在商业领域 (OC1) 中,则必须使用以下格式:

https://objectstorage.region.oraclecloud.com.com/p/encrypted_string/n/namespace-string/b/bucket/o/filename

例如,在商业领域 (OC1) 中,Phoenix 数据中心 bucketname 存储桶中 channels.txt 文件的样例预验证 URI 为:

https://namespace-string.objectstorage.us-phoenix-1.oci.customer-oci.com/p/2xN-uDtWJNsiD910UCYGue/n/namespace-string/b/bucketname/o/channels.txt

在此示例中,namespace-string 是 Oracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关详细信息,请参阅了解对象存储名称空间

您可以在任何 DBMS_CLOUD 过程中使用预先验证的 URL,该过程接受 URL 以访问 Oracle Cloud Infrastructure 对象存储中的文件,而无需创建身份证明。您需要将 credential_name 参数指定为 NULL,或者不提供 credential_name 参数。

例如:

BEGIN
  DBMS_CLOUD.COPY_DATA(
     table_name =>'CHANNELS',
     file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/p/unique-pre-authenticated-string/n/namespace-string/b/bucketname/o/channels.txt',
     format => json_object('delimiter' value ',') );
END;
/

注:混合 URL 的列表有效。如果 URL 列表同时包含需要验证的预先验证的 URL 和 URL,则 DBMS_CLOUD 使用指定的 credential_name 访问需要验证的 URL,而对于预先验证的 URL,将忽略指定的 credential_name

有关详细信息,请参阅使用预先验证的请求

Amazon S3 URI 格式

如果源文件位于 Amazon S3 中,请参见以下内容以了解用于访问文件的 URI 格式的说明:访问存储桶

例如,以下内容引用了 us-west-2 区域中 atpc 存储桶中的文件 channels.txt

https://s3-us-west-2.amazonaws.com/atpc/channels.txt

您可以在任何接受 URL 以访问 Amazon S3 对象存储中的文件的 DBMS_CLOUD 过程中使用预签名 URL,而无需创建身份证明。要在任意 DBMS_CLOUD 过程中使用预签名 URL,请将 credential_name 参数指定为 NULL,或者不提供 credential_name 参数。

有关详细信息,请参阅与其他人共享对象

注:DBMS_CLOUD 支持标准 Amazon S3 端点语法来访问存储桶。DBMS_CLOUD 不支持 Amazon S3 传统端点。有关更多信息,请参见 Legacy Endpoints

Azure Blob 存储 URI 格式

如果源文件位于 Azure Blob 存储中,请参阅以下内容以了解用于访问文件的 URI 格式的说明:资源 URI 语法

例如,以下内容引用了存储帐户 atpc_useratpc 容器中的文件 channels.txt

https://atpc_user.blob.core.windows.net/atpc/channels.txt

注:您可以在任何接受 URL 以访问 Azure Blob Storage 中的文件的 DBMS_CLOUD 过程中使用共享访问签名 (SAS) URL,而无需创建身份证明。要使用共享访问签名 (SAS) URL,请将 credential_name 参数指定为 NULL,或者不提供 credential_name 参数。

有关更多信息,请参见 Grant Limited Access to Azure Storage Resources Using Shared Access Signatures (SAS)

Amazon S3 兼容 URI 格式

DBMS_CLOUD 支持支持 Amazon S3 兼容 URL 的对象存储服务实施,包括以下服务:

注:要将 DBMS_CLOUD 与 Amazon S3 兼容的对象存储一起使用,您需要提供有效的身份证明。有关更多信息,请参见 CREATE_CREDENTIAL Procedure

如果源文件位于支持 Amazon S3 兼容 URI 的服务上,请使用以下 URI 格式访问文件:

其他客户管理的 URI 格式

除了预先配置的、可识别的 URIs 以及其全限定域名 (FQDNs),DBMS_CLOUD 还无法确定客户管理的端点 URIs 的正确验证方案。在这些情况下,DBMS_CLOUD 依赖于正确的 URI 方案来标识客户管理的端点的验证方案。

URI 方案 验证类型 访问方法说明 URI 示例
基本:// 基本身份验证 存储在数据库身份证明对象中的用户名和密码用于验证 HTTP 请求 basic://api.github.com/users/myaccount
持有人:// Bearer 标记验证 存储在数据库身份证明对象的密码字段中的 Bearer 标记用于指定 HTTP 请求的授权标头 bearer://api.sendgrid.com/v3/resource
oci:// OCI 本机 从存储的数据库身份证明对象获取的 OCI 签名密钥,用于使用 OCI 验证协议对请求进行签名 oci://objectstorage.us-ashburn-1.oraclecloud.com
public:// 不验证 公共网址 public://cms.data.gov/
s3:// 与 Amazon Web Services S3 兼容 从数据库身份证明对象的用户名/密码字段中获取的访问密钥和密钥,以及对 HTTP 请求执行的与 S3 兼容的验证。 s3://bucket.myprivatesite.com/file1.csv

示例:

使用与 S3 兼容的验证进行客户管理的端点。

此示例说明对于新 URIs,客户如何使用 DBMS_NETWORK_ACL_ADMIN 软件包添加公共或专用主机名模式。由用户 ADMIN 执行的代码块允许用户 SCOTT 对域 *.myprivatesite.com 中的端点进行 HTTPS 访问。然后,它显示用户 SCOTT 如何访问新启用的端点。请注意,用户 SCOTT 的身份证明 MY_CRED 必须存储访问密钥和密钥,以便对 URI 前缀指示的 HTTP 请求执行与 S3 兼容的验证。

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => '*.myprivatesite.com',
         ace => xs$ace_type(privilege_list => xs$name_list('http'),
                            principal_name => 'SCOTT',
                            principal_type => xs_acl.ptype_db),
         private_target => TRUE   );
END;
/

BEGIN
   DBMS_CLOUD.get_object(
       credential_name => 'MY_CRED',
       object_uri      => 's3://bucket.myprivatesite.com/file1.csv',
       directory_name  => 'MY_DIR'  );
END;
/

具有公共访问权限的客户管理的端点

此示例说明如何注册 SCOTT 用户以访问公共 REST API。ADMIN 用户为主机创建网络 ACL 以提供对 SCOTT 用户的访问权限。

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => 'data.cms.gov',
         ace => xs$ace_type(privilege_list => xs$name_list('http'),
                            principal_name => 'SCOTT',
                            principal_type => xs_acl.ptype_db)
   );
END;
/

SELECT DBMS_CLOUD.get_response_text(
          DBMS_CLOUD.send_request(
              uri     => 'public://data.cms.gov/provider-data/api/1/datastore/imports/a',
              method  => DBMS_CLOUD.METHOD_GET,
              headers => JSON_OBJECT('Accept' VALUE 'application/json')
          )
       )
   FROM DUAL;
/