SQL Server sa 暴露是什么
SQL Server 的 sa 账号历史上是默认的超级管理员账号,配合默认的 1433 端口,构成一组经典暴露组合。风险主要来自三点:sa 长期保留弱口令或从不轮换、数据库端口对超出应用范围的主机开放、以及 xp_cmdshell 等扩展存储过程被开启。最后一点尤其关键,它把数据库层的权限直接延伸到操作系统层,让一次数据库登录变成主机命令执行。
基本信息
| 默认端口 | TCP 1433(命名实例使用动态端口或 SQL Browser) |
|---|---|
| 关键账号 | sa(SQL 登录,混合认证模式下可用) |
| 风险配置 | xp_cmdshell 开启、端口对全网开放、sa 弱口令 |
| 推荐做法 | 优先 Windows 身份验证,无业务依赖时停用 sa |
典型使用场景
- 账号梳理:统计仍在使用 SQL 登录与 sa 的应用,评估迁移到 Windows 身份验证的可行性
- 核查 xp_cmdshell 等配置项状态,确认没有历史遗留的临时开启
- 防火墙层面把 1433 限制到应用服务器来源,取消整网段放行
- 为 sa 登录配置单独审计与告警,异常来源立即排查
- 备份与版本升级时复核配置项,避免迁移过程把旧配置一并带过来
配置核查(管理员侧)
配置核查(管理员侧)
# 列出 SQL 登录及其启用状态
sqlcmd -S 127.0.0.1 -Q "SELECT name, is_disabled FROM sys.server_principals WHERE type_desc='SQL_LOGIN';"
# 检查 xp_cmdshell 当前是否启用
sqlcmd -S 127.0.0.1 -Q "SELECT name, value_in_use FROM sys.configurations WHERE name='xp_cmdshell';"
# 关注点:sa 是否已停用、xp_cmdshell 是否意外处于开启状态
# Windows 身份验证优先,SQL 登录仅在确有必要时保留加固项与效果
| 加固项 | 效果 | 注意 |
|---|---|---|
| 停用 sa | 消除最常见的爆破目标 | 需先确认无应用依赖 |
| 强口令并轮换 | 降低弱口令命中概率 | 轮换需与应用配置同步 |
| 关闭 xp_cmdshell | 切断数据库到系统的升级路径 | 确需时按窗口临时开启 |
| 来源限制 | 只允许应用服务器访问 | 需同步核对命名实例端口 |
| 登录审计 | 异常登录可被发现 | 关注失败次数与来源分布 |
SQL Server 的协议端口可以在配置管理器中修改,但隐藏实例端口属于弱防护:来源限制与账号治理才是决定暴露程度的关键。
xp_cmdshell 把数据库权限延伸到操作系统:一旦该配置项处于开启状态,数据库账号口令泄露的后果等同于主机口令泄露。