使用 Kerberos 認證 Autonomous Database 使用者

您可以將 Autonomous Database on Dedicated Exadata Infrastructure 設定為使用 Kerberos 網路認證協定來認證資料庫使用者。Kerberos 是強式網路認證協定。它使用私密金鑰加密,透過提供使用者對伺服器認證來啟用強式認證。

  • 對 Kerberos 的 Autonomous Database on Dedicated Exadata Infrastructure 支援提供單一登入和集中式認證 Oracle 使用者的優點。Kerberos 是受信任的第三方認證系統,依賴共用的密碼。它假設協力廠商是安全的,並且提供單一登入功能、集中式密碼儲存、資料庫連結驗證,以及增強的 PC 安全性。此動作會透過 Kerberos 認證伺服器來進行。

  • Kerberos 系統圍繞著票證的概念發展。票證是一組可識別使用者或服務的電子資訊。票證會識別您和您的網路存取權限。

  • 在以 Kerberos 為基礎的認證中,您會將票證要求通透地傳送至 Key Distribution Center (KDC)。Key Distribution Center 會驗證您,並授予您存取資料庫的票證。

Kerberos 認證系統的元件

提供 Kerberos 認證系統的簡介。

  • 範圍會建立認證管理網域。每個範圍都有自己的 Kerberos 資料庫,其中包含該特定管理網域的使用者和服務。

  • 票證由 Key Distribution Center (KDC) 發出。用戶端向資料庫伺服器出示票證,以展示其身份的真實性。每個票券都有到期和更新時間。

  • Keytabs 會儲存一或多個主要項目的長期關鍵碼。keytab 檔案是透過呼叫工具 kadmin.local (適用於 MIT Key Distribution Center) 或 ktpass (適用於 Active Directory Key Distribution Center) 來產生。

  • 主參與者是 Key Distribution Center 資料庫中的項目。每個使用者、主機或服務都會指定一個主體。主要項目是金鑰分配中心可指定回報項目的唯一識別。

  • Autonomous Database 中的 Kerberos 支援會將這些值用於構成服務主要項目名稱的各種元件:

服務主要項目的元件 Autonomous Database 的價值
kinstance

您可以從 V$PDBSCLOUD_IDENTITY 資料欄中的屬性 PUBLIC_DOMAIN_NAME 取得此值。這個值與專用端點上資料庫的完整網域名稱 (FQDN) 不同。

使用下列查詢取得 kinstance

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

附註:

這將會是 TNS 連線字串中找到之 host 參數的值。
kservice

Autonomous Database 上,您有兩個 kservice 值選項:

  • 使用資料庫 GUID:如果您未提供 Kerberos 服務名稱與 DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION ,則使用的預設服務名稱是 Autonomous Database 執行處理的 GUID。在此情況下,當您建立 keytab 檔案時,請使用 GUID 作為服務名稱的值。

    由於在預設情況下,Keytab 檔案使用的服務名稱是 GUID,也就是執行處理特定的,因此當您使用預設服務名稱時,您必須為每個 Autonomous Database 執行處理產生不同的 Keytab 檔案。

    使用下列命令取得 GUID (大小寫很重要):

    SELECT GUID FROM v$pdbs;
  • 使用自訂名稱:當您要在多個 Autonomous Database 執行處理上使用相同的 Keytab 檔案時,請設定服務名稱。使用自訂名稱時,您不需要為每個 Autonomous Database 執行處理建立和上傳不同的 Keytab 檔案。使用自訂名稱時,您必須將 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) 保持在就緒狀態。如需有關這些檔案和取得這些檔案之步驟的詳細資訊,請參閱設定 Kerberos 認證

關於 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 工作室
    • Oracle Database Actions
  • 您可以啟用 Kerberos 認證來認證 ADMIN 使用者。您可以使用 Oracle Cloud Infrastructure (OCI) 主控台的「重設密碼」功能來重設 ADMIN 使用者的密碼,如果損毀的 keytab 檔案導致 ADMIN 使用者的認證失敗,請重新取得存取權。
  • Autonomous Database 版本 19.27 或更新版本的 TCP 協定支援 Kerberos 認證。
  • DB_LINKs 和具備 Autonomous Data Guard 的資料庫不支援 Kerberos 認證。

Autonomous Database 上啟用 Kerberos 認證

請依照下列步驟,針對專用 Exadata 基礎架構上的 Autonomous Database 啟用 Kerberos 認證:
  • 由於一個 Autonomous Database 在任何指定時間只能啟用一個外部認證配置,因此請執行 DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION 程序來停用任何已為資料庫啟用的外部認證配置。

    若要執行此程序,您必須以 ADMIN 使用者身分登入,或具備 DBMS_CLOUD_ADMINEXECUTE 權限。
    BEGIN
        DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION;
    END;
    /
  • 取得 Kerberos 組態檔:krb.conf,服務金鑰表格檔 v5srvtab。如需這些檔案和取得這些檔案之必要步驟的詳細資訊,請參閱Oracle Database 19c Security Guide 中的 Configuring Kerberos AuthenticationOracle Database 23ai Security Guide

  • 將 Kerberos 組態檔 krb.confv5srvtab 複製到您物件存放區中的儲存桶。

    附註:

    Oracle 建議您將 Kerberos 組態檔儲存在您物件存放區的專用儲存桶中。

    如果您使用 Oracle Cloud Infrastructure Object Store,請參閱將資料放入物件儲存,瞭解上傳檔案的詳細資訊。

  • 若要啟用 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 是儲存桶名稱。如需詳細資訊,請參閱瞭解 Object Storage 命名空間

    您在此步驟中使用的 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 and Create Bucket

如需詳細資訊,請參閱ENABLE_EXTERNAL_AUTHENTICATION 程序

Autonomous Database 上停用 Kerberos 認證

在您的資料庫上啟用任何其他外部認證配置之前,您必須先停用執行 DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION 程序的 Kerberos 認證。

若要執行此程序,您必須以 ADMIN 使用者身分登入,或具備 DBMS_CLOUD_ADMINEXECUTE 權限。
BEGIN
    DBMS_CLOUD_ADMIN.DISABLE_EXTERNAL_AUTHENTICATION;
END;
/
如需詳細資訊,請參閱DISABLE_EXTERNAL_AUTHENTICATION 程序

附註:

若要為 Microsoft Active Directory 使用者提供 CMU-AD Kerberos 認證,您必須繼續設定 CMU-AD 認證而不停用 Kerberos 認證。