debian

Debian下SQL Server安全设置指南

小樊
48
2025-10-08 03:29:12
栏目: 云计算

Debian下SQL Server安全设置指南

在Debian系统上部署SQL Server时,需通过系统配置、身份验证、网络隔离、加密保护、权限管理及监控审计等多维度措施,构建全面的安全防线。以下是具体操作指南:

一、系统基础配置

1. 更新系统与安装依赖

确保Debian系统为最新版本,安装SQL Server所需的依赖包:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg apt-transport-https

2. 添加Microsoft SQL Server官方仓库

导入Microsoft GPG密钥并注册SQL Server APT仓库(以Debian 12为例):

curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/debian/12/prod/ stable main" | sudo tee /etc/apt/sources.list.d/mssql-server.list > /dev/null

3. 安装与配置SQL Server

安装SQL Server并运行配置工具设置SA(系统管理员)密码:

sudo apt update
sudo apt install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup

配置过程中需选择混合身份验证模式(SQL Server + Windows),以便后续支持SQL Server登录。

二、身份验证与用户管理

1. 启用混合身份验证

通过mssql-conf工具启用SQL Server身份验证:

sudo mssql-conf set security.mode SQL
sudo systemctl restart mssql-server

2. 管理SQL Server登录名与数据库用户

使用sqlcmd工具登录SQL Server(默认SA账户),执行以下操作:

# 登录SQL Server
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrongPassword'

# 创建SQL Server登录名(强密码策略:长度≥8位,包含大小写字母、数字和特殊字符)
CREATE LOGIN [AppUser] WITH PASSWORD = 'Str0ngP@ssw0rd123!';
GO

# 创建数据库用户并关联登录名
USE [YourDatabase];
CREATE USER [AppUser] FOR LOGIN [AppUser];
GO

# 分配最小必要权限(避免使用db_owner,优先使用db_datareader/db_datawriter)
ALTER ROLE [db_datareader] ADD MEMBER [AppUser];
ALTER ROLE [db_datawriter] ADD MEMBER [AppUser];
GO

3. 禁用默认账户与多余账户

三、网络安全配置

1. 配置防火墙规则

使用ufw(Uncomplicated Firewall)允许SQL Server默认端口(1433),并限制访问源IP:

# 启用ufw
sudo ufw enable

# 允许SQL Server端口(仅允许可信IP,如公司IP段:192.168.1.0/24)
sudo ufw allow from 192.168.1.0/24 to any port 1433/tcp
sudo ufw reload

2. 修改默认端口

通过mssql-conf工具修改SQL Server端口(如改为1434),降低自动化攻击风险:

sudo mssql-conf set network.tcpport 1434
sudo systemctl restart mssql-server

修改后需同步更新防火墙规则,允许新端口访问。

3. 禁用不必要的网络协议

使用mssql-conf禁用VIA、共享内存等非必需协议,仅保留TCP/IP:

sudo mssql-conf set network.disableviamode 1
sudo systemctl restart mssql-server

4. 限制远程连接

通过SQL Server配置管理器(mssql-conf)限制远程IP访问:

# 仅允许特定IP段连接(如公司IP:203.0.113.10-203.0.113.20)
sudo mssql-conf set network.tcpip_allowed_ips "203.0.113.10,203.0.113.20"
sudo systemctl restart mssql-server

5. 启用加密连接

配置SQL Server使用SSL/TLS加密数据传输,防止中间人攻击:

  1. 获取SSL证书(可从受信任的CA购买或使用自签名证书)。
  2. 将证书文件(.crt)复制到/var/opt/mssql/ssl/目录。
  3. 配置SQL Server使用证书:
sudo mssql-conf set network.forceencryption 1
sudo mssql-conf set network.cert thumbprint "YourCertificateThumbprint"
sudo systemctl restart mssql-server

客户端连接时需指定证书路径。

四、数据加密保护

1. 启用透明数据加密(TDE)

TDE加密数据库文件(.mdf、.ldf),防止物理磁盘被盗时数据泄露:

-- 在目标数据库中执行
USE [YourDatabase];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Str0ngMasterKey123!';
GO
CREATE CERTIFICATE TDECert WITH SUBJECT = 'TDE Certificate';
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE TDECert;
GO
ALTER DATABASE [YourDatabase] SET ENCRYPTION ON;
GO

2. 加密备份文件

备份时启用加密,防止备份文件泄露:

BACKUP DATABASE [YourDatabase]
TO DISK = '/var/opt/mssql/backup/YourDatabase_Encrypted.bak'
WITH ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = TDECert);
GO

3. 加密敏感列

对数据库中的敏感字段(如身份证号、手机号)进行列级加密:

-- 创建主密钥
USE [YourDatabase];
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Str0ngMasterKey123!';
GO
-- 创建证书
CREATE CERTIFICATE SensitiveDataCert WITH SUBJECT = 'Sensitive Data Certificate';
GO
-- 创建对称密钥
CREATE SYMMETRIC KEY SensitiveDataKey
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE SensitiveDataCert;
GO
-- 加密数据
OPEN SYMMETRIC KEY SensitiveDataKey DECRYPTION BY CERTIFICATE SensitiveDataCert;
UPDATE [YourTable]
SET [SensitiveColumn] = EncryptByKey(Key_GUID('SensitiveDataKey'), [SensitiveColumn]);
CLOSE SYMMETRIC KEY SensitiveDataKey;
GO

4. 定期备份与测试恢复

制定备份策略(每日全量、每小时增量),并定期测试备份文件恢复:

# 每日全量备份(凌晨2点)
0 2 * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [YourDatabase] TO DISK = '/var/opt/mssql/backup/YourDatabase_Full_$(date +\%F).bak'"
# 每小时增量备份(每小时第15分钟)
15 * * * * /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'YourStrongPassword' -Q "BACKUP DATABASE [YourDatabase] TO DISK = '/var/opt/mssql/backup/YourDatabase_Incremental_$(date +\%F_%H).bak'" WITH DIFFERENTIAL

每月测试一次备份恢复,确保备份有效性。

五、权限与审计管理

1. 遵循最小权限原则

为用户分配仅满足业务需求的权限,避免过度授权:

-- 授予用户查询权限(而非db_datareader)
GRANT SELECT ON [dbo].[Orders] TO [AppUser];
GO
-- 授予用户插入权限(而非db_datawriter)
GRANT INSERT ON [dbo].[Orders] TO [AppUser];
GO
-- 撤销不必要的权限
REVOKE DELETE ON [dbo].[Orders] FROM [AppUser];
GO

2. 使用角色管理权限

创建自定义角色,简化权限分配:

-- 创建角色
USE [YourDatabase];
GO
CREATE ROLE [OrderManager];
GO
-- 分配权限给角色
GRANT SELECT, INSERT, UPDATE ON [dbo].[Orders] TO [OrderManager];
GO
-- 将用户添加到角色
ALTER ROLE [OrderManager] ADD MEMBER [AppUser];
GO

3. 启用审计功能

通过SQL Server Audit监控登录、数据访问等操作,及时发现异常行为:

-- 创建服务器审计(存储路径需有写入权限)
CREATE SERVER AUDIT [ServerAudit]
TO FILE 
(FILEPATH = '/var/opt/mssql/audit/')
WITH (ON_FAILURE = CONTINUE);
GO
-- 启用服务器审计
ALTER SERVER AUDIT [ServerAudit] WITH (STATE = ON);
GO
-- 创建数据库审计规范(监控失败登录和成功查询)
CREATE DATABASE AUDIT SPECIFICATION [DatabaseAudit]
FOR SERVER AUDIT [ServerAudit]
ADD (FAILED_LOGIN_GROUP),
ADD (SELECT ON [dbo].[Orders] BY [public]);
GO
-- 启用数据库审计规范
ALTER DATABASE AUDIT SPECIFICATION [DatabaseAudit] WITH (STATE = ON);
GO

4. 定期审查日志

通过sys.fn_get_audit_file函数查看审计日志,识别可疑操作:

-- 查看最近7天的审计日志
SELECT event_time, server_principal_name, database_name, statement
FROM sys.fn_get_audit_file('/var/opt/mssql/audit/*', DEFAULT, DEFAULT)
WHERE event_time >= DATEADD(DAY, -7, GETDATE())
ORDER BY event_time DESC;

5. 定期安全评估

使用SQL Server的DBCC CHECKDB命令检查数据库完整性,使用Microsoft提供的安全评估工具(如SQL Server Security Assessment)识别潜在漏洞:

-- 检查数据库完整性
USE [YourDatabase];
GO
DBCC CHECKDB WITH NO_INFOMSGS;
GO

六、监控与维护

1. 启用SQL Server错误日志

确保错误日志文件权限正确,便于排查安全事件:

sudo chown mssql:mssql /var/opt/mssql/log/errorlog
sudo chmod 640 /var/opt/mssql/log/errorlog

2. 监控系统资源

使用tophtop等工具监控SQL Server进程的CPU、内存使用情况,避免资源耗尽导致服务中断:

top -p $(pgrep -f mssql)

3. 定期更新SQL Server

关注Microsoft官方发布的安全补丁,及时升级SQL Server版本,修复已知漏洞:

sudo apt update
sudo apt upgrade -y mssql-server

0
看了该问题的人还看了