数据库为什么是安全重灾区

应用的漏洞最终都会汇到数据库:数据库里存着用户密码、手机号、订单、身份证这些最敏感的数据。一旦被拖库,损失是直接且不可逆的。数据库安全不是单点功能,而是从输入、权限、存储、审计到备份的一整套防线。

本文核心知识点
  • 注入用参数化查询从根上防。
  • 权限账号只给必要的最小权限。
  • 脱敏展示层掩掉敏感字段。
  • 审计谁查了什么要可追溯。
数据库安全配图:蓝色渐变背景中央数据库圆柱罩在带对勾盾牌内,左侧锁孔方块,右侧斜向扫描光束,扁平科技插画
盾牌罩住数据库,正是安全把敏感数据保护在内的意象。

SQL 注入与参数化查询

SQL 注入是把用户输入拼进 SQL 字符串,攻击者输入一段恶意 SQL 改变语句语义。根治办法永远是参数化查询(预编译):用户输入只当数据、不当代码,绝不拼接字符串。ORM 框架默认参数化,但要警惕手写 SQL、动态表名绕过。

// 危险:拼接字符串
"SELECT * FROM u WHERE name='" + name + "'"
// 安全:参数占位
db.query("SELECT * FROM u WHERE name=?", [name])

账号权限最小化

应用连库的账号别用 root,按业务给最小权限:只读账号只 SELECT、结算账号只动相关表。一个被攻破的应用账号,权限越小能造成的破坏越小。定期清理不再用的账号,密码定期轮换。

敏感数据脱敏

手机号、身份证、银行卡在展示时要脱敏:手机号显示 138****1234、身份证只留前后几位。脱敏在应用层或查询层做,别让前端拿到全量敏感数据。导出报表、测试环境更要脱敏,防止从旁路泄露。