使用 Kerberos 验证 Autonomous Database 用户

可以将 Autonomous Database on Dedicated Exadata Infrastructure 配置为使用 Kerberos 网络验证协议来验证数据库用户。Kerberos 是一种强大的网络验证协议。它使用密钥加密,通过提供用户到服务器的验证来启用强验证。

  • Autonomous Database on Dedicated Exadata Infrastructure 对 Kerberos 的支持为 Oracle 用户提供单点登录和集中身份验证的优势。Kerberos 是受信任的依赖于共享密钥的第三方验证系统。它假设第三方是安全的,并提供单点登录功能,集中式密码存储,数据库链接验证和增强的 PC 安全性。它通过 Kerberos 验证服务器执行此操作。

  • Kerberos 系统围绕票证的概念运行。票证是标识用户或服务的一组电子信息。票证标识您和您的网络访问权限。

  • 在基于 Kerberos 的验证中,您可以透明地将票证请求发送到密钥分发中心 (Key Distribution Center,KDC)。密钥分发中心对您进行验证并授予您访问数据库的票证。

Kerberos 验证系统的组件

提供 Kerberos 验证系统的概述。

  • 领域建立验证管理域。每个领域都有自己的 Kerberos 数据库,其中包含该特定管理域的用户和服务。

  • 票证由密钥分发中心 (Key Distribution Center,KDC) 发布。客户机提供指向数据库服务器的票证,以演示其身份的真实性。每个票证都有到期和续订时间。

  • Keytabs 存储一个或多个主体的长期密钥。通过调用工具 kadmin.local(对于 MIT 密钥分发中心)或 ktpass(对于 Active Directory 密钥分发中心)生成密钥表文件。

  • 主体是密钥分发中心数据库中的条目。每个用户、主机或服务都有一个主体。主体是密钥分发中心可以向其分配门票的唯一标识。

  • Autonomous Database 中的 Kerberos 支持对构成服务主体名称的各种组件使用以下值:

服务主体组件 Autonomous Database 的价值
kinstance

可以从 V$PDBSCLOUD_IDENTITY 列中的属性 PUBLIC_DOMAIN_NAME 获取此值。此值不同于专用端点上数据库的完全限定域名 (Fully Qualified Domain Name,FQDN)。

使用以下查询获取 kinstance

SELECT json_value(cloud_identity, '$.PUBLIC_DOMAIN_NAME') "KINSTANCE" FROM v$pdbs;

注意:

这将是 TNS 连接字符串中找到的 host 参数的值。
kservice

Autonomous Database 上,您有两种 kservice 值选项:

  • 使用数据库 GUID:如果未使用 DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION 提供 Kerberos 服务名称,则使用的默认服务名称是 Autonomous Database 实例的 GUID。在这种情况下,在创建密钥表文件时,请使用 GUID 作为服务名称的值。

    因为在默认情况下,Keytab 文件使用的是特定于实例的 GUID 服务名称,所以在使用默认服务名称时,必须为每个 Autonomous Database 实例生成不同的 Keytab 文件。

    使用以下命令获取 GUID(大小写很重要):

    SELECT GUID FROM v$pdbs;
  • 使用定制名称:当要在多个 Autonomous Database 实例上使用相同的密钥表文件时设置服务名称。使用定制名称时,无需为每个 Autonomous Database 实例创建和上载不同的密钥表文件。使用定制名称时,必须将 params kerberos_service_name 参数与 DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION 一起指定。将 GUID 用于服务名称时,不需要指定此参数。

Autonomous Database 实例上启用 Kerberos 后,使用以下查询查看 Kerberos 服务名称:

SELECT SYS_CONTEXT('USERENV', 'KERBEROS_SERVICE_NAME') FROM DUAL;
REALM KDC 支持的任何领域。REALM 必须始终为大写。

要为 Autonomous Database 启用 Kerberos 验证,必须使 Kerberos 配置文件 (krb.conf) 和服务密钥表文件 (v5srvtab) 保持就绪。有关这些文件和获取这些文件的步骤的更多信息,请参见 Configuring Kerberos Authentication

有关 Autonomous Database 上的 Kerberos 验证的说明

Autonomous Database on Dedicated Exadata Infrastructure 上继续进行 Kerberos 验证之前,请查看以下说明:

  • 如果为 Autonomous Database 启用 Kerberos 验证,您仍然可以为数据库使用基于密码的数据库验证。
  • 随时只能对 Autonomous Database 使用一种外部验证方法。也就是说,您随时只能启用 Oracle Cloud Infrastructure (IAM)、Centrally Managed User with Active Directory (CMU-AD)、Azure AD 或 Kerberos 验证方案。

    注意:

    唯一的例外是,可以在 CMU-AD 上配置 Kerberos 验证,以便为 Microsoft Active Directory 用户提供 CMU-AD Kerberos 验证。
  • 以下工具不支持 Kerberos 验证:
    • Oracle Database API for MongoDB
    • Oracle REST Data Services
    • Oracle Machine Learning
    • APEX
    • Oracle Graph Studio
    • Oracle 数据库操作
  • 可以启用 Kerberos 验证来验证 ADMIN 用户。您可以使用 Oracle Cloud Infrastructure (OCI) 控制台上的“重置密码”功能来重置 ADMIN 用户的密码,并在密钥表文件损坏导致 ADMIN 用户验证失败时重新获得访问权限。
  • 对于 Autonomous Database 版本 19.27 或更高版本,TCP 协议支持 Kerberos 验证。
  • DB_LINKs 和具有 Autonomous Data Guard 的数据库不支持 Kerberos 验证。

Autonomous Database 上启用 Kerberos 验证

按照以下列出的步骤为专用 Exadata 基础结构上的 Autonomous Database 启用 Kerberos 验证:
  • 由于在任何给定时间只能为 an Autonomous Database 启用一个外部验证方案,因此请运行 DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION 过程以禁用已为数据库启用的任何外部验证方案。

    要运行该过程,您必须以 ADMIN 用户身份登录,或者对 DBMS_CLOUD_ADMIN 具有 EXECUTE 特权。
    BEGIN
        DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION;
    END;
    /
  • 获取 Kerberos 配置文件:krb.conf 和服务密钥表文件 v5srvtab。有关这些文件和获取这些文件所需的步骤的详细信息,请参见Oracle Database 19c Security GuideOracle Database 23ai Security Guide 中的 Configuring Kerberos Authentication

  • 将 Kerberos 配置文件 krb.confv5srvtab 复制到对象存储中的存储桶。

    注意:

    Oracle 建议将 Kerberos 配置文件存储在对象存储的专用存储桶中。

    如果您使用的是 Oracle Cloud Infrastructure 对象存储,请参阅将数据放入对象存储以了解有关上载文件的详细信息。

  • 要启用 Kerberos 作为 Autonomous Database外部验证,请运行 DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION 过程并使用 params JSON 参数传入位置 URI。必须将配置文件 krb.confv5srvtab 放在 location_uri 参数中指定的对象存储位置。

    例如:
    BEGIN
        DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
            type     => 'KERBEROS',
            params   => JSON_OBJECT('location_uri' value 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o',
                                   'credential_name' value 'my_credential_name')
        );
    END;
    /

    注意:

    要为 Microsoft Active Directory 用户提供 CMU-AD Kerberos 验证,可以通过在上面的示例中将 type 设置为 CMU 来在 CMU-AD 上启用 Kerberos 验证。

    在此示例中,namespace-stringOracle Cloud Infrastructure 对象存储名称空间,bucketname 是存储桶名称。有关更多信息,请参见 Understanding Object Storage Namespaces

    在此步骤中使用的 credential_name 是对象存储的身份证明。

    如果 location_uri 是预先验证的 URL,则不需要提供 credential_name

    这将在数据库中创建一个名为 KERBEROS_DIR 的目录对象,并使用身份证明将 Kerberos 配置文件从对象存储位置下载到目录对象。

    可以使用 kerberos_service_name 参数指定 Kerberos 服务名称。例如:
    BEGIN
    DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
       type     =>'KERBEROS',
       params   => JSON_OBJECT(
       'location_uri'          value 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o',
       'credential_name'       value 'my_credential_name'
       'kerberos_service_name' value 'oracle' ));
    END;
    /
  • 启用 Kerberos 验证后,从对象存储中删除配置 krb.confv5srvtab。可以使用本地对象存储方法删除这些文件,也可以使用 DBMS_CLOUD.DELETE_OBJECT 从对象存储中删除这些文件。

有关对象存储的详细信息,请参阅导航到 Oracle Cloud Infrastructure Object Storage 和创建存储桶

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

Autonomous Database 上禁用 Kerberos 验证

在数据库上启用任何其他外部验证方案之前,必须禁用运行 DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION 过程的 Kerberos 验证。

要运行此过程,您必须以 ADMIN 用户身份登录,或者对 DBMS_CLOUD_ADMIN 具有 EXECUTE 特权。
BEGIN
    DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION;
END;
/
有关更多信息,请参见DISABLE_EXTERNAL_AUTHENTICATION Procedure

注意:

要为 Microsoft Active Directory 用户提供 CMU-AD Kerberos 验证,必须继续配置 CMU-AD 验证而不禁用 Kerberos 验证。