1

所以我是 C++/Mysql 的新手,如果我问一些愚蠢的问题,我很抱歉。

我遇到了从c ++连接mysql的错误

SQLException: Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

我阅读了许多针对此问题的现有解决方案,他们似乎建议使用一些更新的设置重新启动服务器。但是,我正在尝试连接到远程服务器,但我没有对该服务器的 root 访问权限。

以下是有关我的服务器、客户端和连接器的更多详细信息:

  1. 服务器版本为 5.5.32
  2. 客户端版本是 Ver 14.14 Distrib 5.1.69,用于 redhat-linux-gnu (x86_64) 使用 readline 5.1。这很奇怪,因为它比 4.1.1 更新
  3. 我还安装了 MYSQL/C++ Connector 1.1 。我下载了它的源代码并使用 CMake 构建它,没有错误。

我想一个简单的解决方法是从连接器中禁用“secure_auth”。但是,我不知道该怎么做。我可以从我的 C++ 代码中传递一些参数吗?

那么有人有什么建议吗?谢谢!

4

2 回答 2

1

我遇到了同样的问题,并通过使用Connector/C++ Connection Options解决了它。

sql::Driver *driver;
sql::Connection *con
driver = get_driver_instance();
sql::ConnectOptionsMap connectionProperties;

connectionProperties["hostName"] = sql::SQLString("tcp://192.168.0.10:3306");
connectionProperties["userName"] = sql::SQLString("root");
connectionProperties["password"] = sql::SQLString("password");
connectionProperties["useLegacyAuth"] = true;
con = driver->connect(connectionProperties);

确保你有connectionProperties["useLegacyAuth"] = true;,这对我有用。

于 2020-02-06T07:41:20.960 回答
0

Pre 4.1.1 指的是您尝试验证的密码。如果您无法更改它以使用更现代(更长)的方案,您可以尝试

  1. 使用默认情况下未启用 secure_auth 的旧客户端,
  2. 查找通过 skip_secure_auth 的位置(可能有效,也可能无效),或
  3. 使用http://bugs.mysql.com/bug.php?id=75425上的单行修复修补您的客户端,以便 secure_auth=FALSE 工作

如果您可以使用 .cnf 文件进行连接,则选项 2 和 3 很容易。

于 2015-01-06T16:16:26.020 回答