温馨提示×

Ubuntu上SQL Server的安全设置

小樊
39
2025-11-08 13:09:35
栏目: 云计算

Ubuntu上SQL Server安全设置指南

一、基础环境配置

  1. 安装SQL Server
    首先导入Microsoft GPG密钥并注册Ubuntu存储库,然后安装SQL Server:

    wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc sudo add-apt-repository "deb [arch=amd64,arm64] https://packages.microsoft.com/ubuntu/$(lsb_release -rs)/mssql-server-2022 main" sudo apt-get update sudo apt-get install -y mssql-server 
  2. 初始化配置
    运行mssql-conf setup设置SA账户密码(需符合复杂度要求,如包含大小写字母、数字和特殊字符)及版本(Developer/Enterprise/Standard),并启用SQL Server代理:

    sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-server 
  3. 更改数据/日志目录
    将默认数据、日志目录迁移至非系统分区(如/home/d/mssql/data),提升数据隔离性与安全性:

    sudo mkdir -p /home/d/mssql/data sudo chown -R mssql:mssql /home/d/mssql/data sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /home/d/mssql/data sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /home/d/mssql/data 

二、网络与访问控制

  1. 配置防火墙
    使用UFW开放SQL Server默认端口(1433),限制仅允许可信IP访问:

    sudo apt-get install ufw sudo ufw allow from <trusted_ip> to any port 1433/tcp sudo ufw enable sudo ufw status # 验证规则是否生效 
  2. 修改默认端口
    通过mssql-conf修改TCP端口(如27777),降低端口扫描攻击风险:

    sudo /opt/mssql/bin/mssql-conf set network.tcpport 27777 sudo systemctl restart mssql-server 
  3. 限制远程连接
    在SQL Server配置管理器中(需通过SSH隧道访问),禁用不必要的网络协议(如Named Pipes、VIA),仅保留TCP/IP;在“TCP/IP属性”→“IP地址”选项卡中,将非必需IP的“活动”设为“No”。

三、身份认证与权限管理

  1. 禁用SA默认登录(可选)
    若无需SQL Server身份验证,可通过以下命令禁用SA账户:

    ALTER LOGIN sa DISABLE; 
  2. 创建专用数据库用户
    使用sqlcmd工具创建登录名、数据库用户,并分配最小必要权限(如db_datareaderdb_datawriter):

    sqlcmd -S localhost -U SA -P 'YourPassword' -Q " CREATE LOGIN AppUser WITH PASSWORD = 'ComplexPassword123!'; USE YourDatabase; CREATE USER AppUser FOR LOGIN AppUser; ALTER ROLE db_datareader ADD MEMBER AppUser; ALTER ROLE db_datawriter ADD MEMBER AppUser;" 
  3. 实施最小权限原则
    避免为用户分配sysadmin等高权限角色;若需特定操作(如备份),仅授予对应权限:

    GRANT BACKUP DATABASE TO BackupOperator; REVOKE EXECUTE ON sp_configure FROM PUBLIC; -- 禁止普通用户修改服务器配置 
  4. 启用密码策略
    强制SA及其他登录名使用复杂密码,并设置密码过期时间:

    EXEC sp_configure 'password policy', 1; -- 启用密码策略 EXEC sp_configure 'password expiration', 1; -- 启用密码过期 RECONFIGURE; 

四、数据加密配置

  1. 透明数据加密(TDE)
    TDE加密整个数据库文件(包括数据、日志、备份),防止磁盘窃取导致的数据泄露:

    -- 创建主密钥 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKeyPassword123!'; -- 创建证书 CREATE CERTIFICATE TDECert WITH SUBJECT = 'TDE Certificate'; -- 创建数据库加密密钥 USE YourDatabase; CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE TDECert; -- 启用TDE ALTER DATABASE YourDatabase SET ENCRYPTION ON; 
  2. 列级加密
    对敏感字段(如身份证号、银行卡号)进行列级加密,确保数据在存储和传输中的机密性:

    -- 创建对称密钥 CREATE SYMMETRIC KEY CreditCardKey WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE TDECert; -- 加密数据 OPEN SYMMETRIC KEY CreditCardKey DECRYPTION BY CERTIFICATE TDECert; UPDATE Customers SET CreditCardNumber = EncryptByKey(Key_GUID('CreditCardKey'), CreditCardNumber); -- 解密数据(查询时使用) SELECT CreditCardNumber, CONVERT(varchar, DecryptByKey(CreditCardNumber)) AS DecryptedCard FROM Customers; 

五、审计与监控

  1. 启用登录审核
    记录所有登录尝试(成功/失败),便于追踪异常行为:

    • 通过SQL Server Management Studio(SSMS):右键实例→“属性”→“安全性”→“登录审核”→选择“成功和失败”→重启服务。
    • 使用T-SQL:
      EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'login auditing', 3; -- 0=无审核,1=失败,2=成功,3=全部 RECONFIGURE; 
  2. 定期审查权限
    定期检查数据库用户权限,删除未使用的账户:

    -- 查看所有数据库用户及其角色 SELECT dp.name AS UserName, rp.name AS RoleName FROM sys.database_role_members drm JOIN sys.database_principals dp ON drm.member_principal_id = dp.principal_id JOIN sys.database_principals rp ON drm.role_principal_id = rp.principal_id WHERE dp.type = 'S'; -- 仅显示SQL用户 -- 删除未使用的用户 DROP USER UnusedUser; 

六、系统维护

  1. 定期更新
    及时更新SQL Server及Ubuntu系统,修复已知安全漏洞:

    sudo apt-get update sudo apt-get upgrade -y sudo /opt/mssql/bin/mssql-conf update # 更新SQL Server 
  2. 备份策略
    使用sqlcmd或自动化工具(如cron)定期备份数据库,并测试恢复流程:

    sqlcmd -S localhost -U SA -P 'YourPassword' -Q " BACKUP DATABASE YourDatabase TO DISK = '/home/d/mssql/backups/YourDatabase_$(date +%F).bak' WITH INIT;" 

通过以上步骤,可全面提升Ubuntu上SQL Server的安全性,覆盖从基础环境到数据保护的全流程。需根据实际业务需求调整配置,如调整TDE加密算法、细化列级加密范围等。

0