DBAtlas · 数据库运维图谱

SQL Server 安全加固(Linux 与 Windows:检查、网络、TLS、身份验证、权限、审核、TDE)

SQL Server难度: 中级耗时: 5 分钟(检查)– 3 小时(完整加固)

这不是安装指南:它查找并修补正在运行的 SQL Server 2019 / 2022 / 2025 实例(Linux 或 Windows)的安全漏洞。首先由只读的安全检查按严重程度列出漏洞,并指出每项发现对应哪张卡片;然后逐项或按顺序全部修补:监听地址与防火墙、Force Encryption + 证书及客户端验证、禁用 sa 与密码策略(CHECK_POLICY)、角色与无 DDL 权限的应用用户、攻击面(xp_cmdshell、TRUSTWORTHY、guest)、Server Audit、TDE(必须备份证书)、加密备份、服务账户与文件权限、CU 跟踪。TDE 和备份加密在 Standard 与 Enterprise 版中提供(Express 版没有)。最后再次运行检查。

架构: 单个 SQL Server 实例(Linux 或 Windows)+ 应用服务器;Always On AG 见说明

场景

  • 安全检查:有哪些漏洞?(只读) — 首先运行的扫描:sa、密码策略、空密码、sysadmin 成员、public/guest 权限、xp_cmdshell、未加密连接、审核、TDE 与证书备份、端口与防火墙;不做任何更改。
  • 完整加固(按顺序全部执行) — 新安装或从未加固的实例:所有方面按安全的顺序执行;SQL Server 会重启一到两次(需要维护窗口)。
  • 网络与连接:谁能从哪里连接?(监听、防火墙、Browser) — SQL Server 在所有接口上监听,1433 对所有人开放,SQL Browser 在不需要时仍在运行。修改监听地址需要重启。
  • 加密连接(Force Encryption、证书、客户端验证) — 连接未加密或使用自签名的临时证书;客户端使用 TrustServerCertificate=true。更换证书需要重启。
  • 身份验证与密码(sa、CHECK_POLICY、Windows 身份验证) — sa 已启用,SQL 登录名没有密码策略,存在空密码/弱密码;个人 DBA 账户与禁用 sa。无停机(只有切换到 Windows 身份验证需要重启)。
  • 最小权限与攻击面(角色、public、guest、xp_cmdshell) — 应用用户是 db_owner 或 sysadmin,public/guest 有多余权限,xp_cmdshell/TRUSTWORTHY 已启用;角色设计与权限报告。无停机。
  • 审核:谁做了什么?(Server Audit、Database Audit Specification) — 审计人员要求记录登录、权限和架构变更;Server Audit 写入文件(或 Windows 事件日志),转发到集中系统并保留。无停机。所有版本均无需额外许可(2016 SP1+)。
  • 加密静态数据(TDE) — TDE 防止磁盘、数据文件或备份在其他服务器上被打开:DMK、证书、DEK。联机完成;证书备份是必需的(证书丢失后数据库及其备份都无法打开)。许可: SQL Server 2019+ Standard 和 Enterprise 版提供,Express 版没有。
  • 备份安全(加密备份、证书、权限) — 备份未加密,备份目录对所有人开放,脚本中密码为明文;BACKUP … WITH ENCRYPTION、证书备份与目录权限。无停机。备份加密在 Standard 和 Enterprise 版中提供,Express 版没有。
  • 操作系统层面(服务账户、文件权限、SELinux) — 服务以 LocalSystem 或管理员账户运行,数据/备份目录对所有人开放,SELinux 已关闭;更改服务账户需要重启。
  • 补丁与版本:是否在受支持的版本和最新 CU 上? — 版本、CU 级别和支持结束时间(2016 已于 2026 年 7 月结束支持);实际打补丁请参见 CU 补丁指南。只读。

开始之前

  • SQL Server 正在运行;已安装 mssql-tools18,且 … 是 sysadmin。sqlcmd 位于 /opt/mssql-tools18/bin/ 下(不在 PATH 中;指南使用完整路径)。运行脚本之前,不回显地把密码读入变量:read -rsp 'Password: ' SQLCMDPASSWORD; export SQLCMDPASSWORD,然后 sudo --preserve-env=SQLCMDPASSWORD bash <script>.sh。安装:SQL Server Linux 安装。
  • 以管理员身份运行的 PowerShell 会话;登录的 Windows 账户在 SQL Server 中是 sysadmin(sqlcmd -E)。安装:SQL Server Windows 安装。
  • 打开两个独立的会话:一个执行步骤,另一个保持 sysadmin 连接(sqlcmd)不断开。在禁用 sa、设置防火墙、Force Encryption 和更改服务之后,在另一个会话中测试新连接;不要关闭旧会话。最后手段:本地 DAC 连接(sqlcmd -A)在服务器本机上始终可用;如果完全被锁定,可在单用户模式下(…systemctl stop mssql-server; sudo -u mssql /opt/mssql/bin/sqlservr -m…net start … /m…)以本地管理员身份作为 sysadmin 登录。
  • 维护窗口:在所选方面中 SQL Server 将会重启(监听地址、证书/Force Encryption、服务账户、身份验证模式)。…在 AG 中先在 secondary replica 上执行,然后通过 failover 切换 primary,再在原 primary 上执行。…
  • 连接的应用列表(服务器、登录名、驱动程序)。检查步骤会显示当前已连接的应用。
  • 已有最新的完整备份以及 master/msdb 备份(备份指南)。使用 TDE 和备份加密时,没有证书备份就无法恢复数据。

指南阶段

  • 安全检查(只读) — 列出实例内部的发现 · 检查操作系统层面 · 检查操作系统层面
  • 开始之前:回退点 — 备份登录名、设置和配置 · 备份登录名、设置和注册表
  • 身份验证 — 1. 诊断 — 显示登录名、策略和身份验证模式
  • 身份验证 — 3. 实施 — 创建带策略的应用和报表登录名 · 创建带策略的应用和报表登录名 · 修改空密码和与登录名相同的密码 · 修改空密码和与登录名相同的密码 · 准备个人 DBA 访问 · 验证 DBA AD 组是 sysadmin …
  • 身份验证 — 4. 验证 — 验证身份验证状态 · 从应用服务器尝试以 sa 登录 · 从应用服务器尝试以 sa 登录
  • 权限 — 1. 诊断 — 显示服务器和数据库权限
  • 权限 — 3. 实施 — 缩小攻击面(sp_configure) · 关闭 TRUSTWORTHY 和 guest 访问 · 设置角色、架构和用户 · 将应用用户移出 db_owner · 权限报告
  • 权限 — 4. 验证 — 验证应用用户无法执行 DDL
  • TLS — 1. 诊断 — 显示连接的加密状态
  • TLS — 3. 实施 — 创建测试 CA 和服务器证书 · 创建密钥和证书签名请求(CSR) · 验证证书和密钥 · 配置证书和 Force Encryption(mssql-conf) · 重启 SQL Server · 创建或导入证书 …
  • TLS — 4. 验证 — 验证所有 TCP 连接都已加密
  • TLS — 5. 后续:证书续期 — 证书续期流程
  • 网络 — 1. 诊断:谁从哪里连接? — 显示监听地址和客户端来源
  • 网络 — 3. 实施 — 收窄监听地址(mssql-conf) · 收窄监听地址(TCP/IP IPn) · 在防火墙中只对允许的网络开放端口 · 在防火墙中只对允许的网络开放端口 · 关闭 SQL Browser(默认实例) · 为监听地址重启 SQL Server …
  • 网络 — 4. 验证 — 从应用服务器测试连接(新会话) · 从应用服务器测试连接(新会话)
  • Audit — 1. 诊断 — 显示现有的 audit 和登录审核
  • Audit — 2. 安全网 — 准备 audit 目录 · 准备 audit 目录
  • Audit — 3. 实施 — 定义 Server Audit 和服务器级事件 · 记录应用架构中的数据访问 · 导出 audit 记录的脚本 · 导出所需的密码文件、cron 和 rsyslog
  • Audit — 4. 验证 — 做一次更改并在 audit 记录中查看
  • 备份 — 1. 诊断 — 显示备份的加密状态和证书 · 备份目录权限 · 备份目录权限
  • 备份 — 3. 实施 — 创建备份证书并立即备份 · 创建备份证书并立即备份 · 进行加密备份并验证 · 修正备份目录权限 · 修正备份目录权限
  • 操作系统 — 1. 诊断 — 服务账户、权限和 SELinux · 服务账户和目录权限
  • 操作系统 — 3. 实施 — 锁定 mssql 账户并修正目录权限 · 保持 SELinux 为 Enforcing 并限制 SQL Server · 将服务账户改为虚拟账户或 gMSA · 修正数据目录权限
  • TDE — 1. 诊断 — 显示加密状态和证书
  • TDE — 2. 安全网 — TDE 之前的完整备份
  • TDE — 3. 实施 — 创建 DMK 和 TDE 证书,并立即备份 · 创建 DMK 和 TDE 证书,并立即备份 · AG:将 TDE 证书加载到其他 replica · 创建数据库加密密钥并启用 TDE · 跟踪直到加密完成
  • TDE — 4. 验证 — 验证加密的数据库和证书备份
  • 补丁与版本 — 1. 诊断 — 显示版本和 CU 级别 · 操作系统层面待安装的更新
  • 补丁与版本 — 5. 后续 — 记录补丁计划
  • 最终检查:漏洞是否已修补? — 再次运行安全检查 · 再次检查操作系统层面 · 再次检查操作系统层面
按您的环境打开分步计划 →