You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Ansible Shell模块编写Playbook执行Linux版SQL Server命令

Ansible通过Shell模块操作Linux环境SQL Server操作指引

前置检查

首先确保两个前提条件满足:

  • 部署SQL Server的Linux被控端已安装mssql-tools组件,可正常调用sqlcmd命令行工具
  • Ansible控制端与被控端SSH连通正常,使用的数据库账号拥有对应库的操作权限

可用Playbook示例

以下是可直接复用的Playbook代码,默认实现查询SQL Server版本,你可以修改对应变量适配自己的业务需求:

---
- name: 执行Linux SQL Server SQL命令
  hosts: mssql_hosts # 替换为你的Inventory中对应主机/主机组名称
  gather_facts: false
  vars:
    # 数据库连接配置,生产环境密码建议用Ansible Vault加密存储
    mssql_login_user: "sa"
    mssql_login_pwd: "YourStrongPassword2024!"
    mssql_db: "master"
    # 要执行的SQL语句,多语句用分号分隔即可
    target_sql: "SELECT name, database_id FROM sys.databases;"

  tasks:
    - name: 调用sqlcmd执行SQL
      ansible.builtin.shell: |
        /opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U {{ mssql_login_user }} -P '{{ mssql_login_pwd }}' -d {{ mssql_db }} -Q "{{ target_sql }}"
      register: sql_result
      # 可添加no_log: true避免密码输出到执行日志

    - name: 输出SQL执行结果
      ansible.builtin.debug:
        var: sql_result.stdout_lines

常见调整说明

  • 若使用系统集成身份认证登录SQL Server,将sqlcmd命令中的-U {{ mssql_login_user }} -P '{{ mssql_login_pwd }}'参数替换为-E即可,无需传入账号密码
  • 若被控端sqlcmd路径不一致,可在被控端执行which sqlcmd获取实际路径后替换命令中的路径
  • 执行数据变更类SQL前,建议先在测试环境验证逻辑正确性,避免误操作
  • 禁止将数据库密码等敏感信息明文写在Playbook中,推荐使用Ansible Vault加密敏感变量

内容的提问来源于stack exchange,提问作者lilouzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:06:03