web-dev-qa-db-ja.com

MYSQLエラー2049(HY000):使用されている古い(4.1.1より前の)認証プロトコル参照を使用した接続(クライアントオプション 'secure_auth'が有効)

5.0バージョンにあるすべてのデータベースダンプを5.6バージョンに復元しようとすると、復元され、その後再接続しようとすると、次のエラーが発生します。

ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol ref used (client option 'secure_auth' enabled)..

My.iniに次の行を追加してサービスを再起動しようとしましたが、問題はそれまで続きます。

skip-grant-tables次のリンクは、MYSQLのバグを示しています。

https://github.com/santisaez/powerstack/blob/master/packages/mysql/mysql-powerstack-secure_auth.patch

誰もがこのソリューションの修正を持っていますか?

9

これは、古くからあるハッシュアルゴリズムを使用したパスワードを持つユーザーアカウントを持っている場合のバグではありません。投稿したリンクに記載されているバグレポートを読んだ場合:

http://bugs.mysql.com/bug.php?id=69027

[5月1日15:24]トッドファーマー

これに対する回避策(実際には「解決策」)は、影響を受けるユーザーのパスワードを4.1以降のハッシュに変更することです。これは関係なく、実際に推奨されるベストプラクティスです。4.1より前のパスワードハッシュおよび認証プロセスには、顕著なセキュリティ上の制限があります( http://dev.mysql.com/doc/refman/5.0/en/passwordのドキュメントで説明されています)。 -hashing.html )。

mysqlスキーマの5.0バージョンを5.6サーバーに復元することは、とにかく悪い考えです。5.6にはいくつかのテーブルといくつかの完全に新しいテーブルに追加の列があります。ダンプファイルを作成したときにmysqldumpをどのように設定したか。すぐには表示されない他の問題が発生した可能性があります。

また、記事にskip-grant-tablesと記載されていませんでしたが、そのオプションをサーバーに正しく適用すると、すべての認証がバイパスされ、ログインしてパスワードをリセットできるはずです。

6

コマンドラインで、選択肢がない場合は、次のようなものを使用します...

mysql -uTheUseerNAme -pThePassword DbName -h HostName --skip-secure-auth

これがLinuxからの接続に関する私の問題だったので、これが誰かの役に立つことを願っています

8
ShaunOReilly

MySQL Workbenchを使用する場合は、このオプションを確認する必要があります。

enter image description here

6

これは実際には前の回答に対するコメントとして意図されていますが、StackExchangeコメントに収まらないほど大きすぎます。

私もこの問題に苦しんでいました。そこで、新しいスタイルのハッシュで新しいユーザーを作成し、その新しいユーザーを問題なく使用できるようにしました。これが私がしたことです:

    [172.16.2.222:mysql Thu Nov  7 16:16:25 2013]> use mysql;
    Database changed
    [172.16.2.222:mysql Thu Nov  7 16:22:23 2013]> describe user;
    describe user;
    +-----------------------+-----------------------------------+------+-----+---------+-------+
    | Field                 | Type                              | Null | Key | Default | Extra |
    +-----------------------+-----------------------------------+------+-----+---------+-------+
    | Host                  | char(60)                          | NO   | PRI |         |       |
    | User                  | char(16)                          | NO   | PRI |         |       |
    | Password              | char(41)                          | NO   |     |         |       |

私たちの[パスワード]列は、新しいスタイルのハッシュを保持するのに十分な幅になっているのを見てうれしかったです。 (幅が41文字未満の場合、幅を広げる勇気がなかったかもしれません:-)

    [172.16.2.222:mysql Thu Nov  7 16:13:10 2013]> show variables like '%pass%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | old_passwords   | ON    |
    | report_password |       |
    +-----------------+-------+
    2 rows in set (0.06 sec)

old_passwordsONであることは明らかに問題なので、一時的に変更しました。

    [172.16.2.222:mysql Thu Nov  7 16:13:59 2013]> set session old_passwords = 'OFF';
    Query OK, 0 rows affected (0.05 sec)

    [172.16.2.222:mysql Thu Nov  7 16:14:12 2013]> show variables like '%pass%';
    show variables like '%pass%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | old_passwords   | OFF   |
    | report_password |       |
    +-----------------+-------+
    2 rows in set (0.06 sec)

次に、新しいユーザーを作成しました。

    [172.16.2.222:mysql Thu Nov  7 16:14:16 2013]> create user 'erich' IDENTIFIED BY 'SEKRIT PASSWORD';

...そして新しいハッシュを見てみました:

    [172.16.2.222:mysql Thu Nov  7 16:14:26 2013]> select * from user order by User;
    +-----------+--------------+-------------------------------------------+--------
    | Host      | User         | Password                                  | Select_
    +-----------+--------------+-------------------------------------------+--------
    | localhost | someguy      | 3d9505dd323e53f1                          | Y      
    | %         | someotherguy | 79b3df3b004bb855                          | Y      
    | %         | erich        | *D2589EF6B59146801234567897BB190123456789 | N      
    | %         | anotheroldguy| 60577e0d77b9212b                          | Y      

私のハッシュが他のハッシュよりも大きいことに注意してください!

整頓するために、私はold_passwordsOFFに戻る。なぜだれもが古いパスワードを使用して新しいユーザーを作成したいのかとは思えないので、これはおそらく無意味です。

とにかく、これで解決しました。

1
offby1