订阅内容

去年,microsoft.sql.server Ansible 角色引入到红帽企业 Linux(RHEL)中。随着 RHEL 8.8 和 9.2 的发布,该角色收到了更新,其中包含多项新功能:

本文将介绍与 Active Directory(AD)的集成,并指导您完成整个过程:

  1. 确保您满足为 SQL Server 配置 AD 身份验证的要求
  2. 准备 Ansible 清单文件
  3. 了解必须设置的变量,并使用该角色来准备 Ansible Playbook 文件,以使用 Active Directory 自动配置身份验证
  4. 运行该角色
  5. 完成配置
  6. 检查身份验证是否按预期工作

前提条件

在开始之前,您必须确保满足该角色的前提条件。

  1. 您必须有一个正在运行的 Active Directory 服务器,并可由 RHEL 计算机访问。有关前提条件的概述,请参阅 Microsoft 文档:将 Linux 主机上的 SQL Server 加入 Active Directory 域。如果您在满足前提条件方面遇到问题,请参阅 Active Directory 故障排查
  2. 确保 DNS 查询正常工作。您必须能够从 RHEL 计算机上,通过 Active Directory 服务器的 IP 地址及其 DNS 短名称和完整名称,成功对 Active Directory 服务器进行 ping 操作。
  3. 确保反向 DNS 查询正常工作。对 Active Directory 服务器的 IP 地址执行 nslookup 命令时,必须确保能解析到正确的 DNS 名称,而且 DNS 名称也能反向解析到正确的 IP 地址。
  4. 确保您具有适当的 Active Directory 用户的访问权限和凭据,要有权在域中创建账户和服务主体名称(SPN)。

准备 Ansible 清单

清单中只允许包含您要为 Active Directory 身份验证配置的 RHEL 服务器。本示例使用清单文件 inventory.yml,其包含单个 RHEL 节点 rhel-sql-server.example.com

$ cat inventory.yml
---
all:
hosts:
rhel-sql-server.example.com

使用该角色

接下来,您需要一个 Playbook 来配置 Active Directory 身份验证。最简单易行的做法是先查看示例 Playbook,根据需要调整变量和参数,然后将其用作您自己的 Playbook 的基础。

请注意,该角色需要使用变量来设置一些密码。本文中的示例以明文提供这些变量,但在生产环境中,您必须使用 Ansible vault 对密码加密。

示例 Playbook

以下是保存为 playbook.yml 的 Playbook 示例。它使用 Active Directory 配置身份验证:

---
- name: Configure with AD server authentication
hosts: all
vars:
# General variables
mssql_accept_microsoft_odbc_driver_17_for_sql_server_eula: true
mssql_accept_microsoft_cli_utilities_for_sql_server_eula: true
mssql_accept_microsoft_sql_server_standard_eula: true
mssql_version: 2022
mssql_password: "p@55w0rD"
mssql_edition: Evaluation
mssql_manage_firewall: true
# AD Integration required variables
mssql_ad_configure: true
mssql_ad_sql_user_name: sqluser
mssql_ad_sql_password: "p@55w0rD1"
ad_integration_realm: domain.com
ad_integration_user: Administrator
ad_integration_password: Secret123
# AD Integration optional variables
mssql_ad_sql_user_dn: "CN=sqluser,CN=Users,DC=DOMAIN,DC=COM"
mssql_ad_netbios_name: domain

示例 Playbook 中的变量分为三个部分:常规变量、必需变量和可选变量。

常规变量

接受最终用户许可协议(EULA)的变量必须设置为 true,以确认您同意 mssql-server 软件包的条款。其中包括:

  • mssql_accept_microsoft_odbc_driver_17_for_sql_server_eula
  • mssql_accept_microsoft_cli_utilities_for_sql_server_eula
  • mssql_accept_microsoft_sql_server_standard_eula

其他变量:

  • mssql_version 用于定义您要管理的 SQL Server 的版本(2017、2019 或 2022)。
  • mssql_password 用于设置 sa 用户的密码
  • mssql_edition 用于定义要为 SQL Server 配置的版本
  • mssql_manage_firewall 用于启用防火墙并打开所需的端口。这是一个可选变量。仅当您希望该角色为您管理防火墙时,才使用该变量。

关于 AD 集成的必需变量

以下变量是必需的:

  • mssql_ad_configure:是否配置 Active Directory 身份验证。
  • mssql_ad_sql_user_name:要在 Active Directory 服务器中创建并启用 SQL Server 身份验证的用户的名称。该角色使用 adutil,要求为创建的用户赋予以特权用户身份访问该角色的权限。
  • mssql_ad_sql_password:所创建的用户的密码。
  • ad_integration_realm:Active Directory 域名称。
  • ad_integration_user:Active Directory 中特权用户的用户名。此用户必须已存在于域中。
  • ad_integration_password:用户的密码。

关于 AD 集成的可选变量

以下变量是可选的:

  • mssql_ad_sql_user_dn:如果您的 AD 服务器将用户账户存储在自定义组织单元(OU)中,而不是默认的 Users OU 中,则必须设置此变量。默认情况下,该角色会基于为变量 mssql_ad_sql_user_namead_integration_realm 提供的值来构建专有名称,并使用 Users OU(例如: CN=sqluser,CN=Users,DC=DOMAIN,DC=COM)。您可以通过提供专有名称来覆盖它。
  • mssql_ad_netbios_name:当 AD 服务器的 NetBIOS 域名不等于您通过 ad_integration_realm 变量提供的域名的第一个子域时,您必须设置此变量(例如:您设置了 ad_integration_realmdomain.contoso.com,但您的 NetBIOS 域名不是 domain)。这个值用于在 SQL Server 中创建 {{ mssql_ad_netbios_name }}\{ad_integration_user }} 登录名。

运行 Ansible 角色

在确保满足所有前提条件并且准备好 Ansible 清单和 Playbook 后,就可以运行 playbook 了。

$ ansible-playbook -i inventory.yml playbook.yml

将域用户添加到 SQL Server

在用户可以登录之前,您必须先将用户添加到 SQL Server。为此,请为每个 AD 域用户运行以下 T-SQL 命令:

CREATE LOGIN \[<domain>**<username>*\] FROM WINDOWS;

启用其他加密类型

在执行该角色以配置 Active Directory 身份验证后,您必须将 AES128 和 AES256 Kerberos 加密类型添加到 Active Directory 中使用 mssql_ad_sql_user_name 变量定义的用户。您可以使用 Active Directory Web UI 或 PowerShell 来执行此操作。

Web UI

打开 AD 服务器的 Web UI 并登录。

  1. 导航到 Tools > Active Directory Users and Computers > [domain] > Users > [sqluser] > Account
  2. Account options 列表中,选择 This account supports Kerberos AES 128 bit encryptionThis account supports Kerberos AES 256 bit encryption
  3. 单击 Apply

PowerShell

在 PowerShell 中,使用 Set-ADUser 命令,将 <sqluser> 替换为您设置成 mssql_ad_sql_user_name 变量的用户名:

Set-ADUser -Identity <sqluser> -KerberosEncryptionType AES128,AES256

验证 Active Directory 身份验证

您已执行该角色来配置 AD 服务器身份验证,并且已将所需的加密类型添加到 <sqluser> 用户,现在您可以使用以下方法之一进行身份验证:

  • Windows 或 RHEL:Azure Data Studio(ADS)
  • Windows:SQL Server Management Studio(SSMS)
  • RHEL:Linux 终端

Azure Data Studio(ADS)

如果您尚未安装 ADS,请按照 Microsoft 的文档下载并安装 Azure Data Studio

安装后,启动 ADS。

  1. 单击 Create a connection
  2. Authentication type 列表中,选择 Windows Authentication
  3. 填写其他字段,然后单击 Connect

您现在可以使用 SQL Server 了。

Azure Data Studio user interface

SQL Server Management Studio(SSMS)

首先,登录 Windows(使用您要用于登录 SQL Server 的用户),然后启动 SSMS。

  1. Connect to Server 窗格中,从 Server type 列表中选择 Database Engine
  2. Server name 字段中,输入运行了该角色的 RHEL 实例的完全限定域名(FQDN)
  3. Authentication 列表中,选择 Windows Authentication,然后填写以下字段:
    • Server typeDatabase Engine
    • Server name:输入您的服务器名称
    • AuthenticationWindows Authentication
  4. 单击 Connect
SQL Server Management Studio user interface

Linux 终端

若要使用 Linux 终端来检查身份验证,请使用该角色创建的用户以 SSH 方式登录服务器。

$ ssh -l <sqluser>@<domain.com> <client.domain.com>

为您要进行身份验证的 Active Directory 用户获取 Kerberos 工单:

$ kinit <AD_user_name>@<DOMAIN.COM>

使用 sqlcmd 登录 SQL Server,然后执行相应操作,例如运行查询来获取当前用户:

/opt/mssql-tools/bin/sqlcmd -S.-Q 'SELECT SYSTEM_USER'

结论

microsoft.sql.server 角色可以帮助您自动与 Active Directory 集成,以进行用户身份验证。该角色使用 redhat.rhel_system_roles.ad_integration 角色连接到 Active Directory,并使用 redhat.rhel_system_roles.firewall 角色配置防火墙,而且以一致的方式执行此操作。红帽提供了更多系统角色来管理 RHEL 上的不同服务和工具。如果您有兴趣实现工作流自动化,请查看可用 RHEL 系统角色的列表,并阅读关于该主题的文档相关的博客文章。有大量资源可供参考!

如果您想了解 microsoft.sql.server 角色还能为您提供哪些帮助,请查看官方文档


关于作者

Sergei Petrosian is a technical writer at Red Hat working on Satellite and Foreman documentation.

Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

按频道浏览

automation icon

自动化

有关技术、团队和环境 IT 自动化的最新信息

AI icon

人工智能

平台更新使客户可以在任何地方运行人工智能工作负载

open hybrid cloud icon

开放混合云

了解我们如何利用混合云构建更灵活的未来

security icon

安全防护

有关我们如何跨环境和技术减少风险的最新信息

edge icon

边缘计算

简化边缘运维的平台更新

Infrastructure icon

基础架构

全球领先企业 Linux 平台的最新动态

application development icon

应用领域

我们针对最严峻的应用挑战的解决方案

Original series icon

原创节目

关于企业技术领域的创客和领导者们有趣的故事