mysql / c ++连接器错误:使用旧(4.1.1之前)身份验证协议的连接被拒绝

时间:2013-10-21 19:40:40

标签: c++ mysql database

所以我是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. 对于使用readline 5.1的redhat-linux-gnu(x86_64),客户端版本为Ver 14.14 Distrib 5.1.69。这很奇怪,因为这比4.1.1
  3. 更新
  4. 我还安装了MYSQL / C ++ Connector 1.1。我下载了它的源代码并使用CMake构建它而没有错误。
  5. 我想一个简单的解决方法是从连接器中禁用“secure_auth”。但是,我不知道该怎么做。我可以从我的C ++代码中传递一些参数吗?

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

2 个答案:

答案 0 :(得分: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;并且对我有用。

答案 1 :(得分:0)

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

  1. 使用默认情况下未启用secure_auth的旧客户端
  2. 查找传递skip_secure_auth的位置(可能或可能不起作用)或
  3. 使用http://bugs.mysql.com/bug.php?id=75425上的单行修补程序修补您的客户端,以便secure_auth = FALSE正常工作
  4. 如果您可以使用.cnf文件进行连接,则选项2和3很容易。