› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
woshilala1988
V2EX  ›  MySQL

用户名和密码验证,用 count 语句怎么样?

  •  
  •   woshilala1988 · Aug 30, 2018 · 4235 views
    This topic created in 2948 days ago, the information mentioned may be changed or developed.

    条件直接写 where username=1 and passwod=1 用 count 判断数量,等于 1 代表 OK,等于 0 代表不 OK

    这样的验证方式有什么弊端吗? 我看很多人都是用 username 对比数据库用户名 对上后再对比密码

    哪种方式好一点呢?

    9 replies  •  2018-08-30 16:31:10 +08:00
    CabalPHP
        1
    CabalPHP  
       Aug 30, 2018
    因为 username 会建唯一索引,只检索一个条件,速度很快

    然后程序再校验下密码就可以了,特别是 现在都不用 md5 存密码了,用 sha 存密码不能简单的用 = 条件判断

    这么做性能好,减轻瓶颈处的压力。
    woshilala1988
        2
    woshilala1988  
    OP
       Aug 30, 2018
    @CabalPHP 感谢您的回复,意思是我这样的方式不适合 sha,只适合未加密或者 md5 的方式对吧.
    看来我的思想落伍了.
    CabalPHP
        3
    CabalPHP  
       Aug 30, 2018
    @woshilala1988

    恩 还有就是索引和性能问题,即使是 md5,密码字段不用加索引,减轻数据库(索引)体积和写入速度。

    密码校验交给程序做,释放一点点 mysql 的压力
    woshilala1988
        4
    woshilala1988  
    OP
       Aug 30, 2018
    @CabalPHP 好,感谢您的认真回复.
    chinvo
        5
    chinvo  
       Aug 30, 2018 via iPhone
    惊了你数据库存明文的?

    过去用 and 的写法会有注入问题,比如 username 传进来一个 username=1 -- 后面的密码验证就会被跳过

    而 SQL 支持的 hash 函数有限,不够灵活
    chinvo
        6
    chinvo  
       Aug 30, 2018 via iPhone
    另外 sha 也是可以直接等号判断的,但是 SQL 不一定支持(比如 sha256、sha512 目前支持度就不高),而 crypt、bcrypt 等自带盐的算法不能用等号
    geelaw
        7
    geelaw  
       Aug 30, 2018
    SELECT PWHASH, SALT FROM USERS WHERE USERNAME=$ARG1

    然后 $ARG1 传入你的用户名,拿回 PWHASH 和 SALT,再检查 F(PW, SALT) ?= PWHASH。现在较好的 practice 是用很慢的 F,只能忍受算一次的时间。

    @chinvo #5 这个跟是不是 AND 没关系,只要是交给数据库接口传参即可。
    ranoff
        8
    ranoff  
       Aug 30, 2018
    赞同#1,业务层的压力可以很容易的通过扩容解决,数据层就比较难办了
    casztg
        9
    casztg  
       Aug 30, 2018
    过来学习的,mark
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2595 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 07:03 · PVG 15:03 · LAX 00:03 · JFK 03:03
    ♥ Do have faith in what you're doing.