用于访问管理的 DBMS_CLOUD
本节介绍用于访问管理的 DBMS_CLOUD 子程序。
Prerequisites
作为开发人员,您可以将 DBMS_CLOUD 过程与部署在 Oracle Public Cloud、Multicloud 或 Exadata Cloud@Customer 上的自治 AI 数据库结合使用。
根据部署选择,必须满足以下先决条件,才能将 DBMS_CLOUD 过程与 Amazon S3、Azure Blob Storage 和 Google Cloud Storage 服务提供商结合使用。
组管理员必须使用 NAT 网关配置出站连接,如下所述:
-
按照 Oracle Cloud Infrastructure 文档中的创建 NAT 网关中的说明,在自治 AI 数据库资源所在的虚拟云网络 (VCN) 中创建 NAT 网关。
-
创建 NAT 网关后,在自治 AI 数据库资源所在的 VCN 中添加路由规则和出站安全规则到每个子网,以便这些资源可以使用网关从 Azure AD 实例获取公钥:
-
转到子网的 Subnet Details(子网详细信息)页面。
-
在 Subnet Information(子网信息)选项卡中,单击子网的 Route Table(路由表)的名称以显示 Route Table Details(路由表详细信息)页面。
-
在现有路由规则表中,检查是否已存在具有以下特征的规则:
-
目标:0.0.0.0/0
-
目标类型:NAT 网关
-
目标:刚在 VCN 中创建的 NAT 网关的名称
如果不存在此类规则,请单击添加路由规则并添加具有这些特征的路由规则。
-
-
返回到子网的子网详细信息页面。
-
在子网的安全列表表中,单击子网的安全列表的名称以显示其安全列表详细信息页。
-
在侧边菜单的资源下,单击出站规则。
-
在现有出站规则表中,检查是否已存在具有以下特征的规则:
-
目标类型: 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 过程 | 此过程将云服务身份证明存储在自治 AI 数据库中。 |
| DROP_CREDENTIAL 过程 | 此过程将从自治 AI 数据库中删除现有身份证明。 |
| UPDATE_CREDENTIAL 过程 | 此过程更新自治 AI 数据库中的云服务身份证明属性。 |
CREATE_CREDENTIAL 过程
此过程将云服务身份证明存储在自治 AI 数据库中。
使用存储的云服务凭证访问云服务以进行数据加载、查询云中的外部数据,或者在将 DBMS_CLOUD 过程与 credential_name 参数结合使用时访问其他情况。
语法
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 |
username 和 password 参数一起指定您的云服务身份证明。请参阅使用说明,了解要为不同云服务的 username 和 password 指定什么内容。 |
password |
username 和 password 参数一起指定您的云服务身份证明。 |
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 Fingerprint 和 How to Generate an API Signing Key 。 |
使用说明
-
此操作以加密格式将身份证明存储在数据库中。
-
您可以通过查询
user_credentials表来查看方案中的身份证明。 -
ADMIN用户可以通过查询dba_credentials表来查看所有身份证明。 -
除非您的云服务身份证明发生更改,否则只需创建一次身份证明。存储身份证明后,您可以为需要
credential_name参数的DBMS_CLOUD过程使用相同的身份证明名称。 -
此过程已重载。如果您提供基于密钥的验证属性之一
user_ocid、tenancy_ocid、private_key或fingerprint,则该调用假定为基于 Oracle Cloud Infrastructure 签名密钥的身份证明。 -
可以从视图
ALL_CREDENTIALS中列出身份证明。例如,运行以下命令以列出身份证明:SELECT credential_name, username, comments FROM all_credentials;
Oracle Cloud Infrastructure 身份证明(Auth 令牌)
对于 Oracle Cloud Infrastructure,username 是您的 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_ocid、tenancy_ocid、private_key 和 fingerprint 以及 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 存储中,或者您正在调用 Azure API,则 username 是您的 Azure 存储账户名称,password 是 Azure 存储账户访问密钥。请参阅关于 Azure 存储账户。
与 Amazon S3 兼容的身份证明
| 服务 | 凭据信息 |
|---|---|
| Google Cloud 存储 | 如果源文件位于 Google Cloud Storage 中,或者您正在调用 Google Cloud Storage API,则需要设置默认 Google 项目并获取 HMAC 密钥来创建身份证明,以提供与 Google Cloud Storage S3 兼容的 URL。使用 HMAC 密钥 ID 作为用户名,使用 HMAC 密钥作为密码。 |
管理 DBMS_CLOUD 身份证明以向 C3 对象存储进行验证
您可以使用 DBMS_CLOUD.CREATE_CREDENTIAL 过程向自治 AI 数据库提供连接到 C3 对象存储存储桶所需的验证信息。使用 Oracle Cloud Infrastructure 签名密钥相关参数,包括 user_ocid、tenancy_ocid、private_key 和 fingerprint 以及 Oracle Cloud Infrastructure 签名密钥验证。
例如:
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL (
credential_name => 'OBJECT_STORAGE_CREDENTIAL',
user_ocid => 'ocid1.user.oc1..abcdedfxxxxx',
tenancy_ocid => 'ocid1.tenancy.oc1..abcdefxyyyyyy',
private_key => 'MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDku_Rest_of_PrivateKey_no_spaces_no_newlines',
fingerprint => '3d:ba:f9:aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:xa:xb:xc'
);
END;
/
DROP_CREDENTIAL 过程
此过程将从自治 AI 数据库中删除现有身份证明。
语法
DBMS_CLOUD.DROP_CREDENTIAL (
credential_name IN VARCHAR2);
参数
| Parameter (参数) | 说明 |
|---|---|
credential_name |
要删除的身份证明的名称。 |
UPDATE_CREDENTIAL 过程
此过程使用指定 credential_name 的新值更新属性。
使用存储的身份证明进行数据加载,查询云中的外部数据,或者无论您在何处使用带有 credential_name 参数的 DBMS_CLOUD 过程。
语法
DBMS_CLOUD.UPDATE_CREDENTIAL (
credential_name IN VARCHAR2,
attribute IN VARCHAR2,
value IN VARCHAR2);
参数
| Parameter (参数) | 说明 |
|---|---|
credential_name |
要更新的身份证明的名称。 |
attribute |
要更新的属性的名称。 对于用户名/密码类型的身份证明,有效的 有关更多信息,请参见 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;
/