Ubuntu 上 SQL Server 的安全性保障
一 身份与访问控制
- 使用强口令并保护 SA:完成安装后通过 sudo /opt/mssql/bin/mssql-conf setup 设置高强度的 SA 密码,仅在必要时临时启用,日常以最小权限的专用账户运维。
- 禁用或限制内置管理员组:在 SSMS 中检查 BUILTIN\Administrators 登录属性,必要时将其状态设为“拒绝连接/禁用登录”。
- 强制密码策略:对 SA 及其他登录名启用“强制实施密码策略”“强制密码过期”,降低弱口令风险。
- 最小权限与角色分离:按业务最小权限分配数据库角色(如 db_datareader/db_datawriter),避免滥用 db_owner;删除或禁用不必要的登录与数据库用户。
- 禁用或移除 guest 账户:在非系统库(除 master/tempdb 外)中禁用/删除 guest,减少横向移动面。
二 网络与传输加密
- 仅开放必要端口与来源:默认监听 TCP 1433,使用 UFW 仅允许受控来源的 1433/tcp 入站,例如:sudo ufw allow from 192.168.1.0/24 to any port 1433 proto tcp;避免对全网开放。
- 启用传输层加密(TLS):为服务器配置用于服务器身份验证的证书(CN 与主机名或 FQDN 一致),证书与私钥权限设为 600 且属主为 mssql:mssql;在 SQL Server 中配置证书与密钥路径并启用加密:
- 示例:
- sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pem
- sudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key
- sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2
- sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1
- sudo systemctl restart mssql-server
- 客户端信任链:生产环境使用 CA 签发证书;自签证书仅用于测试,客户端需导入 CA 证书或服务器证书到受信根。
- 禁用不安全协议与端口:仅启用 TLS 1.2(必要时 1.1/1.0),避免使用明文或旧协议。
三 数据静态加密与数据脱敏
- 透明数据加密(TDE):对关键数据库启用 TDE,加密数据文件与日志文件,防止存储介质泄露导致的数据外泄。
- 列级加密与 Always Encrypted:对高敏字段使用对称密钥/证书进行加密,或使用 Always Encrypted 将加密密钥保留在客户端,服务器端无法解密,适合身份证号、手机号等场景。
- 动态数据掩码(DDM):对查询视图或应用层暴露的敏感列(如手机号、邮箱)配置掩码规则,降低非授权查看风险。
四 审计与监控
- 登录审计:在服务器属性“安全性”中启用“成功与失败登录”审计,持续记录认证事件,便于入侵溯源。
- 精细化审计与性能监控:使用 SQL Server Audit 跟踪关键 DDL/DML 操作;结合 Extended Events 捕获慢查询、异常登录与权限变更等安全相关事件;通过 DMV(如 sys.dm_exec_requests)进行实时会话与查询监控。
- 定期巡检:周期性核查登录账户、权限分配、失败登录趋势与加密状态,形成基线并异常告警。
五 系统加固与运维
- 及时打补丁:保持 Ubuntu 与 SQL Server 的安全更新与累积更新(CU)为最新,修复已知漏洞。
- 备份与恢复演练:制定包含全备/差异/日志备份的策略,定期在隔离环境验证可恢复性与 RPO/RTO;对加密数据库,确保 TDE 证书与私钥的备份与离线保存。
- 主机与网络安全:仅开放必要端口(如 1433/tcp),禁用不必要的服务与端口转发;如需远程管理,优先采用 SSH 密钥登录并禁用密码认证,减少暴力破解面。
- 安全配置基线:遵循最小权限、职责分离、网络分段与零信任原则,对变更进行变更管理与审计留痕。