33.4. 使用 microsoft.sql.server Ansible 系统角色安装和配置带有 AD 集成的 SQL Server
您可以将 Microsoft SQL Server 集成到活动目录(AD)中,以使 AD 用户能够认证到 SQL Server。通过使用 microsoft.sql.server
Ansible 系统角色,您可以自动化此过程,并相应地远程安装和配置 SQL Server。请注意,在运行 playbook 后,您仍必须在 AD 和 SQL Server 中执行手动步骤。
根据受管主机上的 RHEL 版本,您可以安装的 SQL Server 版本会有所不同:
- RHEL 7.9: SQL Server 2017 和 2019
- RHEL 8: SQL Server 2017, 2019, 和 2022
- RHEL 9.4 及更新版本:SQL Server 2022
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。 -
您已在控制节点上安装了
ansible-collection-microsoft-sql
软件包或microsoft.sql
集合。 - 受管节点安装了 2 GB 或更多 RAM。
- 受管节点使用以下版本之一: RHEL 7.9、RHEL 8、RHEL 9.4 或更高版本。
- 网络中有一个 AD 域。
- AD 中存在一个反向 DNS (RDNS)区域,其包含每个 AD 域控制器(DC)的指针(PTR)资源记录。
- 受管主机的网络设置使用 AD DNS 服务器。
受管主机可以解析以下 DNS 条目:
- AD DC 的主机名和完全限定域名(FQDN)都解析到它们的 IP 地址。
- AD DC 的 IP 地址解析到它们的 FQDN。
流程
将您的敏感变量存储在一个加密文件中:
创建 vault :
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
在
ansible-vault create
命令打开编辑器后,以<key>: <value>
格式输入敏感数据:sa_pwd: <sa_password> sql_pwd: <SQL_AD_password> ad_admin_pwd: <AD_admin_password>
- 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Installing and configuring Microsoft SQL Server hosts: managed-node-01.example.com vars_files: - vault.yml tasks: - name: SQL Server with AD authentication ansible.builtin.include_role: name: microsoft.sql.server vars: 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: "{{ sa_pwd }}" mssql_edition: Developer mssql_tcp_port: 1433 mssql_manage_firewall: true mssql_ad_configure: true mssql_ad_join: true mssql_ad_sql_user: sqluser mssql_ad_sql_password: "{{ sql_pwd }}" ad_integration_realm: ad.example.com ad_integration_user: Administrator ad_integration_password: "{{ ad_admin_pwd }}"
示例 playbook 中指定的设置包括以下内容:
mssql_ad_configure: true
- 启用 AD 的身份验证。
mssql_ad_join: true
-
使用
ad_integration
RHEL 系统角色将受管节点加入到 AD。角色使用ad_integration_realm
、ad_integration_user
和ad_integration_password
变量中的设置来加入域。 mssql_ad_sql_user: <username>
- 设置角色出于管理目的,应该在 AD 和 SQL Server 中创建的 AD 帐户的名称。
ad_integration_user: <AD_user>
-
设置具有特权的 AD 用户的名称,来将机器加入到域中,并创建
mssql_ad_sql_user
中指定的 AD 用户。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/microsoft.sql-server/README.md
文件。验证 playbook 语法:
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook --ask-vault-pass ~/playbook.yml
在 AD 域中,为您在 playbook 中指定的 AD SQL 用户启用 128 位和 256 位 Kerberos 身份验证。使用以下选项之一:
在 Active Directory Users and Computers 应用程序中:
- 进入到 ad.example.com > Users > sqluser > Accounts。
- 在 Account options 列表中,选择 This account supports Kerberos AES 128 bit encryption 和 This account supports Kerberos AES 256 bit encryption。
- 点Apply。
在 admin 模式下的 PowerShell 中,输入:
C:\> Set-ADUser -Identity
sqluser
-KerberosEncryptionType AES128,AES256
授权应能够认证到 SQL Server 的 AD 用户。在 SQL Server 上,执行以下步骤:
为
Administrator
用户获取一个 Kerberos 票据:$ kinit Administrator@ad.example.com
授权 AD 用户:
$ /opt/mssql-tools/bin/sqlcmd -S. -Q 'CREATE LOGIN [AD\<AD_user>] FROM WINDOWS;'
对应该能够访问 SQL Server 的每个 AD 用户重复此步骤。
验证
在运行 SQL Server 的受管节点上:
为 AD 用户获取一个 Kerberos 票据:
$ kinit <AD_user>@ad.example.com
使用
sqlcmd
工具登录到 SQL Server ,并运行查询,例如:$ /opt/mssql-tools/bin/sqlcmd -S. -Q 'SELECT SYSTEM_USER'
其他资源
-
/usr/share/ansible/roles/microsoft.sql-server/README.md
文件 - Ansible vault