mysql - 密码错误...?

标签 mysql authentication passwords case

我有一个用于存储程序登录信息的 MySQL 表。密码数据类型为 varchar。当我尝试登录我的密码时,它并不关心我的字符是小写还是大写。如果我输入正确的字母,它就会让我登录。这个问题的解决方案是什么?非常感谢您的帮助

最佳答案

发生这种情况是因为默认情况下 mysql 是 case insensitive :

mysql> create table foo (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, bar VARCHAR(20));
Query OK, 0 rows affected (0.12 sec)

mysql> insert into foo values ('','Hello'),('','hello');
Query OK, 2 rows affected, 2 warnings (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from foo where bar = 'hello';
+----+-------+
| id | bar   |
+----+-------+
|  1 | Hello |
|  2 | hello |
+----+-------+
2 rows in set (0.00 sec)

到目前为止,最简单的选择是不要以纯文本形式存储密码!对它们进行加密或散列并存储散列/加密值。

<小时/>

存储密码哈希的一种简单方法是使用内置的 md5 函数:

mysql> SELECT MD5('secret');
+----------------------------------+
| MD5('secret')                    |
+----------------------------------+
| 5ebe2294ecd0e0f08eab7690d2a6ee69 |
+----------------------------------+
1 row in set (0.40 sec)

那么,您的查询将是:

SELECT * FROM `sometable` WHERE `the_password` = MD5('secret');

请注意,这是一个单向哈希 - 也就是说,您实际上无法从哈希版本中获取单词 secret。因此,例如,您不能使用它在用户注册欢迎电子邮件中显示密码。

MySQL支持一些encryption and hashing functions您应该查看它。

关于mysql - 密码错误...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180718/

相关文章:

c# - 左边加入mysql数据库

PHP 安全登录 - 客户端选项?

node.js - 多个 Firebase 实例

spring-security - Spring ActiveDirectoryLdapAuthenticationProvider handleBindException - 提供的密码无效错误

php - 使用 HTTP POST 登录表单

passwords - 双盐用于散列密码?

php - 匹配两个表中的数据如果匹配..显示名称和消息

mysql - 按 find_in_set()、and_then、and_then 排序

mysql - [42S22][1054] 在选择中尝试计算时出现 'field list' 错误中的未知列

Java 登录错误,无法解析为变量