使用 Wallet (mTLS) 创建从自治 AI 数据库到公共可访问的 Oracle Database 的数据库链接

您可以创建从自治 AI 数据库到公共端点上的目标 Oracle 数据库的数据库链接。

要将数据库链接与自治 AI 数据库结合使用,必须将目标数据库配置为将 TCP/IP 与 SSL (TCPS) 验证结合使用。自治 AI 数据库默认使用 TCP/IP 和 SSL (TCPS) 验证,因此您无需在目标数据库中执行任何其他配置即可链接到另一个自治 AI 数据库。必须将其他 Oracle 数据库配置为将 TCP/IP 与 SSL (TCPS) 验证结合使用。有关更多信息,请参见 Configuring Secure Sockets Layer Authentication in Oracle Database 19c Security GuideOracle Database 26ai Security Guide

要创建指向公共目标的数据库链接,必须可以访问目标 Oracle Database。某些数据库可能会限制访问(例如,使用访问控制列表)。确保启用目标数据库以允许从源数据库访问数据库链接。如果通过访问控制列表 (Access Control Lists,ACL) 限制访问,则可以找到源自治 AI 数据库的出站 IP 地址并允许该 IP 地址连接到目标数据库。

有关详细信息,请参阅如何创建从自治 AI 数据库到 Database Cloud Service 实例的数据库链接

要使用 wallet (mTLS) 创建指向目标 Oracle 数据库的数据库链接,请执行以下操作:

  1. 将目标数据库 wallet cwallet.sso(包含目标数据库的证书)复制到对象存储。

    请注意 wallet 文件的以下内容:

    • 通过 wallet 文件以及数据库用户 ID 和密码,可以访问目标 Oracle Database 中的数据。将 Wallet 文件存储在安全位置。仅与授权用户共享 wallet 文件。

    • 请勿重命名 wallet 文件。对象存储中的 wallet 文件必须命名为 cwallet.sso

  2. 创建身份证明以访问存储 wallet 文件 cwallet.sso 的对象存储。有关不同对象存储服务的用户名和口令参数的信息,请参见 CREATE_CREDENTIAL Procedure

  3. 在自治 AI 数据库上为 wallet 文件 cwallet.sso 创建目录。

    例如:

     CREATE DIRECTORY *dblink_wallet_dir* AS '*directory_path_of_your_choice*';
    

    有关创建目录的信息,请参见 Create Directory in Autonomous AI Database

  4. 使用 DBMS_CLOUD.GET_OBJECT 将目标数据库 wallet 上载到在上一步中创建的目录 DBLINK_WALLET_DIR

    例如:

     BEGIN
         DBMS_CLOUD.GET_OBJECT(
             credential_name => 'DEF_CRED_NAME',
             object_uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/*namespace-string*/b/*bucketname*/o/cwallet.sso',
             directory_name => '*DBLINK_WALLET_DIR*');
     END;
     /
    

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

    注:在此步骤中使用的 credential_name 是对象存储的身份证明。在下一步中,创建用于访问目标数据库的身份证明。

  5. 在自治 AI 数据库实例上,创建身份证明以访问目标数据库。使用 DBMS_CLOUD.CREATE_CREDENTIAL 指定的 usernamepassword 是用于创建数据库链接的目标数据库的身份证明。

    注:需要提供 credential_name 参数。

    例如:

     BEGIN
         DBMS_CLOUD.CREATE_CREDENTIAL(
             credential_name => 'DB_LINK_CRED',
             username => 'NICK',
             password => '*password*');
     END;
     /
    

    username 参数中的字符必须全部为大写字母。

    此操作以加密格式将身份证明存储在数据库中。可以将任何名称用于身份证明名称。

  6. 使用 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 创建指向目标数据库的数据库链接。

    例如:

     BEGIN
         DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
             db_link_name => 'SALESLINK',
             hostname => 'adb.eu-frankfurt-1.oraclecloud.com',
             port => '1522',
             service_name => '*example*_medium.atpc.example.oraclecloud.com',
             ssl_server_cert_dn => 'CN=atpc.example.oraclecloud.com,OU=Oracle BMCS FRANKFURT,O=Oracle Corporation,L=Redwood City,ST=California,C=US',
             credential_name => 'DB_LINK_CRED',
             directory_name => '*DBLINK_WALLET_DIR*');
     END;
     /
    

    ADMIN 以外的用户需要运行 DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK 的权限。

    如果使用 directory_name 指定的目录中的 wallet 文件不是 cwallet.sso,则该过程将报告错误,例如:ORA-28759: failure to open file

  7. 使用创建的数据库链接访问目标数据库中的数据。

    例如:

     SELECT * FROM employees@SALESLINK;
    

对于您在步骤 5 中创建的身份证明,即目标数据库身份证明,如果目标用户的口令发生更改,则可以更新包含目标用户身份证明的身份证明,如下所示:

BEGIN
    DBMS_CLOUD.UPDATE_CREDENTIAL (
        credential_name => 'DB_LINK_CRED',
        attribute => 'PASSWORD',
        value => '*password*' );
END;
/

其中 password 是新密码。

执行此操作后,使用此身份证明的现有数据库链接将继续工作,而无需删除和重新创建数据库链接。

有关其它信息,请参阅:

数据库链接附注与目标 Oracle Database

提供有关创建指向目标 Oracle 数据库的数据库链接的备注(当目标不是自治 AI 数据库时)

有关指向其他 Oracle 数据库的数据库链接的说明:

相关内容

DBMS_CLOUD_ADMIN 程序包