You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务端SQL脚本如何通过用户名密码校验查询users表对应行

实现方案

安全前置提醒

  • 绝对不要在生产环境明文存储用户密码,示例中的明文密码仅为演示用。上线前请将password字段内容替换为加盐哈希值(推荐使用bcrypt、PBKDF2等算法),验证时先对用户输入的密码做相同的哈希计算再匹配,避免数据库泄露后密码直接失窃。
  • C++客户端必须使用参数化查询访问数据库,禁止直接拼接SQL字符串,避免SQL注入漏洞。

基础查询实现

直接在WHERE子句中同时匹配用户名和密码,只有两者完全对应时才会返回age字段,否则返回空结果:

-- ? 为参数占位符,分别对应客户端传入的用户名、密码参数
SELECT age 
FROM users 
WHERE username = ? AND password = ?;

效果验证

  • 传入username=johnny、password=Abcd123!:返回031
  • 传入正确用户名+错误密码/错误用户名+任意密码:返回空结果,无数据泄露

更高安全级别的存储过程实现

如果需要进一步限制客户端权限,避免客户端直接访问users表,可以将校验逻辑封装为服务端存储过程,仅给客户端开放存储过程的调用权限:

-- MySQL 存储过程示例
DELIMITER //
CREATE PROCEDURE QueryUserAge(
    IN input_username VARCHAR(50),
    IN input_password VARCHAR(255),
    OUT result_age VARCHAR(3)
)
BEGIN
    SELECT age INTO result_age
    FROM users
    WHERE username = input_username AND password = input_password;
END //
DELIMITER ;

调用方式

-- 调用存储过程查询
CALL QueryUserAge('johnny', 'Abcd123!', @age_result);
SELECT @age_result;

额外权限控制建议

可以在数据库层面为客户端使用的账号配置最小权限:

  • 撤销该账号对users表的所有查询、修改权限
  • 仅开放QueryUserAge存储过程的执行权限
    就算客户端被篡改,也无法直接拉取全表数据,进一步保障age字段的安全性。

内容的提问来源于stack exchange,提问作者OwenPT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:36:06