Microsoft SQL Server 安全基线(Security Baseline)是微软针对 SQL Server 提供的一系列最佳实践和配置建议,旨在确保数据库的安全性、合规性和性能。为了帮助组织强化 SQL Server 的安全性,微软提供了一些安全基线检查和配置项,涵盖了从身份验证、权限管理、加密、到审计和监控等各个方面。 SQL Server 安全基线排查项和最佳实践,

 

SQL Server 安全配置检查清单(2026年1月版)

适用版本:SQL Server 2012 及以上(含 Azure SQL VM / 阿里云 RDS 自建实例)
📍 特别适配:中小企业、制造业、政务系统常见部署环境


一、账户与身份认证(高危区!)

序号 检查项 风险等级 合规要求 验证方法 / 命令
1.1 sa 账户是否已禁用? ⚠️ 高 等保2.0三级 SELECT name, is_disabled FROM sys.sql_logins WHERE name = 'sa'; → 应返回 is_disabled=1
1.2 是否存在空密码或弱密码账户?(如 123456、admin、password) ⚠️ 高 《个人信息保护法》第51条 使用 SELECT name FROM sys.sql_logins WHERE PWDCOMPARE('123456', password_hash) = 1; 扫描常见弱口令
1.3 应用连接是否仍使用 sa 或高权限账户? ⚠️ 高 最小权限原则 检查应用配置文件(web.config / appsettings.json)中的连接字符串
1.4 是否启用密码策略(复杂度+过期)? ISO/IEC 27001 SELECT is_policy_checked, is_expiration_checked FROM sys.sql_logins; → 应为 1
1.5 是否定期轮换数据库账户密码?(建议90天) 企业内控 查阅密码变更记录或堡垒机日志

二、网络与访问控制

序号 检查项 风险等级 合规要求 验证方法 / 命令
2.1 SQL Server 是否直接暴露在互联网?(1433端口开放) ⚠️ 高 工信部2026年第1批通报重点 使用 Shodan 搜索 product:"Microsoft SQL Server" org:"你的公司"
2.2 是否配置 IP 白名单/防火墙规则?仅允许可信IP访问 ⚠️ 高 等保2.0 检查 Windows 防火墙 / 云安全组规则,确认无 0.0.0.0/0
2.3 是否修改默认端口(1433)? 减少自动化扫描命中率 netstat -ano | findstr :1433 → 若仍在用,建议改至 >10000 的随机端口
2.4 是否启用加密连接(SSL/TLS)? GDPR / 金融行业要求 检查 SQL Server 配置管理器 → “协议” → “SSL 证书”是否绑定

三、高危功能与组件

序号 检查项 风险等级 合规要求 验证方法 / 命令
3.1 xp_cmdshell 是否已禁用? ⚠️ 高 Mallox 攻击主要入口 EXEC sp_configure 'xp_cmdshell'; → run_value 应为 0
3.2 CLR 集成(Common Language Runtime)是否禁用? ⚠️ 高 防止 CLR Shell 植入 sp_configure 'clr enabled'; → run_value 应为 0
3.3 OLE Automation Procedures 是否禁用? 防止文件读写/注册表操作 sp_configure 'Ole Automation Procedures'; → 应为 0
3.4 SQL Server Browser 服务是否关闭?(非命名实例无需开启) 减少攻击面 sc query sqlbrowser → 状态应为 STOPPED

四、补丁与漏洞管理

序号 检查项 风险等级 合规要求 验证方法 / 命令
4.1 是否已修复以下高危漏洞?
- CVE-2019-1068
- CVE-2020-0618
- CVE-2025-49718
⚠️ 高 工信部强制要求 执行 SELECT @@VERSION; → 对照 Microsoft 安全更新列表
4.2 SQL Server Reporting Services (SSRS) 是否独立部署并打补丁? CVE-2020-0618 专属风险 检查 SSRS 版本:http://your-ssrs/reports → 查看页脚版本号
4.3 是否启用自动更新或建立补丁管理流程? ISO 27001 A.12.6 查阅运维工单系统或 WSUS 配置

五、审计与监控

序号 检查项 风险等级 合规要求 验证方法 / 命令
5.1 是否启用 SQL Server Audit 并记录登录失败? ⚠️ 高 等保2.0 审计要求 SELECT * FROM sys.server_audits; → 应有至少一个启用的审计
5.2 是否监控异常行为?(如大量 DELETE、DROP TABLE) 主动防御 配置 Extended Events 或使用第三方工具(如 SolarWinds DPA)
5.3 日志是否保留 ≥180 天? 《网络安全法》第21条 检查审计日志文件存储路径及保留策略

六、备份与恢复(防勒索最后防线!)

序号 检查项 风险等级 合规要求 验证方法 / 命令
6.1 是否遵循 3-2-1 备份原则
(3份副本,2种介质,1份离线/异地)
⚠️ 高 勒索攻击应对核心 检查备份策略文档 + 实际存储位置(如 NAS + 云对象存储 + 磁带)
6.2 是否定期测试备份恢复?(至少每季度一次) ⚠️ 高 很多企业“有备份但无法还原” 查阅最近一次恢复演练报告
6.3 备份文件是否加密?(尤其含个人信息的库) 《个人信息保护法》第51条 检查 .bak 文件是否使用 TDE 或 AES 加密

✅ 附:快速自查命令汇总(复制到 SSMS 即可运行)

sql
编辑
 
 
-- 1. 检查 sa 状态
SELECT name, is_disabled FROM sys.sql_logins WHERE name = 'sa';

-- 2. 检查 xp_cmdshell 状态
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell';

-- 3. 检查 CLR 状态
EXEC sp_configure 'clr enabled';

-- 4. 列出所有用户定义作业(可疑后门常伪装成作业)
SELECT name, date_created, date_modified FROM msdb.dbo.sysjobs 
WHERE originating_server_id = 0;

-- 5. 检查最近1小时登录失败(需先启用审计)
-- (若未启用,请立即配置!)

 


 

当前 SQL Server 攻击为何如此猖獗?——三大“温床”正在蔓延

  1. “僵尸数据库”泛滥
    很多中小企业(尤其本地制造业、律所、零售系统)仍在使用 SQL Server 2008/2012,这些版本早已停止支持,却仍暴露在公网提供老旧业务接口。

  2. 云上配置失误激增
    迁移上云后,误将 Azure SQL VM 或阿里云 RDS 实例的安全组设为 0.0.0.0/0 开放 1433 端口,等于把保险柜钥匙挂在网上。

  3. “sa 账户依赖症”难改
    超过 70% 的内部应用仍硬编码使用 sa 账户连接数据库(来源:2025年 CSDN 企业安全调研),一旦泄露即全线失守。

💡 Mallox 勒索组织最新战术
入侵后 不立即加密,而是潜伏 3–7 天,先窃取客户数据(如合同、身份证号),再以“不付赎金就公开数据”双重勒索——这比单纯加密更致命!


🛡️ 企业紧急自查与加固“三步走”(48小时内必须完成)

✅ 第一步:断外联 + 查痕迹(1小时内)

powershell
编辑
 
 
# 1. 立即在防火墙/安全组中拒绝所有非必要IP访问1433端口
#    (仅保留运维跳板机或应用服务器IP)

# 2. 检查异常登录(重点关注非工作时间、境外IP)
SELECT 
    event_time, 
    client_ip, 
    session_id,
    succeeded
FROM sys.fn_get_audit_file ('C:\Audit\*', default, default)
WHERE action_id = 'LGIF'  -- 登录失败
ORDER BY event_time DESC;

# 3. 检查可疑作业/存储过程
SELECT name, date_created FROM msdb.dbo.sysjobs WHERE enabled = 1;
SELECT name FROM sys.procedures WHERE is_ms_shipped = 0;

✅ 第二步:强身份 + 关高危(24小时内)

操作 命令/配置 依据
禁用 sa 账户 ALTER LOGIN sa DISABLE; GB/T 35273-2020《个人信息安全规范》
创建专用应用账户 CREATE LOGIN app_user WITH PASSWORD = 'Str0ng!P@ss2026#Sos';
GRANT CONNECT SQL TO app_user;
最小权限原则
关闭 xp_cmdshell EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE; 防止命令执行
禁用 CLR 集成 sp_configure 'clr enabled', 0; RECONFIGURE; 阻断 CLR Shell

⚠️ 特别提醒
若业务必须启用 xp_cmdshell 或 CLR,请严格限制调用者权限,并启用 SQL Server Audit 记录所有调用行为。

✅ 第三步:验备份 + 建隔离(48小时内)

  • 验证备份有效性
    在隔离环境恢复 .bak 文件,确认能正常查询数据(很多企业“有备份但无法还原”!)。
  • 实施网络微隔离
    将数据库服务器放入独立 VLAN,仅允许应用服务器通过 非默认端口(如 14330)访问,并启用 IPSec 加密通信
  • 部署轻量级监控
    使用开源工具如 osquery 或 Wazuh 监控 sqlservr.exe 异常子进程(如 cmd.exepowershell.exe)。

🌐 长效防御:从“被动挨打”到“主动免疫”

层级 措施 工具推荐(国产优先)
网络层 数据库不出内网,公网访问走 API 网关 阿里云 WAF + 数据库代理
主机层 启用 Windows Defender ASR 规则
阻止 Office 应用写入 SQL 目录
微软 Defender for Endpoint
数据库层 启用 TDE 透明加密 + 列级加密敏感字段 SQL Server Always Encrypted
管理层面 实施 双人授权变更制度
所有 DDL/DML 操作需审批
腾讯云 DBBrain / 华为 DAS

 


Microsoft SQL Server 安全基线(Security Baseline)是微软针对 SQL Server 提供的一系列最佳实践和配置建议,旨在确保数据库的安全性、合规性和性能。为了帮助组织强化 SQL Server 的安全性,微软提供了一些安全基线检查和配置项,涵盖了从身份验证、权限管理、加密、到审计和监控等各个方面。

以下是一些常见的 SQL Server 安全基线排查项和最佳实践,帮助确保 SQL Server 数据库的安全性:

1. SQL Server 实例的安全配置

  • 启用 Windows 身份验证模式:SQL Server 支持两种身份验证模式:Windows 身份验证模式和混合模式(Windows 身份验证 + SQL Server 身份验证)。强烈建议使用 Windows 身份验证模式,因为它提供更高的安全性。

    • 检查:确保 SQL Server 配置为仅使用 Windows 身份验证模式。
    sqlCopy Code
    -- 检查 SQL Server 身份验证模式
    SELECT SERVERPROPERTY('IsIntegratedSecurityOnly');
  • 禁用 SQL Server 帐户:禁用所有不再使用的 SQL Server 登录账户,尤其是 sa(系统管理员)账户。

    • 检查:确保 sa 账户被禁用或使用强密码保护。
    sqlCopy Code
    -- 禁用 sa 帐户
    ALTER LOGIN sa DISABLE;
  • 使用强密码:确保 SQL Server 登录账户(尤其是 sa 和其他高权限账户)使用复杂的、符合密码策略的强密码。

2. 最小权限原则

  • 最小化权限:确保所有 SQL Server 登录账户和用户仅拥有他们完成工作所需的最小权限。

    • 检查:定期审核 SQL Server 用户权限,避免不必要的高权限赋予。
    sqlCopy Code
    -- 查看 SQL Server 用户权限
    SELECT dp.name AS UserName, dp.type_desc AS UserType, 
           o.name AS ObjectName, p.permission_name
    FROM sys.database_principals dp
    LEFT JOIN sys.database_permissions p ON dp.principal_id = p.grantee_principal_id
    LEFT JOIN sys.objects o ON p.major_id = o.object_id;
  • 使用角色:使用 SQL Server 内置角色(如 db_ownerdb_datareaderdb_datawriter 等),而不是直接为用户授予权限。

  • 避免使用 sysadmin 角色:尽量避免将用户添加到 sysadmin 固定服务器角色中,除非确有必要。

    sqlCopy Code
    -- 检查谁属于 sysadmin 角色
    SELECT name FROM sys.server_principals WHERE type_desc = 'SQL_LOGIN' AND is_disabled = 0;

3. 加密和数据保护

  • 启用透明数据加密(TDE):透明数据加密用于加密 SQL Server 数据库的文件系统中的数据,防止数据泄漏。确保数据库启用了 TDE 以保护静态数据。

    • 检查:验证数据库是否启用了透明数据加密。
    sqlCopy Code
    -- 检查是否启用 TDE
    SELECT database_id, name, is_encrypted
    FROM sys.databases
    WHERE is_encrypted = 1;
  • 加密备份文件:确保备份数据文件使用加密技术加密,以保护备份中的敏感数据。

  • 列级加密:对于存储敏感数据的列(如信用卡号、社会保障号码等),使用 SQL Server 提供的列级加密(如 EncryptByPassPhrase)进行加密。

4. 审计和监控

  • 启用审计:SQL Server 提供了审计功能,可以记录 SQL Server 实例的登录、查询执行、数据库修改等操作。强烈建议启用审计以跟踪所有的安全事件。

    • 检查:验证是否启用了 SQL Server 审计功能。
    sqlCopy Code
    -- 查询是否启用了 SQL Server 审计
    SELECT * FROM sys.server_audits;
  • 审计关键活动:如登录失败、权限更改、敏感数据访问等,应该配置为审计日志,及时发现并响应潜在的安全问题。

  • 启用扩展事件:扩展事件(Extended Events)是 SQL Server 提供的一种轻量级的监控和日志记录机制,可以用于捕捉和分析潜在的安全事件。

5. 网络和连接安全

  • 强制加密连接:确保 SQL Server 与客户端的通信使用加密连接,以保护数据传输过程中的敏感信息。

    • 检查:确认 SQL Server 配置了加密通信。
    sqlCopy Code
    -- 检查是否启用了加密连接
    SELECT encrypt_option
    FROM sys.dm_exec_connections
    WHERE session_id = @@SPID;
  • 禁用不必要的协议:确保仅启用必要的协议(如 TCP/IP),并禁用其他不必要的协议(如 Named Pipes)。

  • 防止暴露 SQL Server:如果不需要外部访问 SQL Server 实例,可以限制连接到 SQL Server 的网络范围。使用防火墙等技术限制外部连接。

6. 自动化安全任务

  • 定期进行安全审查:定期对 SQL Server 实例进行安全性检查,确保数据库遵循最佳安全配置。
  • 定期进行数据库备份:确保数据库的备份操作自动化,定期进行备份并存储在安全的位置。

7. SQL Server 安全更新和补丁管理

  • 安装最新的安全补丁:确保 SQL Server 实例和操作系统都安装了最新的安全补丁。

    • 检查:确认是否安装了所有关键的安全更新。
    sqlCopy Code
    -- 检查 SQL Server 的版本和补丁级别
    SELECT SERVERPROPERTY('ProductVersion'), SERVERPROPERTY('ProductLevel');
  • 更新 SQL Server 版本:确保 SQL Server 实例使用的是微软支持的版本。定期检查是否有新的 SQL Server 版本发布,并根据需要进行升级。

8. 物理安全和访问控制

  • 限制物理访问:确保 SQL Server 所在的物理服务器安全,不允许未授权人员接触数据库服务器。
  • 操作系统安全性:加强操作系统的安全配置,包括限制 SQL Server 所在服务器的访问权限、关闭不必要的端口和服务、确保操作系统使用最新的安全补丁等。

9. SQL Server 安全基线文档和合规性

  • 文档化安全配置:确保 SQL Server 的所有安全配置和排查项都有详细的文档记录,以便进行审计和合规性检查。
  • 符合行业标准和法规:根据行业安全标准(如 PCI-DSS、HIPAA、GDPR 等)进行相应的配置和安全审计。

10. SQL Server 日志和错误消息

  • 隐藏敏感错误信息:确保 SQL Server 错误信息不包含敏感数据(如数据库结构、表名、列名等)。可以通过配置 SQL Server 错误消息的详细程度来实现。

    sqlCopy Code
    -- 配置错误消息详细程度
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'user options', 0;  -- 禁用详细错误信息
    RECONFIGURE;

 

通过定期排查这些安全基线配置项,您可以有效降低 SQL Server 数据库面临的安全风险。微软的安全基线建议为数据库管理员提供了一套详细的、具有实践性的配置和检查方法,有助于确保数据库安全、保护敏感数据并遵循相关合规要求。


讲解 SQL Server 安全基线的实施与优化,接下来我们会涵盖一些更深入的配置项和日常维护的最佳实践。

11. 数据库活动和查询的优化与监控

  • 审计查询和数据库活动:数据库的查询活动和操作日志可以帮助发现潜在的安全风险。可以通过 SQL Server 提供的 SQL Profiler扩展事件(Extended Events) 来捕捉和分析数据库活动。

    • 检查:定期审查数据库的查询活动,尤其是大规模的数据操作和敏感数据查询,确保这些操作符合权限管理策略。
    sqlCopy Code
    -- 监控所有的查询请求
    CREATE EVENT SESSION QuerySession
    ON SERVER
    ADD EVENT sqlserver.sql_statement_completed
    ADD TARGET package0.ring_buffer;
    
    ALTER EVENT SESSION QuerySession
    ON SERVER
    STATE = START;
  • 优化查询性能:安全性和性能往往是相互关联的,安全配置不当可能会影响查询性能。定期进行 SQL 查询优化索引优化,可以减少数据库的负载,提升整体性能。

    • 建议:定期使用 SQL Server 提供的 Database Engine Tuning Advisor 来评估查询的执行计划并优化索引。

12. SQL Server 安全备份和恢复策略

  • 备份加密和安全存储:确保备份文件存储在安全的位置,并且对备份文件本身进行加密。数据库备份是数据灾难恢复策略中的关键部分,也是防止数据泄露的有效手段。

    sqlCopy Code
    -- 创建加密备份
    BACKUP DATABASE MyDatabase
    TO DISK = 'C:\Backups\MyDatabase.bak'
    WITH ENCRYPTION(ALGORITHM = AES_256, SERVER CERTIFICATE = MyBackupCert);
  • 定期备份和自动化恢复验证:建立定期备份策略,并确保备份文件是可恢复的。使用自动化脚本定期进行恢复验证,确保灾难恢复时能够迅速恢复数据。

    sqlCopy Code
    -- 备份数据库
    BACKUP DATABASE MyDatabase TO DISK = 'C:\Backups\MyDatabase.bak';
    
    -- 恢复验证
    RESTORE VERIFYONLY FROM DISK = 'C:\Backups\MyDatabase.bak';

13. SQL Server 安全事件响应和应急响应计划

  • 制定安全事件响应计划:当发生安全事件(如未经授权的访问、数据泄露、SQL 注入攻击等)时,需要有一个明确的事件响应计划。这个计划应包括以下步骤:

    • 快速检测并隔离受影响的系统。
    • 收集和分析事件日志。
    • 对事件进行取证分析,找出潜在漏洞。
    • 修补漏洞并恢复正常运行。

    可以使用 SQL Server 提供的 SQL Server Profiler扩展事件 来捕捉安全事件,并将其存储在审计日志中。

  • 监控并响应数据库访问异常:使用第三方工具或 SQL Server 的 自定义审计和警报 功能,监控数据库访问异常。确保任何未经授权的访问或特权提升行为都能被及时发现并响应。

    sqlCopy Code
    -- 设置 SQL Server 登录失败的警报
    EXEC sp_set_sqlagent_properties @failed_logins_alert = 1;

14. SQL Server 高可用性和容灾

  • 启用高可用性(HA)功能:为了确保 SQL Server 在遭遇硬件故障或其他灾难时能够快速恢复,启用 SQL Server 高可用性解决方案是非常必要的。常见的 SQL Server 高可用性技术包括:

    • Always On Availability Groups:这是一种高级的高可用性技术,支持自动故障转移并能保证数据的持久性。
    • 数据库镜像:虽然在 SQL Server 2012 后已经被标记为不推荐使用,但在某些环境下仍然可以使用。
    • Log Shipping:用于将事务日志从主服务器传输到一个或多个备用服务器,以实现故障恢复。
  • 加固高可用性解决方案的安全性:在启用高可用性解决方案时,确保所有节点(主节点和备节点)都具备相同的安全配置。特别注意网络安全,避免外部未授权访问。

    • 加密 Always On 通信:启用 Always On 时,务必确保数据库之间的通信使用加密,防止数据在传输过程中被截获。
    sqlCopy Code
    -- 配置 Always On 加密
    ALTER DATABASE MyDatabase
    SET HADR ENCRYPTION ON;

15. SQL Server 存储和日志文件的安全

  • 控制数据文件和日志文件的权限:对于存储在磁盘上的数据库文件(.mdf、.ldf),必须严格控制操作系统层面的访问权限,只允许数据库管理员或相应的操作员进行读写操作。

    • 检查:确保数据库文件存储位置的文件系统权限只授予必需的用户或组,禁止普通用户访问这些文件。
    bashCopy Code
    # 确保数据库文件只能由 SQL Server 进程访问
    chmod 600 /var/opt/mssql/data/*.mdf
    chmod 600 /var/opt/mssql/data/*.ldf
  • 隔离日志文件:日志文件的安全至关重要,建议将事务日志与数据文件分开存储,甚至在不同的物理硬盘上,以避免单点故障。

16. SQL Server 自动化和脚本化管理

  • 自动化日常安全任务:使用 SQL Server 的 Agent JobsPowerShell 脚本 自动化常见的安全任务,如权限审计、数据库备份、日志清理等。自动化不仅能提升效率,还能减少人为错误。

    sqlCopy Code
    -- 自动化备份任务
    EXEC msdb.dbo.sp_add_job @job_name = 'BackupJob';
    EXEC msdb.dbo.sp_add_jobstep @job_name = 'BackupJob', @step_name = 'BackupStep', @subsystem = 'TSQL', 
        @command = 'BACKUP DATABASE MyDatabase TO DISK = ''C:\Backups\MyDatabase.bak''';
  • 定期执行安全检查脚本:定期运行安全检查脚本,自动检查数据库配置是否符合安全基线。

    sqlCopy Code
    -- 安全检查:查看所有启用的 SQL Server 登录
    SELECT name, is_disabled FROM sys.sql_logins WHERE is_disabled = 0;

17. SQL Server 的合规性和审计

  • 遵守行业合规性标准:确保 SQL Server 实例符合相关法规和合规性标准的要求,如 PCI-DSS、HIPAA、GDPR 等。这可能包括敏感数据的加密、日志审计、以及数据访问控制等方面。

  • 审计报告和记录:根据合规要求,生成审计报告并保存一定时间。SQL Server 提供了丰富的审计功能,可以将事件记录到文件或写入表格,以便后续的检查和分析。

    sqlCopy Code
    -- 启用数据库审计
    CREATE SERVER AUDIT MyAudit
        TO FILE (FILEPATH = 'C:\AuditLogs\');
    
    CREATE SERVER AUDIT SPECIFICATION MyAuditSpecification
        FOR SERVER AUDIT MyAudit
        ADD (DATABASE_PRINCIPAL_CHANGE_GROUP);

 

SQL Server 的安全基线涵盖了多方面的最佳实践,包括身份验证和授权、数据加密、审计和监控、高可用性、灾难恢复等内容。通过遵循这些最佳实践,数据库管理员可以有效地保障 SQL Server 实例的安全性,防止潜在的安全威胁,并确保数据库系统的稳定运行。

每个组织的具体需求和风险模型不同,因此应根据实际情况定制适合的安全策略。通过定期检查和更新安全配置,您可以确保 SQL Server 实例始终处于最佳安全状态。


18. SQL Server 的身份验证与授权细节

深入理解认证方式和权限控制

  • SQL Server 认证模式选择:SQL Server 提供两种主要的身份验证模式:

    1. Windows 身份验证模式(推荐):使用操作系统的身份验证机制进行用户验证。该模式较为安全,因为它依赖于 Windows 的安全策略、密码管理和账户锁定策略。
    2. 混合模式身份验证:同时支持 Windows 身份验证和 SQL Server 身份验证。SQL Server 身份验证虽然灵活,但由于密码存储的方式不同,相比 Windows 身份验证更容易受到攻击,因此应谨慎使用。
    • 建议:尽可能使用 Windows 身份验证模式,避免使用 SQL Server 身份验证,特别是对外部访问的 SQL Server 实例,避免不必要的风险。
    sqlCopy Code
    -- 查看当前认证模式
    SELECT SERVERPROPERTY('ProductVersion'), SERVERPROPERTY('ProductLevel'), SERVERPROPERTY('Edition');
    -- 如果需要修改认证模式为 Windows 身份验证
    ALTER LOGIN [sa] DISABLE; -- 禁用 SQL Server 身份验证
  • 最小权限原则:根据最小权限原则(Principle of Least Privilege),用户和应用程序应该只被授予完成其任务所需的最小权限。使用 角色权限 来限制数据库用户的访问范围。

    • 建议:为常规用户创建特定的数据库角色,并为它们赋予必要的 SELECT、INSERT、UPDATE、DELETE 权限。避免直接为用户赋予过多的权限。
    sqlCopy Code
    -- 创建一个只读的角色
    CREATE ROLE ReadOnlyRole;
    GRANT SELECT ON SCHEMA::dbo TO ReadOnlyRole;
  • 定期审查权限:定期检查用户权限和角色分配,避免权限膨胀和过期账户的存在。SQL Server 允许使用 动态管理视图 来检查权限和用户活动。

    sqlCopy Code
    -- 查找具有特权的用户
    SELECT dp.name AS UserName, dp.type_desc AS UserType, p.permission_name AS PermissionName
    FROM sys.database_principals dp
    LEFT JOIN sys.database_permissions p ON dp.principal_id = p.grantee_principal_id
    WHERE dp.type IN ('S', 'U') -- S=SQL用户, U=Windows用户
    ORDER BY dp.name;

19. SQL Server 日志和审计管理

审计和日志的实施

  • 启用 SQL Server 审计:启用 SQL Server 审计可以帮助跟踪和记录所有重要的数据库活动,尤其是在数据访问和操作方面。审计可以设置为记录登录尝试、数据修改操作、架构更改等。

    • 建议:使用 SQL Server 提供的审计功能来跟踪所有的用户活动,特别是敏感数据的访问和修改。
    sqlCopy Code
    -- 创建审计对象
    CREATE SERVER AUDIT MyServerAudit
        TO FILE (FILEPATH = 'C:\AuditLogs\MyAuditLog\');
    
    -- 启用审计规范
    CREATE SERVER AUDIT SPECIFICATION MyAuditSpecification
        FOR SERVER AUDIT MyServerAudit
        ADD (SUCCESSFUL_LOGIN_GROUP, FAILED_LOGIN_GROUP);
    
    -- 启动审计
    ALTER SERVER AUDIT MyServerAudit WITH (STATE = ON);
  • 定期分析审计日志:审计日志应定期分析,确保没有发生未经授权的访问行为。可以使用第三方工具或自定义脚本定期读取和分析 SQL Server 审计日志。

    sqlCopy Code
    -- 查看 SQL Server 审计日志
    SELECT * FROM sys.fn_get_audit_file('C:\AuditLogs\MyAuditLog\*.sqlaudit', NULL, NULL);
  • 启用 SQL Server 错误日志:除了审计日志外,还需要启用错误日志并定期检查。这可以帮助您发现潜在的配置错误、安全漏洞和系统故障。

    sqlCopy Code
    -- 查看 SQL Server 错误日志
    EXEC xp_readerrorlog 0, 1, N'';

20. SQL Server 数据加密技术

数据加密与密钥管理

  • 透明数据加密(TDE):TDE 是 SQL Server 提供的一种加密方案,可以对数据库文件进行加密,保护数据库数据免受物理损害的风险。使用 TDE,数据库的所有数据(包括日志文件)都会加密。

    • 建议:启用 TDE 来加密数据库,特别是存储敏感数据的数据库。
    sqlCopy Code
    -- 启用 TDE
    CREATE DATABASE ENCRYPTION KEY;
    ALTER DATABASE MyDatabase SET ENCRYPTION ON;
  • 列级加密:如果数据库包含敏感信息,如信用卡号码、社会保险号等,可以对特定列进行加密。SQL Server 提供了对列级别的数据加密支持,可以确保即使数据泄露,敏感信息依然安全。

    sqlCopy Code
    -- 创建加密密钥
    CREATE SYMMETRIC KEY MySymmetricKey
        WITH ALGORITHM = AES_256
        ENCRYPTION BY PASSWORD = 'StrongPassword123!';
    
    -- 对列进行加密
    OPEN SYMMETRIC KEY MySymmetricKey DECRYPTION BY PASSWORD = 'StrongPassword123!';
    UPDATE MyTable SET SensitiveData = ENCRYPTBYKEY(KEY_GUID('MySymmetricKey'), SensitiveData);
  • 透明数据加密密钥管理:密钥是加密过程中的核心部分,必须确保密钥的安全管理。SQL Server 提供了 密钥管理密钥保护机制,包括 证书加密密钥,这些密钥的存储和管理必须按照严格的安全标准执行。

    • 建议:将加密密钥和数据库本身分开存储,并使用硬件安全模块(HSM)来保护密钥。

21. SQL Server 性能与安全的平衡

性能优化与安全性

  • 定期监控性能:通过 SQL Server 提供的 动态管理视图(DMVs)监控数据库的性能,确保安全配置不会影响到正常的数据库操作。

    sqlCopy Code
    -- 查看数据库的活动锁
    SELECT * FROM sys.dm_tran_locks;
    
    -- 检查执行的查询是否存在性能问题
    SELECT * FROM sys.dm_exec_requests;
  • 资源限制与安全:使用 Resource Governor 来限制数据库操作的资源使用,防止恶意或错误的查询影响数据库的安全性和性能。

    sqlCopy Code
    -- 启用 Resource Governor
    CREATE RESOURCE GOVERNOR MyResourceGovernor;
    ALTER RESOURCE GOVERNOR RECONFIGURE;
  • 审查 SQL Server 配置:定期审查数据库的配置和设置,确保没有不必要的功能开启或未加固的配置。例如,禁用 SQL Server Browser 服务 或其他不必要的服务,以减少潜在的攻击面。

    sqlCopy Code
    -- 禁用 SQL Server Browser 服务
    EXEC xp_servicecontrol 'stop', 'SQLBrowser';

22. SQL Server 高级威胁防护

先进的安全机制

  • SQL Server 安全漏洞扫描:使用 微软安全更新管理(Microsoft Security Updates)和 第三方工具 定期扫描 SQL Server 的安全漏洞,修补已知的安全问题。

  • SQL Server 安全漏洞修补:确保 SQL Server 安装和运行的版本是最新的,定期应用安全补丁和更新。SQL Server 的某些版本已经不再支持,因此必须尽早计划升级。

  • SQL Server 网络层安全:确保 SQL Server 实例只通过受信任的网络访问,使用 防火墙VPN 限制对 SQL Server 实例的网络访问。

  • 加密传输:启用 SSL/TLS 加密来确保 SQL Server 客户端与服务器之间的数据传输安全。

    sqlCopy Code
    -- 启用加密
    ALTER ENDPOINT MyEndpoint
        FOR TSQL LISTENER
        STATE = STARTED
        AS TCP (LISTENER_PORT = 1433, LISTENER_IP = ALL)
        ENCRYPTION = REQUIRED;

 

SQL Server 安全基线的实施不仅是技术性操作的集合,更是一个持续的过程,涉及数据库的部署、配置、维护、监控和优化等各个方面。通过正确的权限管理、加密技术、审计措施、性能优化等多重保障,可以确保 SQL Server 实例不仅高效运行,还能有效抵御各种安全威胁。

随着技术不断发展,安全威胁也会不断演进,因此定期审查和更新安全策略、措施是保障数据库安全的长期之计。


23. SQL Server 的备份与恢复策略

备份的类型与最佳实践

  • 全备份(Full Backup):全备份是对整个数据库进行完整备份,包含所有数据和对象。这是数据库恢复的基石,通常建议定期执行全备份,尤其是数据库较大的情况下。

    • 建议:至少每周执行一次全备份,确保数据的完整性。根据业务需求的不同,可以调整备份频率。
    sqlCopy Code
    -- 执行全备份
    BACKUP DATABASE MyDatabase
    TO DISK = 'C:\Backups\MyDatabaseFull.bak'
    WITH INIT, COMPRESSION;
  • 差异备份(Differential Backup):差异备份是自上次全备份以来所有变更的数据的备份。差异备份的恢复速度通常比全备份和事务日志备份快,因为它包含了自上次全备份以来的数据更改。

    • 建议:在执行全备份后,定期执行差异备份(如每日一次),特别是对于大规模或高频变动的数据库。
    sqlCopy Code
    -- 执行差异备份
    BACKUP DATABASE MyDatabase
    TO DISK = 'C:\Backups\MyDatabaseDiff.bak'
    WITH DIFFERENTIAL, COMPRESSION;
  • 事务日志备份(Transaction Log Backup):事务日志备份记录了数据库中的所有事务,以支持 点-in-time 恢复。通过备份事务日志,SQL Server 可以恢复到备份时刻之后的任何时间点。

    • 建议:对于 高可用性 和 灾难恢复 至关重要的应用,建议每小时进行事务日志备份,或者根据业务需求频繁备份事务日志。
    sqlCopy Code
    -- 执行事务日志备份
    BACKUP LOG MyDatabase
    TO DISK = 'C:\Backups\MyDatabaseLog.trn'
    WITH COMPRESSION;
  • 备份策略和存储

    1. 备份存储:备份文件应存储在物理上与数据库分开的存储介质中,并最好选择 异地备份 或 云备份,以应对灾难恢复场景。
    2. 备份验证:定期验证备份文件的完整性,确保备份文件没有损坏,并能成功恢复。
    3. 备份保留策略:根据法规要求和业务需求设置备份的保留时间。通常,对于全备份,可以保留至少 7 到 30 天的备份文件,而事务日志备份则可以保留更长时间。
    sqlCopy Code
    -- 检查备份文件的完整性
    RESTORE VERIFYONLY FROM DISK = 'C:\Backups\MyDatabaseFull.bak';

恢复的步骤和策略

  • 全恢复(Full Recovery):恢复数据库时,如果需要完全恢复到某个时间点,首先恢复最近的全备份,然后恢复相关的差异备份和事务日志备份。

    • 建议:对关键的生产环境使用 完整恢复模型,并保持事务日志的备份,以确保在灾难恢复时可以恢复到具体时间点。
    sqlCopy Code
    -- 恢复全备份
    RESTORE DATABASE MyDatabase
    FROM DISK = 'C:\Backups\MyDatabaseFull.bak'
    WITH NORECOVERY;
    
    -- 恢复差异备份
    RESTORE DATABASE MyDatabase
    FROM DISK = 'C:\Backups\MyDatabaseDiff.bak'
    WITH NORECOVERY;
    
    -- 恢复事务日志备份(例如,恢复到某一时间点)
    RESTORE LOG MyDatabase
    FROM DISK = 'C:\Backups\MyDatabaseLog.trn'
    WITH RECOVERY, STOPAT = '2024-12-12T14:00:00';
  • 点-in-time 恢复(Point-in-Time Recovery):点-in-time 恢复是指将数据库恢复到一个特定的时间点,通常用于避免数据丢失或损坏。通过事务日志备份,可以指定恢复到某一时间点或事务标识符(LSN)来恢复数据。

  • 多次恢复链(Restore Chain):恢复链是指在恢复过程中,必须按照特定顺序恢复多个备份。如果差异备份之后有多个日志备份,那么需要按照顺序恢复。

24. SQL Server 高可用性与灾难恢复(HA/DR)

高可用性解决方案

  • 数据库镜像:数据库镜像是一种高可用性技术,可以通过配置 主副本镜像副本 来确保主数据库发生故障时,能够将应用程序切换到镜像副本。可以配置为 同步镜像异步镜像,以适应不同的业务需求。

    • 建议:数据库镜像适合用于需要高可用性的中小型应用,但需要考虑网络延迟和性能。
    sqlCopy Code
    -- 配置数据库镜像
    ALTER DATABASE MyDatabase
    SET PARTNER = 'TCP://MirrorServer:5022';
  • Always On 可用性组:Always On 可用性组是一种企业级的高可用性解决方案,允许多个副本同时在线并提供自动故障转移功能。它基于 Windows Server 故障转移群集(WSFC)来实现高可用性。

    • 建议:对于大型企业应用,使用 Always On 可用性组能提供更好的灾难恢复和高可用性保障。
    sqlCopy Code
    -- 配置 Always On 可用性组
    CREATE AVAILABILITY GROUP MyAvailabilityGroup
    FOR DATABASE MyDatabase
    REPLICA ON 'PrimaryServer' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, FAILOVER_MODE = AUTOMATIC);
  • 日志传送:日志传送是一种基于事务日志备份的高可用性方案。它通过传送事务日志文件到备用服务器并应用,确保数据在主服务器故障时能够快速恢复。

    • 建议:日志传送适合用于需要中等可用性和较少管理开销的环境。
    sqlCopy Code
    -- 配置日志传送
    ALTER DATABASE MyDatabase
    SET HADR AVAILABILITY GROUP = MyAvailabilityGroup;

灾难恢复策略

  • 异地备份与容灾:为了确保灾难发生时能够迅速恢复,最好将备份存储在不同的地理位置或云平台。SQL Server 支持将备份文件上传到 Azure Blob 存储,确保数据在自然灾害或硬件故障时得到保障。

    • 建议:使用 Azure 存储 或其他云服务进行备份存储,并定期验证备份恢复能力。
    sqlCopy Code
    -- 使用 Azure Blob 存储
    BACKUP DATABASE MyDatabase
    TO URL = 'https://mycontainer.blob.core.windows.net/mydatabasebackup/backup.bak';
  • 灾难恢复演练:定期进行灾难恢复演练,以验证备份文件和恢复过程的有效性。确保在真实灾难发生时,恢复过程能够顺利执行,并恢复关键业务功能。

    • 建议:每年至少进行一次灾难恢复演练,测试从备份恢复到生产环境的全过程。

25. SQL Server 性能优化与监控

性能监控工具

  • SQL Server Profiler:SQL Server Profiler 是一个强大的工具,可以捕获和分析 SQL Server 上的查询事件。通过 Profiler,可以监控查询性能,识别慢查询和其他性能瓶颈。

    • 建议:使用 SQL Server Profiler 监控生产环境中的查询性能,特别是长时间运行的查询和锁定操作。
  • 动态管理视图(DMVs):DMVs 提供了大量的数据库性能指标,帮助数据库管理员监控 SQL Server 实例的运行状况。通过查询 DMVs,可以获得有关锁、查询执行、缓存、I/O 等方面的信息。

    sqlCopy Code
    -- 查看 SQL Server 的锁定情况
    SELECT * FROM sys.dm_tran_locks;
    
    -- 查看查询执行计划
    SELECT * FROM sys.dm_exec_requests;
  • SQL Server Management Studio (SSMS):SSMS 提供了内置的 查询分析器执行计划查看器,用于实时分析和优化查询。

 

posted @ 2024-12-13 01:07  suv789  阅读(460)  评论(0)    收藏  举报