适用于:Linux 上的 SQL Server
本文提供了如何将运行SQL Server的Linux主机连接到Active Directory域的通用指导。 有两种方法:使用内置 SSSD 包或使用第三方 Active Directory 提供程序。 第三方域名连接产品的例子包括PowerBroker身份服务(PBIS)、单一身份保护认证服务(VAS)和Centrify。
本指南涵盖用于检查 Active Directory 配置的步骤。 但本指南不提供在使用第三方实用程序时如何将计算机加入域的相关说明。
Note
有关使用最新版本的 Ubuntu、RHEL 或 SLES 配置 Active Directory 的信息,请参阅教程:使用 adutil 为 Linux 上的 SQL Server 配置 Active Directory 身份验证。
先决条件
在配置 Active Directory 认证之前,你需要在网络上设置一台运行 Windows Server 的计算机作为 Active Directory 域控制器。 然后将运行 SQL Server 的 Linux 主机连接到 Active Directory 域。
本文中所述的示例步骤仅用于指导,请参考 Ubuntu 16.04、Red Hat Enterprise Linux (RHEL) 7.x 和 SUSE Linux Enterprise Server (SLES) 12 操作系统。 实际步骤可能会根据你的环境和操作系统版本略有不同。 例如,Ubuntu 18.04 使用 netplan ,而 RHEL 8.x 使用 nmcli 等工具来管理和配置网络。 你应该让你环境的系统和域管理员进行特定的工具、配置、自定义以及所需的任何故障排除。
Note
从 SQL Server 2025(17.x)开始,不支持 SUSE Linux Enterprise Server (SLES)。
反向 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>
Tip
本教程分别使用 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
编辑
/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"编辑此文件后,重启网络服务:
sudo systemctl restart network现在检查“/etc/resolv.conf”文件是否包含类似以下示例的行
/etc/resolv.conf:sudo vi /etc/resolv.conf输出与以下示例类似:
search contoso.com com nameserver <Domain controller IP address>如果仍无法对域控制器进行 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 的 Linux 主机连接到 Active Directory 域。
这是将 Linux 主机加入 Active Directory 域控制器的首选方法。
有关最新说明,请参阅分发合作伙伴提供的官方文档。
| 分销 | 参考文章 |
|---|---|
| RHEL 8 | 使用 SSSD 发现与加入 AD 域 |
| RHEL 9 | 使用 SSSD 发现与加入 AD 域 |
| SLES | 使用 Windows 域成员身份加入 Active Directory |
| Ubuntu | 如何通过 Active Directory 设置 SSSD |
请按照以下步骤将运行 SQL Server 的 Linux 主机加入 Active Directory 域:
用 realmd 把你的主机连接到你的 Active Directory 域。 您必须首先使用Linux发行版的包管理器在SQL Server Linux主机上安装了realmd和Kerberos客户端包:
安装 Kerberos 客户端包时,如果系统提示输入领域名,请以大写形式输入自己的域名。
确认自己的 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。下表列出了可能会收到的一些错误消息以及解决建议:
错误消息 Recommendation Necessary packages are not installed请先使用 Linux 分发的包管理器安装这些包,然后再次运行领域加入命令。 Insufficient permissions to join the domain请与域管理员核实自己是否拥有足够的权限将 Linux 计算机加入自己的域。 KDC reply did not match expectations你可能没有为用户指定正确的领域名。 领域名区分大小写,通常为大写,并且可以使用命令 realm discover contoso.com进行识别。SQL Server 使用 SSSD 和 NSS 将用户帐户和组映射到安全标识符 (SID)。 若要成功创建 Active Directory 登录名,必须为 SQL Server 配置 SSSD 并运行它。 realmd 通常会在加入域时自动执行此操作,但在某些情况下,你必须单独执行此操作。
有关详细信息,请参阅如何手动配置 SSSD 和配置 NSS 以使用 SSSD。
请确认自己现在是否可以从域中收集有关用户的信息,及是否可以该用户的身份获取 Kerberos 工单。 下面的示例使用 id、kinit 和 klist 命令执行此操作。
使用
id确认 SSSD 能够解析出域用户及其组成员资格:id user@contoso.com输出应显示域用户的用户ID、组ID和组成员身份:
uid=1348601103(user@contoso.com) gid=1348600513(domain group@contoso.com) groups=1348600513(domain group@contoso.com)请使用
kinit为域用户请求 Kerberos 票证:kinit user@CONTOSO.COM该命令应提示域用户密码:
Password for user@CONTOSO.COM:使用
klist验证 Kerberos 票据: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,请确保用大写字母指定领域。
欲了解更多信息,请参阅红帽关于 使用 SSSD 发现并加入 AD 域的文档。
选项2:使用第三方Active Directory提供商工具
可以使用 PBIS、VAS 或 Centrify 等第三方实用程序。 本文不提供每个实用程序的相关步骤。 你必须先使用这些工具之一,将运行SQL Server的Linux主机连接到该域,然后才能继续。
SQL Server 不使用第三方集成商的代码或库来查询任何 Active Directory 相关查询。 SQL Server 始终在此设置中直接使用 OpenLDAP 库调用查询 Active Directory。 第三方集成器仅用于将 Linux 主机连接到 Active Directory 域,SQL Server 与这些工具没有直接通信。
验证是否已正确配置 /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错误,就在你的DNS服务器上添加一个运行SQL Server的Linux主机的反向DNS条目。
后续步骤
在这篇文章中,你配置了一个运行SQL Server并支持Active Directory认证的Linux主机。 要配置 Linux 上的 SQL Server 以使其支持 Active Directory 帐户,请按照以下说明进行操作。