在Linux环境下部署SQL Server已经越来越普遍,尤其是CentOS系统上运行的SQL Server,不仅性能稳定,还能节省Windows授权成本。然而,数据库安全问题不容忽视,如果没有进行安全加固,一旦被入侵,后果可能是数据泄露、业务中断甚至经济损失。本文将详细介绍如何在CentOS服务器上为SQL Server进行安全设置,帮助你构建一个稳固的数据库防御体系。
CentOS上SQL Server安全设置的总体思路:
安全加固的目标是:减少攻击面 → 提高入侵成本 → 增强数据保护能力 → 确保可审计性。
总体上可以从账户与权限安全,网络访问安全,系统与补丁管理,数据加密与备份,日志与审计几个方面入手。
CentOS服务器上SQL Server安全设置实操:
1. 安装与初始配置安全
在CentOS上安装SQL Server通常使用Microsoft官方仓库:
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
安装过程中建议注意:设置复杂密码(至少12位,包含大小写字母、数字、特殊符号),不使用sa作为日常操作账户
2. 禁用或重命名sa账户
sa是黑客最常攻击的账户名,建议禁用或重命名:
ALTER LOGIN sa DISABLE;
ALTER LOGIN sa WITH NAME = [new_admin_name];
或者直接新建一个管理员账户,并删除sa。
3. 修改默认端口
SQL Server默认监听1433端口,可以通过修改端口减少被扫描的概率:
sudo /opt/mssql/bin/mssql-conf set network.tcpport 15345
sudo systemctl restart mssql-server
同时在防火墙开放新端口并关闭旧端口:
sudo firewall-cmd --permanent --add-port=15345/tcp
sudo firewall-cmd --permanent --remove-port=1433/tcp
sudo firewall-cmd --reload
4. 启用防火墙与白名单
只允许特定IP访问SQL Server:
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
这样可以有效防止外部扫描和非法连接。
5. 启用加密连接
在SQL Server中配置SSL/TLS加密传输:
生成或购买SSL证书,在/etc/ssl下配置证书和密钥,修改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 systemctl restart mssql-server
6. 最小权限原则
为不同业务系统创建独立账户,按需授予权限,不要授予sysadmin给非DBA用户,使用角色(Role)管理权限,避免直接赋权
示例:
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;
7. 定期更新SQL Server和CentOS补丁
sudo yum update mssql-server
sudo yum update
可以通过crontab定期检查更新:
0 3 * * 0 yum update -y mssql-server
8. 开启日志与审计
启用SQL Server审计功能,记录登录、查询、权限变更等操作:
CREATE SERVER AUDIT Audit_SQLSecurity
TO 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);
并定期分析日志,发现异常行为。
9. 数据加密与备份
启用透明数据加密(TDE)保护磁盘上的数据,对备份文件进行密码加密,将备份存储在安全位置,避免与生产库同服务器。
示例:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongTDEPass!';
CREATE CERTIFICATE TDECert WITH SUBJECT = 'TDE Certificate';
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE TDECert;
ALTER DATABASE MyDatabase SET ENCRYPTION ON;
额外安全建议:
禁止root直连数据库,使用普通Linux账户运行数据库进程,避免特权升级漏洞。同时定期安全扫描,推荐使用nmap、sqlmap等工具自测端口和SQL注入风险。还要开启SELinux或AppArmor,限制SQL Server对系统资源的访问范围。最好使用强制密码策略,设定密码有效期、复杂度、历史记录,防止弱密码。
常见问答:
Q1:SQL Server在CentOS上默认是安全的吗?
A:并不完全安全,默认安装没有加密传输、没有限制访问IP、sa账户依旧存在,需手动加固。
Q2:改端口能防止攻击吗?
A:改端口不能完全防御,但可以降低被大规模扫描工具发现的概率,属于“降低暴露面”的方法。
Q3:是否必须禁用sa账户?
A:强烈建议禁用或重命名,sa是常见的攻击目标。
Q4:启用加密传输会影响性能吗?
A:会有轻微性能影响(1%-5%),但对安全提升巨大,生产环境建议启用。
Q5:数据库日志会不会占用很多空间?
A:会的,所以需要设置日志归档策略,比如每月备份日志并清理过期文件。