随着 Linux 环境下 SQL Server 部署的普及,CentOS 凭借稳定的性能与 Windows 授权成本的节省,成为众多用户的选择。但数据库安全是核心保障,未加固的 SQL Server 可能面临数据泄露、业务中断等风险。本文将从账户权限、网络访问、系统补丁、数据加密、日志审计五大维度,提供 CentOS 系统下 SQL Server 的安全加固实操方案,帮助构建稳固的数据库防御体系。
一、安全加固的核心目标与整体思路
安全加固需遵循 “层层递进、闭环防护” 的逻辑,核心目标可拆解为四步:
减少攻击面:关闭不必要功能、隐藏敏感入口(如默认端口、默认账户);
提高入侵成本:通过权限控制、加密传输增加攻击难度;
增强数据保护能力:通过数据加密、备份策略防止数据泄露或丢失;
确保可审计性:开启日志与审计,便于追溯异常操作。
二、SQL Server 安全加固实操步骤
(一)安装与初始配置安全:从源头降低风险
CentOS 上安装 SQL Server 需通过 Microsoft 官方仓库,初始配置需重点关注 “密码复杂度” 与 “账户规范”:
官方源安装命令:
# 添加SQL Server官方仓库sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo# 安装SQL Serversudo yum install -y mssql-server# 初始化配置(需设置管理员密码)sudo /opt/mssql/bin/mssql-server setup
初始配置关键要求:
(二)账户与权限安全:最小权限原则落地
禁用或重命名 sa 账户
sa是黑客最常攻击的默认账户,需通过 SQL 命令禁用或重命名:
-- 禁用sa账户ALTER LOGIN sa DISABLE;-- 或重命名sa账户(替换[new_admin_name]为自定义名称)ALTER LOGIN sa WITH NAME = [new_admin_name];
推荐方案:新建独立管理员账户,删除或禁用sa。
按业务分配最小权限
为不同业务系统创建专属账户,仅授予必要权限(避免直接授予sysadmin角色),通过 “角色(Role)” 统一管理权限:
-- 创建业务账户(替换StrongPass123!为复杂密码)CREATE LOGIN app_user WITH PASSWORD = 'StrongPass123!';-- 映射账户到目标数据库CREATE USER app_user FOR LOGIN app_user;-- 授予“数据读取+数据写入”权限(按需调整)ALTER ROLE db_datareader ADD MEMBER app_user;ALTER ROLE db_datawriter ADD MEMBER app_user;
(三)网络访问安全:限制入口、加密传输
修改 SQL Server 默认端口
默认 1433 端口易被扫描,需修改为非默认端口(如 15345),并同步更新防火墙规则:
# 修改端口sudo /opt/mssql/bin/mssql-conf set network.tcpport 15345# 重启SQL Server生效sudo systemctl restart mssql-server# 防火墙开放新端口、关闭旧端口sudo firewall-cmd --permanent --add-port=15345/tcpsudo firewall-cmd --permanent --remove-port=1433/tcp# 重新加载防火墙规则sudo firewall-cmd --reload
配置 IP 白名单
仅允许特定 IP(如业务服务器、管理员终端)访问 SQL Server,通过防火墙rich-rule实现:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="15345" accept'sudo firewall-cmd --reload
(替换192.168.1.100为实际允许的 IP)
启用 SSL/TLS 加密传输
配置证书实现数据传输加密,防止中间人攻击:
# 1. 提前准备SSL证书(自签或购买),放置在/etc/ssl目录# 2. 配置SQL Server使用证书(替换证书/密钥路径)sudo /opt/mssql/bin/mssql-conf set network.tlscert /etc/ssl/certs/mssql.pemsudo /opt/mssql/bin/mssql-conf set network.tlskey /etc/ssl/private/mssql.key# 启用TLS 1.2(禁用低版本协议)sudo /opt/mssql/bin/mssql-conf set network.tlsprotocols 1.2# 重启生效sudo systemctl restart mssql-server
(四)系统与补丁管理:定期更新、减少漏洞
定期更新 SQL Server 与 CentOS
通过yum更新数据库与系统补丁,修复已知安全漏洞:
# 更新SQL Serversudo yum update mssql-server# 更新CentOS系统sudo yum update
设置自动更新任务
通过crontab配置每周日凌晨 3 点自动更新 SQL Server(按需调整频率):
# 编辑定时任务crontab -e# 添加如下内容(每周日3点执行更新)0 3 * * 0 yum update -y mssql-server
(五)数据加密与备份:保障数据完整性
启用透明数据加密(TDE)
TDE 可加密磁盘上的数据库文件,防止物理文件泄露:
-- 创建数据库主密钥(替换StrongTDEPass!为复杂密码)CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongTDEPass!';-- 创建TDE证书CREATE CERTIFICATE TDECert WITH SUBJECT = 'TDE Certificate';-- 创建数据库加密密钥CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE TDECert;-- 启用目标数据库加密(替换MyDatabase为实际数据库名)ALTER DATABASE MyDatabase SET ENCRYPTION ON;
加密备份与异地存储
(六)日志与审计:追溯异常操作
启用 SQL Server 审计功能,记录登录、查询、权限变更等关键操作,便于事后追溯:
-- 创建服务器审计(日志存储路径可调整)CREATE SERVER AUDIT Audit_SQLSecurityTO FILE (FILEPATH = '/var/opt/mssql/data/audit/', MAXSIZE = 1 GB, MAX_ROLLOVER_FILES = 10)WITH (ON_FAILURE = CONTINUE);-- 启用审计ALTER SERVER AUDIT Audit_SQLSecurity WITH (STATE = ON);
注意:需定期分析审计日志,设置日志归档策略(如每月备份并清理过期日志),避免占用过多磁盘空间。
三、额外安全建议
限制数据库进程权限:禁止root直连数据库,使用普通 Linux 账户运行 SQL Server 进程,降低特权升级风险;
启用系统安全机制:开启 SELinux 或 AppArmor,限制 SQL Server 对系统资源的访问范围;
强制密码策略:设定密码有效期(如 90 天)、复杂度要求、历史密码禁用(避免重复使用旧密码);
定期安全扫描:使用nmap扫描端口暴露情况、sqlmap检测 SQL 注入风险,主动发现漏洞。
四、常见问题解答(FAQ)
问题 | 解答 |
---|
Q1:SQL Server 在 CentOS 上默认是安全的吗? | 不完全安全。默认安装未启用加密传输、未限制 IP 访问、sa账户仍存在,需手动加固。 |
Q2:修改端口能完全防止攻击吗? | 不能,但可降低被大规模扫描工具发现的概率,属于 “减少攻击面” 的有效手段。 |
Q3:是否必须禁用sa账户? | 强烈建议禁用或重命名,sa是黑客的主要攻击目标,禁用可大幅降低风险。 |
Q4:启用加密传输会影响性能吗? | 会有轻微影响(1%-5%),但安全收益远大于性能损耗,生产环境推荐启用。 |
Q5:数据库审计日志会占用大量空间吗? | 会。需配置日志归档策略(如每月备份清理),避免磁盘空间耗尽。 |