DBMS_CLOUD 用于访问管理

本节介绍用于访问管理的 DBMS_CLOUD 子程序。

Prerequisites

作为开发人员,您可以将 DBMS_CLOUD 过程与部署在 Oracle Public CloudMulticloudExadata Cloud@Customer 上的 Autonomous Database 结合使用。

根据部署选择,必须满足以下先决条件,才能将 DBMS_CLOUD 过程与 Amazon S3Azure Blob StorageGoogle Cloud Storage 服务提供商一起使用。

您的组管理员必须使用 NAT 网关配置出站连接,如下所述:
  • 按照 Oracle Cloud Infrastructure 文档中的创建 NAT 网关中的说明,在 Autonomous Database 资源所在的虚拟云网络 (Virtual Cloud Network,VCN) 中创建 NAT 网关。
  • 创建 NAT 网关后,向 每个子网(在 VCN 中)添加路由规则和出站安全规则,Autonomous Database 资源位于其中,以便这些资源可以使用网关从 Azure AD 实例获取公钥:
    1. 转到子网的子网详细信息页。
    2. 子网信息选项卡中,单击子网的路由表的名称以显示其路由表详细信息页。
    3. 在现有路由规则表中,检查是否已存在具有以下特征的规则:
      • 目标:0.0.0.0/0
      • 目标类型:NAT 网关
      • 目标:刚在 VCN 中创建的 NAT 网关的名称

      如果不存在此类规则,请单击添加路由规则并添加具有这些特征的路由规则。

    4. 返回到子网的子网详细信息页。
    5. 在子网的安全列表表中,单击子网的安全列表的名称以显示其安全列表详细信息页。
    6. 在侧边菜单的资源下,单击出站规则
    7. 在现有出站规则表中,检查是否已存在具有以下特征的规则:
      • 目标类型: CIDR
      • 目标:0.0.0.0/0
      • IP 协议: TCP
      • 源端口范围: 443
      • 目标端口范围:全部

      如果不存在此类规则,请单击添加出站规则并添加具有这些特征的出站规则。

环境中的 HTTP 代理设置必须允许数据库访问云服务提供商。

这些设置由组管理员在创建 Exadata Cloud@Customer 基础结构时定义,如 Using the Console to Provision Exadata Database Service on Cloud@Customer 中所述。

注意:

只有在 Exadata 基础结构处于 Requires Activation 状态之前,才能编辑包括 HTTP 代理的网络配置。一旦激活,就无法编辑这些设置。

为已预配的 Exadata 基础结构设置 HTTP 代理需要在 My Oracle Support 中创建服务请求 (SR)。有关详细信息,请参见在 My Oracle Support 中创建服务请求

访问管理的 DBMS_CLOUD 子程序

DBMS_CLOUD 程序包中用于身份证明管理的子程序,包括创建、删除和更新身份证明。

子程序 说明

CREATE_CREDENTIAL 过程

此过程将云服务身份证明存储在 Autonomous Database 中。

DROP_CREDENTIAL 过程

此过程从 Autonomous Database 中删除现有身份证明。

UPDATE_CREDENTIAL 过程

此过程更新 Autonomous Database 中的云服务身份证明属性。

CREATE_CREDENTIAL 过程

此过程将云服务身份证明存储在 Autonomous Database 中。

使用存储的云服务身份证明访问云服务以进行数据加载、查询驻留在云中的外部数据,或者使用带有 credential_name 参数的 DBMS_CLOUD 过程的其他情况。

语法

DBMS_CLOUD.CREATE_CREDENTIAL (
      credential_name   IN VARCHAR2,
      username          IN VARCHAR2,
      password          IN VARCHAR2 DEFAULT NULL);


DBMS_CLOUD.CREATE_CREDENTIAL (
      credential_name IN VARCHAR2,
      user_ocid       IN VARCHAR2,
      tenancy_ocid    IN VARCHAR2,
      private_key     IN VARCHAR2,
      fingerprint     IN VARCHAR2);


参数

Parameter (参数) 说明

credential_name

要存储的身份证明的名称。credential_name 参数必须符合不允许使用空格或连字符的 Oracle 对象命名约定。

username

usernamepassword 参数一起指定云服务身份证明。有关不同云服务的 usernamepassword 的指定内容,请参见使用说明。

password

usernamepassword 参数一起指定云服务身份证明。

user_ocid

指定用户的 OCID。有关获取用户的 OCID 的详细信息,请参见 Where to Get the Tenancy's OCID and User's OCID

tenancy_ocid

指定租户的 OCID。有关获取租户的 OCID 的详细信息,请参见 Where to Get the Tenancy's OCID and User's OCID

private_key

指定生成的私有密钥。不支持。您需要生成没有口令短语的私有密钥。有关以 PEM 格式生成密钥对的详细信息,请参见 How to Generate an API Signing Key

fingerprint

指定指纹。将生成的公钥上载到用户帐户后,指纹将显示在控制台中。对此参数使用显示的指纹。有关更多详细信息,请参见 How to Get the Key's FingerprintHow to Generate an API Signing Key

使用说明

  • 此操作以加密格式将身份证明存储在数据库中。

  • 可以通过查询 user_credentials 表来查看方案中的身份证明。

  • ADMIN 用户可以通过查询 dba_credentials 表来查看所有凭证。

  • 除非云服务身份证明发生更改,否则只需创建一次身份证明。存储凭证后,您可以为需要 credential_name 参数的 DBMS_CLOUD 过程使用相同的凭证名称。

  • 此过程重载。如果您提供基于密钥的验证属性之一 user_ocidtenancy_ocidprivate_keyfingerprint,则假定调用是基于 Oracle Cloud Infrastructure 签名密钥的身份证明。

  • 可以从 ALL_CREDENTIALS 视图中列出身份证明。例如,运行以下命令列出凭证:

    SELECT credential_name, username, comments FROM all_credentials;

Oracle Cloud Infrastructure 身份证明(Auth 标记)

对于 Oracle Cloud Infrastructureusername 是您的 Oracle Cloud Infrastructure 用户名。password 是您的 Oracle Cloud Infrastructure 验证令牌。请参见 Working with Auth Tokens

例如:

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DEF_CRED_NAME',
    username => 'adb_user@example.com',
    password => 'password' );
END;
/

验证对 OCI 对象存储的调用时,使用基于验证令牌的身份证明。对于对任何其他类型的 Oracle Cloud Infrastructure 云服务的调用,请使用基于密钥的 Oracle Cloud Infrastructure 签名身份证明。

Oracle Cloud Infrastructure 签署基于密钥的身份证明

使用 Oracle Cloud Infrastructure 签名密钥相关参数,包括 user_ocidtenancy_ocidprivate_keyfingerprint 以及 Oracle Cloud Infrastructure 签名密钥验证。

例如:

BEGIN
   DBMS_CLOUD.CREATE_CREDENTIAL (
       credential_name => ‘OCI_KEY_CRED’,
       user_ocid       => ‘ocid1.user.oc1..aaaaaaaauq54mi7zdyfhw33ozkwuontjceel7fok5nq3bf2vwetkpqsoa’,
       tenancy_ocid    => ‘ocid1.tenancy.oc1..aabbbbbbaafcue47pqmrf4vigneebgbcmmoy5r7xvoypicjqqge32ewnrcyx2a’,
       private_key     => ‘MIIEogIBAAKCAQEAtUnxbmrekwgVac6FdWeRzoXvIpA9+0r1.....wtnNpESQQQ0QLGPD8NM//JEBg=’,
       fingerprint     => ‘f2:db:f9:18:a4:aa:fc:94:f4:f6:6c:39:96:16:aa:27’);
END;
/

不支持。您需要生成没有口令短语的私有密钥。有关更多信息,请参见 How to Generate an API Signing Key

Amazon Web Services (AWS) 身份证明

如果源文件位于 Amazon S3 中,或者您正在调用 AWS API,则 username 是您的 AWS 访问密钥 ID,password 是您的 AWS 密钥访问密钥。请参见 AWS Identity and Access Management

Microsoft Azure 身份证明

如果源文件位于 Azure Blob Storage 中,或者您正在调用 Azure API,则 username 是您的 Azure 存储账户名称,password 是 Azure 存储账户访问密钥。请参阅关于 Azure 存储账户

与 Amazon S3 兼容身份证明

服务 身份证明信息

Google Cloud Storage

如果源文件位于 Google Cloud Storage 中,或者您正在调用 Google Cloud Storage API,则需要设置默认 Google 项目并获取 HMAC 密钥来创建凭据,以提供与 Google Cloud Storage S3 兼容的 URL。使用 HMAC 密钥 ID 作为用户名,使用 HMAC 密钥作为密码。

有关更多信息,请参见 ProjectsHMAC Keys

DROP_CREDENTIAL 过程

此过程从 Autonomous Database 中删除现有身份证明。

语法

DBMS_CLOUD.DROP_CREDENTIAL (
   credential_name     IN VARCHAR2);

参数

Parameter (参数) 说明

credential_name

要删除的身份证明的名称。

UPDATE_CREDENTIAL 过程

此过程使用指定 credential_name 的新值更新属性。

使用存储的身份证明进行数据加载、查询驻留在云中的外部数据,或者将 DBMS_CLOUD 过程与 credential_name 参数一起使用。

语法

DBMS_CLOUD.UPDATE_CREDENTIAL (
    credential_name   IN VARCHAR2,
    attribute         IN VARCHAR2,
    value             IN VARCHAR2);

参数

Parameter (参数) 说明

credential_name

要更新的身份证明的名称。

attribute

要更新的属性的名称。

对于用户名/口令类型身份证明,有效的 attribute 值为:USERNAMEPASSWORD

有关更多信息,请参见CREATE_CREDENTIAL Procedure

value

指定属性的新值。

使用说明

  • 用户名值敏感。它不能包含双引号或空格。

  • ADMIN 用户可以通过查询 dba_credentials 查看所有凭证。

  • 除非云服务身份证明发生更改,否则只需创建一次身份证明。存储凭证后,您可以为需要 credential_name 参数的 DBMS_CLOUD 过程使用相同的凭证名称。

  • 可以从 ALL_CREDENTIALS 视图中列出身份证明。例如,运行以下命令列出凭证:

    SELECT credential_name, username, comments FROM all_credentials;

示例

BEGIN
  DBMS_CLOUD.UPDATE_CREDENTIAL(
     credential_name => 'OBJ_STORE_CRED',
     attribute => 'PASSWORD',
     value => 'password'); 
END;
/
BEGIN
  DBMS_CLOUD.UPDATE_CREDENTIAL(
     credential_name => 'ARN_CRED',
     attribute => 'aws_role_arn',
     value => 'NEW_AWS_ARN'); 
END;
/