• 一个 SQL 同时验证帐号是否存在、密码是否正确


    近日偶尔看到一个很巧妙的 SQL 技巧,一个简单的 SQL 同时验证帐号是否存在、密码是否正确。之前从未曾想过这么做,也未曾见过别人这么做。虽是奇技淫巧,却真正所谓构思巧妙。如果用来面试考考别人,真的能够难倒一大片兄弟。好东西不敢独享,特公开与大家同乐。

    1 SELECT CASE WHEN p.encrypted_password =? THEN 1 ELSE 0 END
    2 FROM tm_app_user u, tm_app_user_credential p
    3 WHERE u.app_user_uuid = p.app_user_uuid
    4 AND (LOWER(u.user_sign_in_nm) = ? OR LOWER(u.email) = ?)

    解释:

    a. 如果用户名不存在,则查询结果是无数据

    b. 如果用户名存在,而密码不正确,则返回 0

    c. 如果用户名存在,而密码正确,则返回 1

    之所以把密码单独用一个表保存,是因为用户的其他信息(用户名、邮件、电话)与密码是两种不同性质的东西,系统架构师决定分开保存,有助于提醒程序员这种差别: 用户的其他信息可以查看,密码不能查看;用户的其他信息更改时可以看到更改前的数据,密码更改时不能看到更改前的数据;修改用户密码与修改用户其他信息,是两个不同页面。

    虽说程序员普遍有“文人相轻”的毛病(读书人互相瞧不起),但看到这个 SQL,不能不让人佩服。

    我已经将这种技巧,用于我们的折桂单点登录系统(http://zheguisoft.com)。下一 release 版本将会用上。

  • 相关阅读:
    hibernate怎么做分页
    JS+CSS带数字和左右按钮可控制切换的图片幻灯
    AOP下的权限控制实现
    Hibernate3和MyBatis(iBatis)的执行效率比较
    CKEditor/FCKEditor 使用-CKeditor 3.0.1 快速教程(含插入图片)
    用JS写CSS
    spring aop实现权限控制,路径控制
    sql server 同步复制要点
    千万别把自己当人才
    web.xml元素介绍
  • 原文地址:https://www.cnblogs.com/jacklondon/p/2321686.html
Copyright © 2020-2023  润新知