我可以通过mysql -u myuser -p mydb -h localhost
以下方式登录:
grant all privileges on mydb.* to myuser@'%' identified by
'1234567890123456789012345678901234567890123456789012345678901234567890123456789';
但不是在我这样做之后:
grant all privileges on mydb.* to myuser@'%' identified by
'12345678901234567890123456789012345678901234567890123456789012345678901234567890';
数据库密码 79 个字符的硬性限制来自哪里?
正如 Mircea Vutcovici 所述,密码仅在散列后存储,这意味着存储时它将具有固定长度。
即,应该有这样的限制并不明显。
mysql
我相信遇到的可能是客户端应用程序专门施加的限制。该
get_tty_password
函数似乎将密码读入char buff[80];
,这意味着 79 个字符 + 空终止。https://github.com/MariaDB/server/blob/b4fb15ccd4f2864483f8644c0236e63c814c8beb/mysys/get_password.c#L155
(如果您使用不同的客户端,是否存在限制?)
存储的密码基于所提供密码的SHA-1哈希字符串。它们没有加密,而是经过哈希处理。这意味着所有密码在 mysql.user 表中具有相同的长度。
将存储的哈希值与上面计算的哈希值进行比较:
对于“本地主机”,您需要添加:
您还需要添加此授权,因为 '%' 与 'localhost' 连接不匹配。
要连接,您需要在命令行中提供密码以克服 MySQL 客户端中 @Håkan Lindqvist 提到的 80 个字符的限制。