尝试使用 Windows OBDC 驱动程序连接到 MySQL 数据库时遇到问题。有很多关于显而易见的搜索结果......人们正在使用旧版本,但是,我不是。
mysqld 在 CentOS 6.4 32bit 上
./usr/libexec/mysqld Ver 5.1.69 for redhat-linux-gnu on i386 (Source distribution)
所以我不知道任何 4.1.1 之前的协议是从哪里来的。有任何想法吗?
尝试使用 Windows OBDC 驱动程序连接到 MySQL 数据库时遇到问题。有很多关于显而易见的搜索结果......人们正在使用旧版本,但是,我不是。
mysqld 在 CentOS 6.4 32bit 上
./usr/libexec/mysqld Ver 5.1.69 for redhat-linux-gnu on i386 (Source distribution)
所以我不知道任何 4.1.1 之前的协议是从哪里来的。有任何想法吗?
我想如果你问对了问题,就会更容易找到答案。
在这种情况下,“我的”问题与密码如何散列并存储在数据库中有关。旧密码以较短的哈希值存储,现已弃用。
几个重要的点:
mysql_upgrade 不能也不会升级密码,在某些版本中也不会发出警告,请参阅:http ://bugs.mysql.com/bug.php?id=65461 。
即使您拥有最新的服务器和客户端,也只需要一个旧客户端来创建旧密码,然后无论哪个客户端尝试使用它,您都会遇到该帐户的问题。
不同版本对这种情况的处理方式不同,因此您可以使用数据库中的一些旧密码,然后突然,无明显原因,一些帐户停止工作......这是因为不同版本选择处理这种情况的方式。
您无法升级密码。你必须知道它们是什么,你必须改变它们。
编辑:为了更清楚,您必须使用使用较长哈希的新客户端更改以较短哈希存储的密码。通过这样做,您将使用更长的哈希写入该帐户密码,此时不应再标记任何访问该帐户的尝试。如果问题反复出现,您应该在您的站点上寻找仍在使用已弃用的哈希长度编写密码的旧客户端。
MySQL Workbench 6.08 在管理服务器连接、连接选项卡、高级子选项卡中,您必须选中框“使用旧的身份验证协议”。
尝试安装旧版本驱动程序 3.51.30:http ://dev.mysql.com/downloads/connector/odbc/5.1.html#downloads 它适用于我的 Mysql Ver 5.0.24a-community
我在使用 Windows 的 ODBC 连接器连接到 Percona 5.5 服务器时遇到了这个问题。已secure_auth
禁用。
根据我的发现,与 MySql Workbench 不同,ODBC 连接器不支持对使用旧的 16 字节散列密码的登录进行身份验证的选项。有一个关于此的错误报告,但似乎受让人对功能请求感到/困惑(参见错误 #71234)。
我能够使用以下命令更新 mysql 登录以使用新的 41 字节哈希:
set old_passwords=0;
set password=password('yourpasswordhere');
正如我提到的,我们的服务器已secure_auth
禁用,这似乎导致password()
返回old_password()
结果。运行set old_passwords=0;
将使该password()
方法能够生成新的 41 字节哈希(在会话期间)。
远程尝试访问我的 MySQL 数据库时,我收到了类似的错误消息。使用 Directadmin,我很容易按照上面的建议更改了 MySql 数据库密码。这会使用较新的哈希方法自动生成密码。这立即解决了远程连接问题。
我找到了另一种解决方案,以防有人遇到这个问题-非常奇怪-
当我选中“允许进程内”时,即使 ODBC 系统 DSN 工作正常,我仍然收到错误消息。我假设因为我混合了 5.2(与运行良好的服务器)和 5.1 用于没有运行的服务器,SQL 共享进程,因为 5.1 驱动程序没有给出该错误。
如果你不能改变你的服务器,也许你可以改变你的客户端:http ://bugs.mysql.com/bug.php?id=75425