将身份和访问管理 (Identity and Access Management,IAM) 验证与 Autonomous Database 结合使用

您可以将 Autonomous Database 配置为使用 Oracle Cloud Infrastructure Identity and Access Management (IAM) 验证和授权,以允许 IAM 用户使用 IAM 身份证明访问 Autonomous Database

注意:

Autonomous DatabaseOracle Cloud Infrastructure (OCI) IAM 的集成在具有身份域的商业租户以及不包括身份域的传统 Oracle Cloud Infrastructure IAM 中受支持。Oracle Cloud Infrastructure IAM 在 2021 年 11 月 8 日之后推出了新的 OCI 租户。Autonomous Database 支持默认和非默认身份域中的用户和组。

关于使用 Autonomous Database 进行身份和访问管理 (Identity and Access Management,IAM) 验证

Oracle Cloud InfrastructureAutonomous Database 的 IAM 集成支持数据库密码验证和基于令牌的验证。有关在 Autonomous Database 上使用 IAM 用户的体系结构的完整详细信息,请参见 Authenticating and Authorizing IAM Users for Oracle Autonomous Databases

IAM 数据库口令验证

注意:

支持的任何 12c 及更高版本的数据库客户端都可用于访问 Autonomous Database 的 IAM 数据库密码。

Oracle Cloud Infrastructure IAM 数据库密码允许 IAM 用户以 Oracle Database 用户通常使用用户名和密码登录到 Autonomous Database 实例。用户输入其 IAM 用户名和 IAM 数据库密码。IAM 数据库密码与 Oracle Cloud Infrastructure 控制台密码不同。使用具有密码验证器的 IAM 用户,您可以使用任何受支持的数据库客户端登录到 Autonomous Database

身份和访问管理 (Identity and Access Management,IAM) 基于 SSO 令牌的身份验证

数据库客户机可以通过多种方式获取 IAM 数据库标记:

  • 客户端应用程序或工具可以从 IAM 为用户请求数据库令牌,并且可以通过客户端 API 传递数据库令牌。使用 API 发送令牌会覆盖数据库客户端中的其他设置。以下客户机支持此类型的 IAM 数据库标记使用:

    • 所有平台上的 JDBC 精简
    • Linux 上的 Oracle Instant Client OCI-C
    • Oracle Data Provider for .NET (ODP.NET) Core
  • 如果应用程序或工具不支持通过客户端 API 请求 IAM 数据库标记,则 IAM 用户可以首先使用 Oracle Cloud Infrastructure 命令行界面 (command line interface,CLI) 检索 IAM 数据库标记并将其保存在文件位置。例如,要使用此连接方法使用 SQL*Plus 及其他应用程序和工具,首先使用 Oracle Cloud Infrastructure (OCI) 命令行界面 (Command Line Interface,CLI) 获取数据库令牌。如果为数据库客户机配置了 IAM 数据库标记,则当用户使用斜杠登录表单登录时,数据库驱动程序将使用已保存在默认或指定文件位置的 IAM 数据库标记。

  • 客户端应用程序或工具可以使用 Oracle Cloud Infrastructure IAM 实例主体或资源主体获取 IAM 数据库标记,并使用 IAM 数据库标记向 Autonomous Database 实例验证自身。

  • IAM 用户和 OCI 应用可以通过多种方法(包括使用 API 密钥)从 IAM 请求数据库令牌。有关示例,请参见 Configuring a Client Connection for SQL*Plus That Uses an IAM Token 。有关其他方法(例如在 OCI 云 shell 中使用委派令牌)的说明,请参见关于对 Oracle Autonomous Database 的 IAM 用户进行身份验证和授权

如果用户输入用户名/密码进行登录,则无论客户机的数据库令牌设置如何,数据库驱动程序都会使用密码验证器方法访问数据库。

Autonomous Database 上进行身份和访问管理 (Identity and Access Management,IAM) 验证的先决条件

Autonomous Database 上使用身份和访问管理 (Identity and Access Management,IAM) 验证之前,必须确保以下信息:

使用网络服务向 VCN(虚拟云网络)和 Autonomous Database 资源所在的子网添加服务网关、路由规则和出站安全规则。

  1. 按照 Oracle Cloud Infrastructure 文档中的任务 1:创建服务网关中的说明,在 VCN(虚拟云网络)中创建 Autonomous Database 资源所在的服务网关。
  2. 创建服务网关后,向 Autonomous Database 资源所在的每个子网(VCN 中)添加路由规则和出站安全规则,以便这些资源可以使用网关使用身份和访问管理 (Identity and Access Management,IAM) 验证:
    1. 转到子网的子网详细信息页。
    2. 子网信息选项卡中,单击子网的路由表的名称以显示其路由表详细信息页。
    3. 在现有路由规则表中,检查是否已存在具有以下特征的规则:
      • 目标:Oracle 服务网络中的所有 IAD 服务
      • 目标类型:服务网关
      • 目标:刚在 VCN 中创建的服务网关的名称

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

    4. 返回到子网的子网详细信息页。
    5. 在子网的安全列表表中,单击子网的安全列表的名称以显示其安全列表详细信息页。
    6. 在侧边菜单的资源下,单击出站规则
    7. 在现有出站规则表中,检查是否已存在具有以下特征的规则:
      • 无状态:
      • 目标:Oracle 服务网络中的所有 IAD 服务
      • IP 协议: TCP
      • Source Port Range(源端口范围):全部
      • 目的地端口范围: 443
    8. 如果不存在此类规则,请单击添加出站规则并添加具有这些特征的出站规则。

环境中的 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 中创建服务请求

Autonomous Database 上更改外部身份提供者

介绍将外部身份提供者从 (IAM) 验证和授权更改为其他外部验证提供者(反之亦然)的步骤。

默认情况下,为新预配的 Autonomous Database 和自治容器数据库启用 Oracle Cloud Infrastructure (IAM) 用户身份验证和授权。还可以为 Autonomous Database 启用其他外部验证方案,例如,具有 Active Directory (CMU-AD) 的集中托管用户、Azure AD 和 Kerberos。但是,在任何给定时间只能启用一个外部验证方案。

要允许数据库用户使用其他外部验证方案连接到 Autonomous Database ,请执行以下操作:
  1. 使用 DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION 过程禁用 IAM 集成:
    例如:
    BEGIN    
      DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION;
    END;
    /
    有关更多信息,请参阅DISABLE_EXTERNAL_AUTHENTICATION 过程
  2. 按照以下页面中概述的步骤配置您选择的另一个外部验证方案:
  3. 重新启用 IAM 用户,以使用 Oracle Cloud Infrastructure (IAM) 验证和授权连接到 Autonomous Database
    作为 ADMIN 用户,使用如下所示的参数运行 DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION 过程:
    BEGIN
      DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
        type => 'OCI_IAM'
        force => TRUE
        );
    END;
    /

    上面的示例将禁用当前启用的任何外部验证提供程序,并启用 Oracle Cloud Infrastructure (IAM) 验证和授权。

    在本例中:
    • force 设置为 TRUE 可禁用当前启用的外部验证。
    • type 设置为 'OCI_IAM' 以启用和使用 Oracle Cloud Infrastructure (IAM) 验证和授权。

    注意:

    缺省情况下,force 参数为 FALSE。如果启用了其他外部验证方法并且 forceFALSE,DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION 将报告以下错误:ORA-20004: Another external authentication is already enabled.

    有关进一步参考,请参见ENABLE_EXTERNAL_AUTHENTICATION Procedure

  4. 验证 IDENTITY_PROVIDER_TYPE 系统参数的值,如下所示:
    SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
    NAME                   VALUE   
    ---------------------- ------- 
    identity_provider_type OCI_IAM 

为 IAM 用户创建身份和访问管理 (Identity and Access Management,IAM) 组和策略

介绍为 IAM 组编写策略语句以允许 IAM 用户访问 Oracle Cloud Infrastructure 资源(特别是 Autonomous Database 实例)的步骤。

策略是一组语句,用于指定谁可以访问特定资源以及如何访问特定资源。可以授予对整个租户、区间中的数据库或单个数据库的访问权限。这意味着,您可以编写一条策略语句,为特定组提供对特定区间中特定类型资源的特定类型的访问权限。

注意:

要使用 IAM 令牌访问 Autonomous Database ,需要定义策略。使用 IAM 数据库密码访问 Autonomous Database 时,不需要策略。

要使 Autonomous Database 允许 IAM 用户使用 IAM 令牌连接到数据库,请执行以下操作:

  1. 通过创建组并将用户添加到组来执行 Oracle Cloud Infrastructure Identity and Access Management 先决条件。

    例如,创建组 sales_dbusers

    有关更多信息,请参见 Managing Groups

  2. 编写策略语句以允许访问 Oracle Cloud Infrastructure 资源。
    1. Oracle Cloud Infrastructure 控制台中,单击身份和安全
    2. 身份和安全下,单击策略
    3. 要创建写入策略,请单击创建策略
    4. 在“创建策略”页上,输入名称和说明。
    5. 在“创建策略”页上,选择显示手动编辑器
    6. 使用策略构建器创建策略。

      例如,创建允许 IAM 组 DBUsers 中的用户访问其租户中的任何 Autonomous Database 的策略:

      Allow group DBUsers to use autonomous-database-family in tenancy
      例如,创建一个策略,将 DBUsers 组成员限制为仅访问 testing_compartment 区间中的 Autonomous Database
      allow group DBUsers to use autonomous-database-family in compartment testing_compartment 
      例如,创建一个策略来限制组对区间中单个数据库的访问:
      allow group DBUsers to use autonomous-database-family in compartment testing_compartment where target.database.id = 'ocid1.autonomousdatabase.oc1.iad.aaaabbbbcccc'

      有关访问数据库的 IAM 策略的详情,请参阅数据库安全指南中的创建 IAM 策略以授权用户使用令牌进行验证

    7. 单击创建

      有关策略的更多信息,请参见管理策略

有关在 Autonomous Database 上创建用于 IAM 用户的策略的说明:

  • 策略可以允许 IAM 用户访问整个租户(区间)中的 Autonomous Database 实例,也可以限制对单个 Autonomous Database 实例的访问。

  • 您可以使用实例主体或资源主体检索数据库令牌,以建立从应用程序到 Autonomous Database 实例的连接。如果使用的是实例主体或资源主体,则必须映射动态组。因此,您无法独占映射实例和资源主体;只能通过共享映射对其进行映射,并将实例或资源实例放入 IAM 动态组中。

    您可以在创建的策略中创建动态组并引用动态组以访问 Oracle Cloud Infrastructure 。有关详细信息,请参阅规划访问控制和创建支持资源管理动态组

Autonomous Database 上添加 IAM 用户

要添加允许访问 Autonomous Database 的 IAM 用户,请使用 CREATE USERALTER USER 语句(使用 IDENTIFIED GLOBALLY AS 子句)将数据库全局用户映射到 IAM 组或用户。

IAM 用户对 Autonomous Database 实例的授权是通过将 IAM 全局用户(方案)映射到 IAM 用户(专用映射)或 IAM 组(共享方案映射)来实现的。

要对 Autonomous Database 实例上的 IAM 用户进行授权,请执行以下操作:

  1. ADMIN 用户身份登录启用使用 IAM 的数据库( ADMIN 用户具有这些步骤所需的 CREATE USERALTER USER 系统权限)。
  2. 使用 CREATE USERALTER USER 语句在 Autonomous Database 用户(方案)之间创建映射,并包括 IDENTIFIED GLOBALLY AS 子句,以指定 IAM 组名称。

    使用以下语法将全局用户映射到 IAM 组:

    CREATE USER global_user IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=IAM_GROUP_NAME';

    例如,要将名为 db_sales_group 的 IAM 组映射到名为 sales_group 的共享数据库全局用户:

    CREATE USER sales_group IDENTIFIED GLOBALLY AS
         'IAM_GROUP_NAME=db_sales_group';
    

    这将创建共享全局用户映射。该映射具有全局用户 sales_group,对 IAM 组中的所有用户都有效。因此,db_sales_group 中的任何人都可以使用其 IAM 凭证(通过 sales_group 全局用户的共享映射)登录到数据库。

    以下示例说明如何针对非默认域完成此操作:

    CREATE USER shared_sales_schema IDENTIFIED GLOBALLY AS
         'IAM_GROUP_NAME=sales_domain/db_sales_group';
  3. 如果要为其他 IAM 组或用户创建其他全局用户映射,请为每个 IAM 组或用户执行以下步骤。

注意:

IDENTIFIED GLOBALLY 的数据库用户可以像以前一样继续登录,即使启用了 Autonomous Database 进行 IAM 验证也是如此。

要以独占方式将本地 IAM 用户映射到 Oracle Database Global User

  1. ADMIN 用户身份登录启用使用 IAM 的数据库( ADMIN 用户具有这些步骤所需的 CREATE USERALTER USER 系统权限)。

  2. 使用 CREATE USERALTER USER 语句创建 Autonomous Database 用户(方案)之间的映射,并包括 IDENTIFIED GLOBALLY AS 子句,以指定 IAM 本地 IAM 用户名。

    例如,要创建一个名为 peter_fitch 的新数据库全局用户,并将此用户映射到名为 peterfitch 的现有本地 IAM 用户:

    CREATE USER peter_fitch IDENTIFIED GLOBALLY AS 'IAM_PRINCIPAL_NAME=peterfitch'

    以下示例说明如何通过指定非默认域 sales_domain 来创建用户:

    CREATE USER peter_fitch2 IDENTIFIED GLOBALLY AS
    'IAM_PRINCIPAL_NAME=sales_domain/peterfitch';

Autonomous Database 上添加 IAM 角色

(可选)创建全局角色,以便在多个 IAM 用户映射到同一共享全局用户时向 IAM 用户提供其他数据库角色和权限。

Autonomous Database 上使用独占 IAM 映射到用户(模式)或共享用户映射时,全局角色的使用是可选的。例如,可以向共享方案授予所有权限和角色,向映射到共享方案的所有 IAM 用户授予分配给共享方案的权限和角色。

可以使用全局角色(可选)区分使用相同共享方案的用户。例如,一组用户可以具有相同的共享方案,共享方案可以具有 CREATE SESSION 权限。然后,可以使用全局角色提供分配给不同用户组的差异化权限和角色,这些用户组都使用相同的共享方案。

通过将 Autonomous Database 全局角色映射到 IAM 组,可以在 Autonomous Database 中向 IAM 用户授予其他角色。

要将 Autonomous Database 全局角色映射到 IAM 组,请执行以下操作:

  1. ADMIN 用户身份登录启用使用 IAM 的数据库( ADMIN 用户具有这些步骤所需的 CREATE USERALTER USER 系统权限)。
  2. 使用 CREATE ROLEALTER ROLE 语句为 Autonomous Database 角色设置数据库授权,并包括 IDENTIFIED GLOBALLY AS 子句,以指定 IAM 组名称。

    使用以下语法将全局角色映射到 IAM 组:

    CREATE ROLE global_role IDENTIFIED GLOBALLY AS
        'IAM_GROUP_NAME=IAM_GROUP_of_WHICH_the_IAM_USER_IS_a_MEMBER';

    例如,要将名为 ExporterGroup 的 IAM 组映射到名为 export_role 的共享数据库全局角色,请执行以下操作:

    CREATE ROLE export_role IDENTIFIED GLOBALLY AS
         'IAM_GROUP_NAME=ExporterGroup';
    

    以下示例说明如何通过指定非默认域 sales_domain 来创建角色:

    CREATE ROLE export_role IDENTIFIED GLOBALLY AS
         'IAM_GROUP_NAME=sales_domain/ExporterGroup';
    

    sales_domain 域中 ExporterGroup 的所有成员在登录到数据库时将获得数据库全局角色 export_role 的授权。

  3. 使用 GRANT 语句向全局角色授予所需的权限或其他角色。
    GRANT CREATE SESSION TO export_role;
    GRANT DWROLE TO export_role;
  4. 如果要将现有数据库角色与 IAM 组关联,请使用 ALTER ROLE 语句更改现有数据库角色,以将角色映射到 IAM 组。使用以下语法更改现有数据库角色以将其映射到 IAM 组:
    ALTER ROLE existing_database_role 
       IDENTIFIED GLOBALLY AS 'IAM_GROUP_NAME=IAM_Group_Name';

如果要为其他 IAM 组添加其他全局角色映射,请为每个 IAM 组执行以下步骤。

为 IAM 用户创建 IAM 数据库密码

要添加 IAM 用户并允许 IAM 用户通过提供用户名和密码登录到 Autonomous Database ,必须创建 IAM 数据库密码。

有关详细信息,请参阅使用 IAM 数据库密码

通过身份和访问管理 (Identity and Access Management,IAM) 验证连接到 Autonomous Database

数据库 ADMIN 用户将全局用户和全局角色映射到 IAM 用户和 IAM 组后,用户使用 Oracle Cloud Infrastructure IAM 凭证登录到 Autonomous Database 实例,或者通过 Oracle Cloud Infrastructure IAM 数据库令牌访问数据库。

您仍可以使用本地数据库账户用户名和密码(非全局数据库用户账户)登录到 Autonomous Database

您可以使用数据库客户端以 Oracle Cloud Infrastructure IAM 用户身份访问 Autonomous Database 实例。要将客户端与 Oracle Cloud Infrastructure IAM 用户名和密码身份证明以及密码验证器一起使用,数据库客户端必须为 12c 或更高版本。

此外,您还可以使用 Oracle Cloud Infrastructure IAM 数据库令牌访问支持客户端的 Autonomous Database 实例:

注意:

如果您的 Autonomous Database 实例处于受限制模式,则只有具有 RESTRICTED SESSION 权限(如 ADMIN)的用户才能连接到数据库。

关于使用 IAM 连接到 Autonomous Database on Dedicated Exadata Infrastructure 实例

IAM 用户可以使用 IAM 数据库密码验证器或 IAM 令牌连接到 Autonomous Database on Dedicated Exadata Infrastructure 实例。

使用 IAM 数据库密码验证程序与 Oracle Database 密码验证过程类似。但是,验证器不是存储在 Autonomous Database on Dedicated Exadata Infrastructure 中的密码验证器(密码的加密散列),而是作为 Oracle Cloud Infrastructure (OCI) IAM 用户配置文件的一部分存储。

第二种连接方法,即为数据库使用 IAM 令牌,更为现代。基于令牌的访问更适合云资源,例如 Autonomous Database on Dedicated Exadata Infrastructure 。该令牌基于 IAM 端点可以强制执行的强度。这可以是多因素身份验证,它比单独使用密码更强大。使用令牌的另一个好处是密码验证器(被认为是敏感的)永远不会存储在内存中或可用。

使用 IAM 数据库密码验证器的客户机连接

在配置了 IAM 用户所需的授权之后,此用户可以使用现有客户端应用程序(如 SQL*Plus 或 SQLcl)登录,而无需进行其他配置。

IAM 用户使用任何当前支持的数据库客户端输入 IAM 用户名和 IAM 数据库密码(而不是 Oracle Cloud Infrastructure (OCI) 控制台密码)。唯一的约束条件是数据库客户端版本为 Oracle Database 发行版 12.1.0.2 或更高版本以使用 Oracle Database 12c 密码。数据库客户机必须能够使用 12C 密码验证器。IAM 不支持使用 11G 验证器加密。IAM 用户无需进行特殊的客户端或工具配置即可连接到 Autonomous Database on Dedicated Exadata Infrastructure 实例。

使用令牌的客户端连接

对于对 Autonomous Database on Dedicated Exadata Infrastructure 的 IAM 令牌访问,客户端应用程序或工具将从 IAM 为 IAM 用户请求数据库令牌。

客户端应用程序将通过数据库客户端 API 直接将数据库令牌传递给数据库客户端。

如果应用程序或工具尚未更新以请求 IAM 标记,则 IAM 用户可以使用 Oracle Cloud Infrastructure (OCI) 命令行界面 (command line interface,CLI) 请求和存储数据库标记。可以使用以下身份证明请求数据库访问令牌 (db-token):

  • 安全令牌(使用 IAM 验证)、委派令牌(在 OCI 云 shell 中)和 API-keys,它们是表示 IAM 用户以启用验证的身份证明
  • 实例主用户令牌,使实例能够在验证后被授权的操作者(或主体)对服务资源执行操作
  • 资源主用户令牌,它是一种身份证明,允许应用程序向其他 Oracle Cloud Infrastructure 服务验证自身

当 IAM 用户以斜杠 / 登录身份登录到客户机并配置了 OCI_IAM 参数(sqlnet.oratnsnames.ora 或作为连接字符串的一部分)时,数据库客户机将从文件中检索数据库标记。如果 IAM 用户提交用户名和密码,则连接将使用对使用 IAM 数据库密码验证器的客户机连接描述的 IAM 数据库验证器访问。本指南中的说明介绍了如何使用 OCI CLI 作为数据库令牌助手。如果应用程序或工具已更新为使用 IAM,请按照应用程序或工具的说明进行操作。一些常见用例包括:内部部署 SQL*Plus、内部部署 SQLcl、Cloud Shell 中的 SQL*Plus 或使用 SEP wallet 的应用。

以下主题说明如何:
  • 将 SQL*Plus 的客户端连接配置为使用 IAM 数据库密码。

  • 为使用 IAM 令牌的 SQL*Plus 配置客户端连接。

  • 使用实例主体通过 Oracle Cloud Infrastructure IAM 数据库令牌访问数据库。

为使用 IAM 数据库密码的 SQL*Plus 配置客户端连接

可以将 SQL*Plus 配置为使用 IAM 数据库密码。

  • 以 IAM 用户身份,使用以下语法登录到 Autonomous Database 实例:
    CONNECT user_name@db_connect_string
    Enter password: password

    在此规范中,user_name 是 IAM 用户名。组合的 domain_name/user_name 有 128 个字节的限制。

    以下示例说明 IAM 用户 peter_fitch 如何登录到 Autonomous Database 实例。

    sqlplus /nolog
    connect peter_fitch@db_connect_string
    Enter password: password

    某些特殊字符需要在 user_namepassword 周围使用双引号。例如:

    "peter_fitch@example.com"@db_connect_string
    
    "IAM database password"

为使用 IAM 标记的 SQL*Plus 配置客户机连接

可以为使用 IAM 令牌的 SQL*Plus 配置客户端连接。

  1. 确保您具有 IAM 用户帐户。
  2. 请咨询 IAM 管理员和 Oracle Database 管理员,以确保您具有允许您访问区间或租户中的数据库的策略,并且您已映射到数据库中的全局方案。
  3. 如果您的应用或工具不支持直接 IAM 集成,请下载、安装和配置 OCI CLI。(请参见 OCI 命令行界面快速入门。)在 OCI CLI 配置中设置 API 密钥并选择默认值。
    1. 为 IAM 用户设置 API 密钥访问权限。
    2. 检索 db-token。例如:
      • 使用 Oracle Cloud Infrastructure (OCI) 命令行界面检索具有 API-keydb-token
        oci iam db-token get
      • 检索具有安全(或会话)标记的 db-token
        oci iam db-token get --auth security_token

        如果安全令牌已过期,将显示一个窗口,以便用户可以再次登录 OCI。这将为用户生成安全令牌。OCI CLI 将使用此刷新标记来获取 db-token

      • 检索带有委托令牌的 db-token:当您登录到云 shell 时,将自动生成委托令牌并将其放置在 /etc 目录中。要获取此令牌,请在 Cloud shell 中执行以下命令:
        oci iam db-token get
      • 使用 OCI 命令行界面检索实例令牌:
        oci iam db-token get --auth instance_principal
    3. 还可以将数据库客户端配置为使用 IAM 用户名和 IAM 数据库密码检索数据库令牌。
    有关更多信息,请参见 Required Keys and OCIDs
  4. 确保使用 Oracle Database 客户端发行版 19c 和 21c 的最新发行版更新。
    此配置仅适用于 Oracle Database 客户端发行版 19c 或 21c。
  5. 按照现有过程从 Autonomous Database 下载 wallet,然后按照配置该 wallet 以与 SQL*Plus 一起使用的说明进行操作。
    1. 通过在 sqlnet.ora 中查找 SSL_SERVER_DN_MATCH=ON 来确认 DN 匹配已启用。
    2. 通过将 TOKEN_AUTH=OCI_TOKEN 添加到 sqlnet.ora 文件,将数据库客户机配置为使用 IAM 标记。由于您将使用数据库令牌文件的默认位置,因此不需要包括令牌位置。
    tnsnames.ora 连接字符串中的 TOKEN_AUTHTOKEN_LOCATION 值优先于该连接的 sqlnet.ora 设置。例如,对于连接字符串,假定令牌位于默认位置(对于 Linux,为 ~/.oci/db-token):
    (description= 
      (retry_count=20)(retry_delay=3)
      (address=(protocol=tcps)(port=1522)
      (host=example.us-phoenix-1.oraclecloud.com))
      (connect_data=(service_name=aaabbbccc_exampledb_high.example.oraclecloud.com))
      (security=(ssl_server_cert_dn="CN=example.uscom-east-1.oraclecloud.com, 
         OU=Oracle BMCS US, O=Example Corporation, 
         L=Redwood City, ST=California, C=US")
      (TOKEN_AUTH=OCI_TOKEN)))
    
使用 TOKEN_AUTH 参数更新连接字符串后,IAM 用户可以通过运行以下命令来启动 SQL*Plus,登录到 Autonomous Database 实例。可以包括连接描述符本身,也可以使用 tnsnames.ora 文件中的描述符名称。
connect /@exampledb_high

或:

connect /@(description= 
  (retry_count=20)(retry_delay=3)
  (address=(protocol=tcps)(port=1522)
  (host=example.us-phoenix-1.oraclecloud.com))
  (connect_data=(service_name=aaabbbccc_exampledb_high.example.oraclecloud.com))
  (security=(ssl_server_cert_dn="CN=example.uscom-east-1.oraclecloud.com, 
     OU=Oracle BMCS US, O=Example Corporation, 
     L=Redwood City, ST=California, C=US")
  (TOKEN_AUTH=OCI_TOKEN)))

数据库客户机已配置为获取 db-token,因为 TOKEN_AUTH 已通过 sqlnet.ora 文件或连接字符串进行设置。数据库客户端获取 db-token 并使用私有密钥对其进行签名,然后将令牌发送到 Autonomous Database 。如果指定了 IAM 用户名和 IAM 数据库密码而不是斜杠 /,则数据库客户端将使用密码而不是 db-token 进行连接。

使用实例主用户通过身份和访问管理 (Identity and Access Management,IAM) 验证访问 Autonomous Database

ADMIN 用户在 Autonomous Database 上启用 Oracle Cloud Infrastructure IAM 后,应用可以使用实例主体通过 Oracle Cloud Infrastructure IAM 数据库令牌访问数据库。

配置代理验证

代理验证允许 IAM 用户代理数据库方案以执行应用程序维护等任务。

代理验证通常用于对真实用户进行身份验证,然后授权他们使用具有方案权限和角色的数据库方案来管理应用程序。共享应用程序方案密码等替代方案被视为不安全,无法审计哪个实际用户执行了操作。

用例可以位于以下环境中:作为应用程序数据库管理员的指定 IAM 用户可以使用其身份证明进行验证,然后代理给数据库方案用户(例如 hrapp)。此验证允许 IAM 管理员以 hrapp 用户身份使用 hrapp 特权和角色来执行应用程序维护,但仍使用其 IAM 凭证进行验证。应用程序数据库管理员可以登录到数据库,然后代理到应用程序方案以管理此方案。

可以为口令验证和令牌验证方法配置代理验证。

为 IAM 用户配置代理验证

要为 IAM 用户配置代理验证,IAM 用户必须已经具有到全局方案的映射(专用或共享映射)。IAM 用户要代理的单独数据库方案也必须可用。

确保具有此类用户后,请更改数据库用户以允许 IAM 用户代理该用户。
  1. 以具有 ALTER USER 系统权限的用户身份登录到 Autonomous Database 实例。

  2. 授予 IAM 用户代理本地数据库用户 account.An IAM 用户的权限无法在命令中引用,因此必须在数据库全局用户之间创建代理(映射到 IAM 用户)和目标数据库 user.In 以下示例:hrapp 是要代理的数据库方案,peterfitch_schema 是独占映射到用户 peterfitch 的数据库全局用户。
    ALTER USER hrapp GRANT CONNECT THROUGH peterfitch_schema;

在此阶段,IAM 用户可以使用代理登录到数据库实例。例如:

要使用密码验证器进行连接,请执行以下操作:
CONNECT peterfitch[hrapp]@connect_string
Enter password: password
要使用令牌进行连接,请执行以下操作:
CONNECT [hrapp]/@connect_string

验证 IAM 用户代理验证

可以验证密码和令牌验证方法的 IAM 用户代理配置。
  1. 以具有 CREATE USERALTER USER 系统权限的用户身份登录到 Autonomous Database 实例。

  2. 以 IAM 用户身份连接并执行 SHOW USERSELECT SYS_CONTEXT 命令。例如,假设要检查 IAM 用户 peterfitch 在代理数据库用户 hrapp 时的代理验证。您需要使用此处所示的不同类型的验证方法连接到数据库,但对于所有类型,您执行的命令的输出都是相同的。
    • 对于口令验证:
      CONNECT peterfitch[hrapp]/password\!@connect_string
      SHOW USER;
      --The output should be USER is "HRAPP"
      SELECT SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') FROM DUAL;
      --The output should be "PASSWORD_GLOBAL"
      SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM DUAL;
      --The output should be "PETERFITCH_SCHEMA"
      SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL;
      --The output should be "HRAPP"
    • 对于标记验证:
      CONNECT [hrapp]/@connect_string
      SHOW USER;
      --The output should be USER is "HRAPP "
      SELECT SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') FROM DUAL;
      --The output should be "TOKEN_GLOBAL"
      SELECT SYS_CONTEXT('USERENV','PROXY_USER') FROM DUAL;
      --The output should be "PETERFITCH_SCHEMA"
      SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL;
      --The output should be "HRAPP"

将数据库链接与 IAM 验证的用户结合使用

您可以使用数据库链接以 Oracle Cloud Infrastructure IAM 用户身份从一个 Autonomous Database 实例连接到另一个实例。

您可以使用连接的用户或固定用户数据库链接以 Oracle Cloud Infrastructure IAM 用户身份连接到 Autonomous Database

注意:

Oracle Cloud Infrastructure IAM 用户身份连接到 Autonomous Database 时,不支持当前用户数据库链接。
  • 连接的用户数据库链接:对于连接的用户数据库链接,必须将 IAM 用户映射到通过数据库链接连接的源数据库和目标数据库中的方案。可以使用数据库密码验证器或 IAM 数据库令牌来使用连接的用户数据库链接。

  • 固定用户数据库链接:可以使用数据库用户或 IAM 用户创建固定用户数据库链接。将 IAM 用户用作固定用户数据库链接时,IAM 用户必须在目标数据库中具有方案映射。数据库链接的 IAM 用户只能配置密码验证器。

Autonomous Database 上禁用身份和访问管理 (Identity and Access Management,IAM) 验证

介绍为 Autonomous Database 禁用 IAM 外部验证用户访问的步骤。

您可以使用 ALTER SYSTEM 命令在 Autonomous Database 实例上禁用 IAM 用户访问权限,如下所示:
ALTER SYSTEM RESET IDENTITY_PROVIDER_TYPE SCOPE=BOTH;

如果您还希望从资源(即自治容器数据库或 Autonomous Database )更新对 IAM 的访问,则可能需要删除或修改 IAM 组以及您设置的允许从这些资源访问 IAM 的策略。

有关将 Autonomous Database 工具用于身份和访问管理 (Identity and Access Management,IAM) 验证的说明

提供有关在启用了 IAM 验证的情况下使用 Autonomous Database 工具的备注。