Quantcast
Channel: 日々の覚書
Viewing all articles
Browse latest Browse all 581

mysql.userテーブルの認証周りのカラムあれこれ

$
0
0

TL;DR

versionpasswordカラム(CHAR(41) NOT NULL)authentication_stringカラム(TEXT NULL)pluginカラム認証プラグインの選択
5.0.96パスワードハッシュカラムなしカラムなしダイジェスト長
5.1.73パスワードハッシュカラムなしカラムなしダイジェスト長
5.5.62パスワードハッシュ常に空文字認証プラグインpluginカラム、空文字列の場合はダイジェスト長
5.6.42SHA256プラグイン以外のパスワードハッシュSHA256プラグインの時のパスワードハッシュ認証プラグインpluginカラム、空文字列の場合はダイジェスト長
5.7.24カラムなしパスワードハッシュ認証プラグインpluginカラムのみ
8.0.13カラムなしパスワードハッシュ認証プラグインpluginカラムのみ

日々の覚書: MySQL 5.7.6でmysql.userテーブルのパスワードのカラム名がなんか変わったで「MySQL 5.7ではパスワードハッシュが格納されるカラムが passwordから authentication_stringに変更になった」としていたけれど、ちょっと調べてみたらなんかそれなりに歴史的経緯っぽいものがありました。
  • 旧来(MySQL 5.0, 5.1)は2種類の認証プラグイン( mysql_native_password = 俗称41桁ハッシュ、 mysql_old_password = 俗称16桁ハッシュ) があったが、それを識別するための pluginカラムは無く、「クライアントから送られてきたダイジェストの長さ」でどちらのプラグインを使うか決めて passwordカラムに入っているパスワードハッシュを引き出して使っていた
  • MySQL 5.5から pluginカラムが追加される。これは5.5で「認証プラグインAPI」を解放した時に一緒に実装されたのだと思う。
    • MySQL :: MySQL 5.5 Reference Manual :: 6.5.1 Authentication Plugins
    • たぶん過渡期の例外措置として、 pluginが空文字ならば旧来と同じダイジェストの長さによって mysql_native_passwordmysql_old_passwordを打ち分ける実装になっている
    • authentication_stringカラムも実装されたけど、この時点でこのカラムを使っているっぽい認証プラグインは少なくともコミュニティー版のソースコード上にはない。
  • MySQL 5.6では商用版限定ながら sha256_passwordプラグインが登場する。
    • MySQL :: MySQL 5.6 Reference Manual :: 6.5.1.4 SHA-256 Pluggable Authentication
      • MySQL 8.0では同じ名前の sha256_passwordプラグインがコミュニティー版でも使えるようになった。実装まで同じかどうかは知らない。
    • MySQL 8.0の sha256_passwordプラグインと同じものだとすると、パスワードハッシュが $5$から始まる66桁になるので、 Password CHAR(41) NOT NULLには入らずAuthentication_string TEXTに入れることになったのかな
      • passwordカラムの長さを変えるのはリスキーだなって感じで
  • MySQL 8.0では sha256_passwordと同じく256bitのSHA2を使う cache_sha2_passwordがデフォルトになるのもあって、この時点までに passwordカラムがなくなって authentication_stringに一本化されるのは確定だっただろうから、ちょっと前倒ししてMySQL 5.7で消すことにしたんじゃないかなと思う。
動作とかの部分はそれなりに調べたけど、経緯の部分は想像しているだけで裏付けとかはないです。

Viewing all articles
Browse latest Browse all 581

Trending Articles