当前位置: 首页 > 面试题库 >

MySQL密码哈希方法旧与新

范修伟
2023-03-14
问题内容

我正在尝试从位于slicehost(两个不同的托管公司)的服务器中的php脚本连接到dreamhost上的mysql服务器。我需要这样做,以便可以将slicehost上的新数据传输到dreamhost。使用转储不是一种选择,因为表结构不同,我只需要传输一小部分数据(每日记录100-200条),问题是我在slicehost和dreamhost上使用了新的MySQL密码哈希方法使用旧的,所以我得到

$link = mysql_connect($mysqlHost, $mysqlUser, $mysqlPass, FALSE);

Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authenticathtml" target="_blank">ion
Warning: mysql_query() [function.mysql-query]: Access denied for user 'nodari'@'localhost' (using password: NO)

事实:

  • 我需要在slicehost上继续使用新方法,并且我不能使用较旧的php版本/库
  • 数据库太大,无法每天通过转储进行传输
  • 即使我这样做,表的结构也不同
  • 我只需要每天复制一小部分(仅更改当天的记录,100-200条记录)
  • 由于表是如此不同,我需要使用php作为桥接来规范化数据
  • 已经用谷歌搜索了
  • 已经与两个支持人员进行过交谈

对我来说,更明显的选择是在dreamhost上开始使用新的MySQL密码哈希方法,但他们不会更改它,而且我不是root用户,所以我自己无法做到这一点。

有什么好主意吗?

通过VolkerK建议:

mysql> SET SESSION old_passwords=0;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT @@global.old_passwords,@@session.old_passwords, Length(PASSWORD('abc'));
+------------------------+-------------------------+-------------------------+
| @@global.old_passwords | @@session.old_passwords | Length(PASSWORD('abc')) |
+------------------------+-------------------------+-------------------------+
|                      1 |                       0 |                      41 |
+------------------------+-------------------------+-------------------------+
1 row in set (0.00 sec)

现在显而易见的事情是运行mysql> SET GLOBAL old_passwords = 0; 但是我需要超级特权才能做到这一点,他们不会给我

如果我运行查询

SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');

我得到错误

ERROR 1044 (42000): Access denied for user 'nodari'@'67.205.0.0/255.255.192.0' to database 'mysql'

我不是根…

dreamhost支持人员坚持说,问题出在我的头上。但是他说他将运行我告诉他的任何查询,因为它是一台私有服务器。因此,我需要准确地告诉这个人要运行什么。所以,告诉他跑

SET SESSION old_passwords=0;
SET GLOBAL old_passwords=0;
SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');
grant all privileges on *.* to nodari@HOSTNAME identified by 'new password';

会是一个好的开始吗?


问题答案:

是的,那看起来像个强硬派。没有主机的合作,也没有更改密码格式或客户端库的能力,您将没有太多选择。

老实说,我的首选是抛弃Dreamhost。这可能是很多工作,但是如果它们将被使用旧的不兼容的东西卡住,它将继续成为问题。

如果不是这种选择,那么联合自动化流程又如何呢?您可以将Slicehost端的数据导出到CSV文件中,并将其压缩为Dreamhost所需的任何格式,然后将其上传到Dreamhost服务器。您可以在Dreamhost服务器上使用cron脚本,定期检查上传的文件并进行处理(确保在成功处理后将其移动或删除)。



 类似资料:
  • 我正在将一个站点切换到rails。这是一个拥有5万用户的大型网站。问题是,现有的密码哈希方法非常弱。我有两个选择: 1)切换到一个新的算法,为每个人生成随机密码,然后将这些密码通过电子邮件发送给他们,并要求立即更改 2)实现新算法,但使用旧算法,然后对结果进行哈希。例如: 密码:abcdef=算法1= 任何新密码都需要经过原始算法(md5),然后对结果进行哈希运算,如果这有意义的话?这有什么不利之

  • 每个人在建构 PHP 应用时终究都会加入用户登录的模块。用户的帐号及密码会被储存在数据库中,在登录时用来验证用户。 在存储密码前正确的 哈希密码 是非常重要的。密码的哈希操作是单向不可逆的,该哈希值是一段固定长度的字符串且无法逆向推算出原始密码。这就代表你可以哈希另一串密码,来比较两者是否是同一个密码,但又无需知道原始的密码。如果你不将密码哈希,那么当未授权的第三者进入你的数据库时,所有用户的帐号

  • 我是在阅读了一些关于php中会话管理的主题后开始进行安全讨论的,请查看:https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-termer-persistence#title.2 引自章节:胡椒还是不胡椒? 一个更好的解决方案是,在将散列插入数据库之前对其进行加密,如果使用硬件分离,这种解决方案尤其有用。有了这

  • 问题内容: 我正在寻找一种使用mongoose将帐户保存到MongoDB的好方法。 我的问题是:密码是异步哈希的。设置器将无法在这里工作,因为它只能同步工作。 我考虑了两种方法: 创建模型的实例,并将其保存在哈希函数的回调中。 在“保存”上创建一个预钩子 这个问题有什么好的解决办法吗? 问题答案: mongodb博客上有一篇很棒的文章,详细介绍了如何实现用户身份验证。 http://blog.mo

  • 多亏了最近一篇文章中的一些好建议,我才从中实现了PBKDF2https://defuse.ca/php-pbkdf2.htm进入一个小的PHP图像库,我正在建设教自己一些PHP。 我知道您将salt和hash存储在数据库中,然后在用户输入密码时重新构建它们以匹配。我不明白的是,当上面网站上的validate_password函数为同一个密码生成不同的、唯一的salt时,它是如何工作的。 例如,我创

  • 行动时间 - 哈希我们的密码 我们将在此部分中使用更安全的哈希密码AVP替换用户文件中的Cleartext-Password AVP。 关于如何创建和呈现散列密码似乎存在一般性的混淆。 我们将帮助您澄清此问题,以便为每种格式生成工作哈希值。 OpenLDAP常见问题解答是帮助我们处理哈希值的有价值的URL: http://www.openldap.org/faq/data/cache/419.ht