将 Linux 主机上的 SQL Server 加入 Active Directory 域

适用于: SQL Server - Linux

本文提供了有关如何将 SQL Server Linux 主机加入 Active Directory 域的常规指导。 有两种方法:使用内置 SSSD 包或使用第三方 Active Directory 提供程序。 第三方域加入产品的示例包括 PowerBroker 标识服务 (PBIS)One IdentityCentrify

本指南涵盖用于检查 Active Directory 配置的步骤。 但本指南不提供在使用第三方实用程序时如何将计算机加入域的相关说明。

注意

有关使用最新版本的 Ubuntu、RHEL 或 SLES 配置 Active Directory 的信息,请参阅教程:使用 adutil 为 Linux 上的 SQL Server 配置 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 等工具来管理和配置网络。 你应该让你环境的系统和域管理员进行特定的工具、配置、自定义以及所需的任何故障排除。

反向 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.com 和 CONTOSO.COM 作为示例域和领域名contoso.comCONTOSO.COM。 它还使用 DC1.CONTOSO.COM 作为域控制器的完全限定的域名示例DC1.CONTOSO.COM。 需要使用自己的值替换这些名称。

为了确保正确的域名解析,如果在名称检查过程中发现任何差异,则必须更新 /etc/resolv.conf 文件。 不同分发版的更新程序各不相同;因此,建议参阅官方文档获取准确的指导。 以下列表提供了一些分发版及其密钥版本的链接:

分发 参考文章
RHEL 8 手动配置 /etc/resolv.conf
RHEL 9 手动配置 /etc/resolv.conf
SLES 15 NETCONFIG_DNS_STATIC_SEARCHLIST 和 NETCONFIG_DNS_STATIC_SERVERS 设置
Ubuntu “名称解析”部分

目标在于为分发正确配置 /etc/resolv.conf,以方便域名解析。 例如,如果域名为 contoso.com,Active Directory IP 地址为 10.0.0.4,则应相应地设置 /etc/resolv.conf 地址,以确保从主机成功解析域名。

cat /etc/resolv.conf

结果集如下。

# Generated by NetworkManager
search contoso.com com
nameserver 10.0.0.4

RHEL 7.x

  1. 编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件,以使 Active Directory 域出现在域搜索列表中。 或根据需要编辑其他的接口配置文件:

    sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
    

    内容应类似于以下示例:

    PEERDNS=no
    DNS1=<Domain controller IP address>
    DOMAIN="contoso.com com"
    
  2. 编辑此文件后,重启网络服务:

    sudo systemctl restart network
    
  3. 现在检查“/etc/resolv.conf”文件是否包含类似以下示例的行/etc/resolv.conf

    sudo vi /etc/resolv.conf
    

    内容应类似于以下示例:

    search contoso.com com
    nameserver <Domain controller IP address>
    
  4. 如果仍无法对域控制器进行 ping 操作,请查找域控制器的完全限定的域名和 IP 地址。 例如,域名为 DC1.CONTOSO.COM。 在 /etc/hosts 中添加以下条目:

    sudo vi /etc/hosts
    

    内容应类似于以下示例:

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

加入 Active Directory 域

验证完基本配置和与域控制器的连接性后,可以通过两个选项将 SQL Server Linux 主机与 Active Directory 域控制器联接:

选项 1:使用 SSSD 包加入 Active Directory 域

此方法使用 realmd 和 sssd 包将 SQL Server 主机加入到 Active Directory 域。

这是将 Linux 主机加入 Active Directory 域控制器的首选方法。

有关最新说明,请参阅分发合作伙伴提供的官方文档。

分发 参考文章
RHEL 8 使用 SSSD 发现与加入 AD 域
RHEL 9 使用 SSSD 发现与加入 AD 域
SLES 使用 SUSE Linux Enterprise Server 15 上的 realmd 加入 AD
Ubuntu 如何通过 Active Directory 设置 SSSD

下面的步骤用于将 SQL Server 主机加入 Active Directory 域:

  1. 使用 realmd 将主机加入 Active Directory 域。 需要先使用 Linux 分发的包管理器在 SQL Server 主机上安装 realmd 和 Kerberos 客户端包

    RHEL:

    sudo yum install realmd krb5-workstation
    

  1. 安装 Kerberos 客户端包时,如果系统提示输入领域名,请以大写形式输入自己的域名。

  2. 确认自己的 DNS 配置正确后,请通过运行以下命令加入域。 必须使用在 Active Directory 中具有足够权限的 Active Directory 帐户进行身份验证,才能将新计算机加入域。 此命令在 Active Directory 中创建新的计算机帐户,创建 /etc/krb5.keytab 主机密钥表文件,在 /etc/sssd/sssd.conf 中配置域,并更新 /etc/krb5.conf

    由于 realmd 出现问题,请先将计算机主机名设置为 FQDN,而不是设置为计算机名称。 否则,realmd 可能不会为计算机创建某些必需 SPN,而且 DNS 条目也不会自动更新,即使你的域控制器支持动态 DNS 更新也是如此。

    sudo hostname <old hostname>.contoso.com
    

    运行此命令后,/etc/hostname 文件应包含 <old hostname>.contoso.com

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

    应会显示一条消息:Successfully enrolled machine in realm

    下表列出了可能会收到的一些错误消息以及解决建议:

    错误消息 建议
    Necessary packages are not installed 请先使用 Linux 分发的包管理器安装这些包,然后再次运行领域加入命令。
    Insufficient permissions to join the domain 请与域管理员核实自己是否拥有足够的权限将 Linux 计算机加入自己的域。
    KDC reply did not match expectations 你可能没有为用户指定正确的领域名。 领域名区分大小写(通常为大写),可使用命令领域发现 contoso.com 进行标识。

    SQL Server 使用 SSSD 和 NSS 将用户帐户和组映射到安全标识符 (SID)。 若要成功创建 Active Directory 登录名,必须为 SQL Server 配置 SSSD 并运行它。 “realmd”通常会在加入域时自动执行此操作,但在某些情况下,你必须单独执行此操作

    有关详细信息,请参阅如何手动配置 SSSD配置 NSS 以使用 SSSD

  3. 请确认自己现在是否可以从域中收集有关用户的信息,及是否可以该用户的身份获取 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 文档:对 SSSD 进行故障排除

    如果 kinit user\@CONTOSO.COM 返回 KDC reply didn't match expectations while getting initial credentials,请确保用大写字母指定领域。

有关详细信息,请参阅 Red Hat 文档:发现和加入标识域

选项 2:使用第三方 OpenLDAP 提供程序实用工具

可以使用 PBISVASCentrify 等第三方实用程序。 本文不提供每个实用程序的相关步骤。 需先使用其中某个实用程序将 SQL Server 的 Linux 主机加入域,然后才能继续操作。

SQL Server 不使用第三方集成器的代码或任何与 Active Directory 相关的查询的库。 SQL Server 始终在此设置中直接使用 OpenLDAP 库调用查询 Active Directory。 第三方集成器仅用于将 Linux 主机加入 Active Directory 域,SQL Server 不与这些实用程序直接通信。

重要

请查看配合使用 Active Directory 身份验证与 Linux 上的 SQL Server 一文“其他配置选项”部分中关于使用 mssql-conf network.disablesssd 配置选项的建议。

验证是否已正确配置 /etc/krb5.conf。 对于大多数第三方 Active Directory 提供程序,此配置是自动完成的。 但是,请检查“/etc/krb5.conf”的以下值,以防止将来出现任何问题/etc/krb5.conf

sudo vi /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 帐户,请按照以下说明进行操作。