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 即可运行)
-- 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 攻击为何如此猖獗?——三大“温床”正在蔓延
-
“僵尸数据库”泛滥
很多中小企业(尤其本地制造业、律所、零售系统)仍在使用 SQL Server 2008/2012,这些版本早已停止支持,却仍暴露在公网提供老旧业务接口。 -
云上配置失误激增
迁移上云后,误将 Azure SQL VM 或阿里云 RDS 实例的安全组设为 0.0.0.0/0 开放 1433 端口,等于把保险柜钥匙挂在网上。 -
“sa 账户依赖症”难改
超过 70% 的内部应用仍硬编码使用sa账户连接数据库(来源:2025年 CSDN 企业安全调研),一旦泄露即全线失守。
💡 Mallox 勒索组织最新战术:
入侵后 不立即加密,而是潜伏 3–7 天,先窃取客户数据(如合同、身份证号),再以“不付赎金就公开数据”双重勒索——这比单纯加密更致命!
🛡️ 企业紧急自查与加固“三步走”(48小时内必须完成)
✅ 第一步:断外联 + 查痕迹(1小时内)
# 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.exe,powershell.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_owner、db_datareader、db_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 Jobs 和 PowerShell 脚本 自动化常见的安全任务,如权限审计、数据库备份、日志清理等。自动化不仅能提升效率,还能减少人为错误。
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 提供两种主要的身份验证模式:
- Windows 身份验证模式(推荐):使用操作系统的身份验证机制进行用户验证。该模式较为安全,因为它依赖于 Windows 的安全策略、密码管理和账户锁定策略。
- 混合模式身份验证:同时支持 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; -
备份策略和存储:
- 备份存储:备份文件应存储在物理上与数据库分开的存储介质中,并最好选择 异地备份 或 云备份,以应对灾难恢复场景。
- 备份验证:定期验证备份文件的完整性,确保备份文件没有损坏,并能成功恢复。
- 备份保留策略:根据法规要求和业务需求设置备份的保留时间。通常,对于全备份,可以保留至少 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 提供了内置的 查询分析器 和 执行计划查看器,用于实时分析和优化查询。

浙公网安备 33010602011771号