温馨提示×

Ubuntu上SQL Server的安全设置

小樊
42
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