搜索

17.4. 使用 microsoft.sql.server Ansible 系统角色安装和配置带有 AD 集成的 SQL Server

download PDF

您可以将 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。

流程

  1. 将您的敏感变量存储在一个加密文件中:

    1. 创建 vault :

      $ ansible-vault create vault.yml
      New Vault password: <vault_password>
      Confirm New Vault password: <vault_password>
    2. ansible-vault create 命令打开编辑器后,以 <key>: <value> 格式输入敏感数据:

      sa_pwd: <sa_password>
      sql_pwd: <SQL_AD_password>
      ad_admin_pwd: <AD_admin_password>
    3. 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
  2. 创建一个包含以下内容的 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_realmad_integration_userad_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 文件。

  3. 验证 playbook 语法:

    $ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml

    请注意,这个命令只验证语法,不会防止错误但有效的配置。

  4. 运行 playbook:

    $ ansible-playbook --ask-vault-pass ~/playbook.yml
  5. 在 AD 域中,为您在 playbook 中指定的 AD SQL 用户启用 128 位和 256 位 Kerberos 身份验证。使用以下选项之一:

    • Active Directory Users and Computers 应用程序中:

      1. 进入到 ad.example.com > Users > sqluser > Accounts
      2. Account options 列表中,选择 This account supports Kerberos AES 128 bit encryptionThis account supports Kerberos AES 256 bit encryption
      3. Apply
    • 在 admin 模式下的 PowerShell 中,输入:

      C:\> Set-ADUser -Identity sqluser -KerberosEncryptionType AES128,AES256
  6. 授权应能够认证到 SQL Server 的 AD 用户。在 SQL Server 上,执行以下步骤:

    1. Administrator 用户获取一个 Kerberos 票据:

      $ kinit Administrator@ad.example.com
    2. 授权 AD 用户:

      $ /opt/mssql-tools/bin/sqlcmd -S. -Q 'CREATE LOGIN [AD\<AD_user>] FROM WINDOWS;'

      对应该能够访问 SQL Server 的每个 AD 用户重复此步骤。

验证

  • 在运行 SQL Server 的受管节点上:

    1. 为 AD 用户获取一个 Kerberos 票据:

      $ kinit <AD_user>@ad.example.com
    2. 使用 sqlcmd 工具登录到 SQL Server ,并运行查询,例如:

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

其他资源

  • /usr/share/ansible/roles/microsoft.sql-server/README.md 文件
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.