將 Linux 主機上的 SQL Server 加入 Active Directory 網域

適用於:SQL Server - Linux

本文提供有關如何將 SQL Server Linux 主機電腦加入 Active Directory 網域的一般指引。 您可使用下列兩種方法:使用內建的 SSSD 套件,或使用協力廠商 Active Directory 提供者。 協力廠商網域加入產品的範例包括 PowerBroker Identity Services (PBIS)One IdentityCentrify。 本指南包含檢查 Active Directory 設定的步驟。 不過,它並未提供在使用協力廠商公用程式時如何將電腦加入網域的指示。

必要條件

設定 Active Directory 驗證之前,您必須先在網路上設定 Active Directory 網域控制站 (Windows)。 然後,將 Linux 主機上的 SQL Server 加入 Active Directory 網域。

本文中所述的範例步驟僅為指導用途,並參考 Ubuntu 16.04、Red Hat Enterprise Linux (RHEL) 7.x 和 SUSE Linux Enterprise Server (SLES) 12 作業系統。 根據整體環境的設定方式與作業系統版本而定,您環境中的實際步驟可能稍有不同。 例如,Ubuntu 18.04 使用 netplan,而 Red Hat Enterprise Linux (RHEL) 8.x 使用 nmcli 等其他工具來管理及設定網路。 建議連絡您的系統和網域管理員,以了解您環境的特定工具、設定、自訂並進行任何必要的疑難排解。

注意

如需使用更新版 Ubuntu、RHEL 或 SLES 設定 Active Directory 的資訊,請參閱教學課程:使用 adutil 為 Linux 上的 SQL Server 設定 Active Directory 驗證

反向 DNS (rDNS)

根據預設,當將執行 Windows Server 的電腦設定為網域控制站時,您可能沒有 rDNS 區域。 請確定網域控制站和將執行 SQL Server 的 Linux 電腦其 IP 位址都有所適用 rDNS 區域。

另請確定也有指向網域控制站的 PTR 記錄。

檢查網域控制站的連線

檢查是否可使用網域的簡短和完整名稱,以及使用網域控制站的主機名稱來與網域控制站連絡。 網域控制站其 IP 也應該可解析為網域控制站的 FQDN:

ping contoso
ping contoso.com
ping dc1.contoso.com
nslookup <IP address of dc1.contoso.com>

提示

本教學課程分別使用 contoso.comCONTOSO.COM 作為範例網域和領域名稱。 它也會使用 DC1.CONTOSO.COM 作為網域控制站的完整網域名稱範例。 您必須以自有值來取代這些名稱。

如果這些名稱的任何一項檢查失敗,請更新網域搜尋清單。 下列各節分別提供適用於 Ubuntu、Red Hat Enterprise Linux (RHEL) 和 SUSE Linux Enterprise Server (SLES) 的指示。

Ubuntu 16.04

  1. 編輯 /etc/network/interfaces 檔案,以讓您的 Active Directory 網域位於網域搜尋清單中:

    # The primary network interface
    auto eth0
    iface eth0 inet dhcp
    dns-nameservers <Domain controller IP address>
    dns-search <Active Directory domain name>
    

    注意

    網路介面 eth0 可能會因不同電腦而有所不同。 若要找出您使用的是哪一個,請執行 ifconfig。 然後,複製具有 IP 位址並已傳送和接收位元組的介面。

  2. 編輯此檔案之後,請重新啟動網路服務:

    sudo ifdown eth0 && sudo ifup eth0
    
  3. 接下來,檢查 /etc/resolv.conf 檔案是否包含類似下列範例的程式碼行:

    search contoso.com com
    nameserver <Domain controller IP address>
    

Ubuntu 18.04

  1. 請編輯 [sudo vi /etc/netplan/******.yaml] 檔案,讓 Active Directory 網域位於網域搜尋清單中:

    network:
      ethernets:
        eth0:
                dhcp4: true
    
                dhcp6: true
                nameservers:
                        addresses: [<Domain controller IP address>]
                        search: [<Active Directory domain name>]
      version: 2
    

    注意

    網路介面 eth0 可能會因不同電腦而有所不同。 若要找出您使用的是哪一個,請執行 ifconfig。 然後,複製具有 IP 位址並已傳送和接收位元組的介面。

  2. 編輯此檔案之後,請重新啟動網路服務:

    sudo netplan apply
    
  3. 接下來,檢查 /etc/resolv.conf 檔案是否包含類似下列範例的程式碼行:

    search contoso.com com
    nameserver <Domain controller IP address>
    

RHEL 7.x

  1. 編輯 /etc/sysconfig/network-scripts/ifcfg-eth0 檔案,以讓您的 Active Directory 網域位於網域搜尋清單中。 或者,視需要編輯其他介面設定檔:

    PEERDNS=no
    DNS1=<Domain controller IP address>
    DOMAIN="contoso.com com"
    
  2. 編輯此檔案之後,請重新啟動網路服務:

    sudo systemctl restart network
    
  3. 現在,檢查 /etc/resolv.conf 檔案是否包含類似下列範例的程式碼行:

    search contoso.com com
    nameserver <Domain controller IP address>
    
  4. 如果您仍然無法 Ping 網域控制站,請尋找網域控制站的完整網域名稱和 IP 位址。 範例網域名稱為 DC1.CONTOSO.COM。 將下列項目新增至 /etc/hosts

    <IP address> DC1.CONTOSO.COM CONTOSO.COM CONTOSO
    

SLES 12

  1. 編輯 /etc/sysconfig/network/config 檔案,以讓您的網域控制站 IP 用於 DNS 查詢,並讓您的 Active Directory 網域位於網域搜尋清單中:

    NETCONFIG_DNS_STATIC_SEARCHLIST=""
    NETCONFIG_DNS_STATIC_SERVERS="<Domain controller IP address>"
    
  2. 編輯此檔案之後,請重新啟動網路服務:

    sudo systemctl restart network
    
  3. 接下來,檢查 /etc/resolv.conf 檔案是否包含類似下列範例的程式碼行:

    search contoso.com com
    nameserver <Domain controller IP address>
    

加入 Active Directory 網域

在驗證網域控制站的基本組態和連線能力之後,您可以使用下列兩個選項來聯結 SQL Server Linux 主機電腦與 Active Directory 網域控制站:

選項 1:使用 SSSD 封裝來加入 Active Directory 網域

此方法會使用 realmdsssd 封裝,將 SQL Server 主機加入 Active Directory 網域。

注意

這是將 Linux 主機加入 Active Directory 網域控制站的慣用方法。

使用下列步驟,將 SQL Server 主機加入 Active Directory 網域:

  1. 使用 realmd,將您的主機電腦加入 Active Directory 網域。 您必須先使用 Linux 發行版本的套件管理員,在 SQL Server 主機電腦上安裝 realmd 和 Kerberos 用戶端套件:

    RHEL:

    sudo yum install realmd krb5-workstation
    

    SLES 12:

    這些步驟專屬於 SLES 12。

    sudo zypper addrepo https://download.opensuse.org/repositories/network/SLE_12/network.repo
    sudo zypper refresh
    sudo zypper install realmd krb5-client sssd-ad
    

    Ubuntu 16.04:

    sudo apt-get install realmd krb5-user software-properties-common python-software-properties packagekit
    

    Ubuntu 18.04:

    sudo apt-get install realmd krb5-user software-properties-common python3-software-properties packagekit
    sudo apt-get install adcli libpam-sss libnss-sss sssd sssd-tools
    
  2. 如果 Kerberos 用戶端套件安裝提示您提供領域名稱,請以大寫輸入您的網域名稱。

  3. 在您確認 DNS 設定無誤之後,請執行下列命令來加入網域。 您必須使用具有足夠 Active Directory 權限的 Active Directory 帳戶進行驗證,才能將新的電腦加入網域。 此命令會在 Active Directory 中建立新的電腦帳戶、建立 /etc/krb5.keytab 主機金鑰表檔案、在 /etc/sssd/sssd.conf 中設定網域,以及更新 /etc/krb5.conf

    因為 realmd 發生問題,所以請先將電腦主機名稱設為 FQDN,而非電腦名稱。 否則,即使網域控制站支援動態 DNS 更新,realmd 也可能不會建立電腦所有必要的 SPN,且 DNS 項目也不會自動更新。

    sudo hostname <old hostname>.contoso.com
    

    執行上述命令之後,您的 /etc/hostname 檔案應該包含 <舊主機名稱>.contoso.com。

    sudo realm join contoso.com -U 'user@CONTOSO.COM' -v
    

    您應該會看到 Successfully enrolled machine in realm 此訊息。

    下表列出一些您可能會收到的錯誤訊息,以及解決這些錯誤的建議:

    錯誤訊息 建議
    Necessary packages are not installed 請先使用 Linux 發行版本的套件管理員安裝這些套件,然後再次執行 realm join 命令。
    Insufficient permissions to join the domain 請連絡網域系統管理員,確認您有足夠權限可將 Linux 電腦加入您的網域。
    KDC reply did not match expectations 您可能未針對使用者指定正確的領域名稱。 領域名稱會區分大小寫;通常是大寫,且可以使用 realm discover contoso.com 命令來識別。

    SQL Server 會使用 SSSD 和 NSS,將使用者帳戶和群組對應至安全性識別碼 (SID)。 您必須設定並執行 SSSD,SQL Server 才能成功建立 Active Directory 登入。 realmd 通常會在加入網域的過程中自動執行此動作,但在某些情況下,您必須另外進行此作業。

    如需詳細資訊,請參閱如何手動設定 SSSD設定 NSS 以使用 SSSD

  4. 確認您現在可以透過網域收集使用者的相關資訊,並取得該使用者的 Kerberos 票證。 下列範例會針對上述目的,使用 idkinitklist 命令。

    id user@contoso.com
    
    uid=1348601103(user@contoso.com) gid=1348600513(domain group@contoso.com) groups=1348600513(domain group@contoso.com)
    
    kinit user@CONTOSO.COM
    
    Password for user@CONTOSO.COM:
    
    klist
    Ticket cache: FILE:/tmp/krb5cc_1000
    Default principal: user@CONTOSO.COM
    

    注意

    如果 id user\@contoso.com 傳回 No such user,請執行 sudo systemctl status sssd 命令以確定 SSSD 服務已成功啟動。 如果服務正在執行,但您仍然看到此錯誤,請嘗試啟用 SSSD 的詳細資訊記錄。 如需詳細資訊,請參閱 Red Hat 文件的 Troubleshooting SSSD (針對 SSSD 進行疑難排解)。

    如果 kinit user\@CONTOSO.COM 傳回 KDC reply didn't match expectations while getting initial credentials,請確認您已指定大寫的領域。

如需詳細資訊,請參閱 Red Hat 文件的 Discovering and Joining Identity Domains (探索及加入識別身分網域)。

選項 2:使用協力廠商 OpenLDAP 提供者的公用程式

您可以使用協力廠商公用程式,例如 PBISVASCentrify。 本文未涵蓋每個個別公用程式的步驟。 您必須先使用其中一個公用程式,將 SQL Server 的 Linux 主機加入網域,再繼續進行。

SQL Server 不會使用協力廠商整合器的程式碼或程式庫來進行任何 Active Directory 相關查詢。 SQL Server 一律會直接在此安裝程式中使用 OpenLDAP 程式庫呼叫來查詢 Active Directory。 系統只會使用協力廠商整合器來將 Linux 主機加入 Active Directory 網域,而 SQL Server 與這些公用程式沒有任何直接的通訊。

重要

如需使用 mssql-confnetwork.disablesssd 組態選項的建議,請參閱透過 Linux 上的 SQL Server 使用 Active Directory 驗證一文的<其他組態選項>一節。

確認您已正確設定 /etc/krb5.conf。 大多數協力廠商 Active Directory 提供者都會自動完成此設定。 不過,請檢查 /etc/krb5.conf 的下列值,以防止任何後續問題:

[libdefaults]
default_realm = CONTOSO.COM

[realms]
CONTOSO.COM = {
}

[domain_realm]
contoso.com = CONTOSO.COM
.contoso.com = CONTOSO.COM

檢查反向 DNS 是否已正確設定

下列命令應該會傳回 SQL Server 執行主機的完整網域名稱 (FQDN)。 例如 SqlHost.contoso.com

host <IP address of SQL Server host>

此命令的輸出應該類似 <reversed IP address>.in-addr.arpa domain name pointer SqlHost.contoso.com。 如果此命令未傳回您主機的 FQDN,或 FQDN 不正確,請將 Linux 上的 SQL Server 主機反向 DNS 項目新增至您的 DNS 伺服器。

後續步驟

本文涵蓋如何在使用 Active Directory 驗證的 Linux 主機電腦上設定 SQL Server。 若要完成設定 Linux 上的 SQL Server 以支援 Active Directory 帳戶,請遵循這些指示。