TL;DR
| version | passwordカラム(CHAR(41) NOT NULL) | authentication_stringカラム(TEXT NULL) | pluginカラム | 認証プラグインの選択 |
|---|---|---|---|---|
| 5.0.96 | パスワードハッシュ | カラムなし | カラムなし | ダイジェスト長 |
| 5.1.73 | パスワードハッシュ | カラムなし | カラムなし | ダイジェスト長 |
| 5.5.62 | パスワードハッシュ | 常に空文字 | 認証プラグイン | pluginカラム、空文字列の場合はダイジェスト長 |
| 5.6.42 | SHA256プラグイン以外のパスワードハッシュ | 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_passwordとmysql_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では同じ名前の
- MySQL 8.0の
sha256_passwordプラグインと同じものだとすると、パスワードハッシュが$5$から始まる66桁になるので、Password CHAR(41) NOT NULLには入らずAuthentication_string TEXTに入れることになったのかなpasswordカラムの長さを変えるのはリスキーだなって感じで
- MySQL :: MySQL 5.6 Reference Manual :: 6.5.1.4 SHA-256 Pluggable Authentication
- MySQL 8.0では
sha256_passwordと同じく256bitのSHA2を使うcache_sha2_passwordがデフォルトになるのもあって、この時点までにpasswordカラムがなくなってauthentication_stringに一本化されるのは確定だっただろうから、ちょっと前倒ししてMySQL 5.7で消すことにしたんじゃないかなと思う。
動作とかの部分はそれなりに調べたけど、経緯の部分は想像しているだけで裏付けとかはないです。
0 件のコメント :
コメントを投稿