MySQL認証プラグインエラーの解決法(macOS)
問題の説明
macOS環境でPython/Flaskアプリケーションを実行中、MySQLデータベースに接続する際に以下のエラーが発生する場合があります:
bash
MySQLdb.OperationalError: (2059, "Authentication plugin 'mysql_native_password' ...
dlopen(...): no such file")
主な原因と背景:
- MySQL 9.0では
mysql_native_password
プラグインが完全に削除 - XAMPP環境移行時によく発生(Windows→macOS)
- 他ツールでの接続可能 → 認証方式に起因するクライアント側エラー
- 根本原因:セキュリティ向上のため旧方式が非推奨に
影響環境:
- macOS(Homebrewインストール環境)
- MySQL 9.0以降
- Python MySQLクライアントライブラリ使用時
セキュリティ上の注意
mysql_native_password
は脆弱性が指摘され廃止されました。可能な限り新しい認証方式への移行を推奨します。
解決策1: 認証方式のアップグレード(推奨)
より安全なcaching_sha2_password
を使用する方法:
bash
# 1. 設定ファイル編集(管理者権限が必要)
sudo nano /opt/homebrew/etc/my.cnf
設定ファイルに以下を追記:
cnf
[mysqld]
skip-grant-tables # 一時的に認証を無効化
bash
# 2. MySQLサーバー再起動
brew services restart mysql
MySQLコンソールに接続:
sql
-- 3. 特権リフレッシュ
FLUSH PRIVILEGES;
-- 4. 旧プラグイン使用ユーザーを確認
SELECT User, Host, plugin FROM mysql.user
WHERE plugin = 'mysql_native_password';
-- 5. rootユーザーの認証方式変更例
ALTER USER 'root'@'localhost'
IDENTIFIED WITH caching_sha2_password BY 'new_secure_password';
最後に設定ファイルからskip-grant-tables
を削除し再起動:
bash
brew services restart mysql
メリット/デメリット
- ✅ 最新のセキュリティ規格に対応
- ❌ アプリコードの変更が必要(クライアント側が対応済みなら不要)
- ❌ 既存パスワードの再設定が必要
クライアント側の対応
Pythonではmysqlclient
やPyMySQL
最新版がcaching_sha2_password
をサポート:
python
# 接続例(変更不要な場合が多い)
db = pymysql.connect(
host='localhost',
user='root',
password='password',
database='test_db'
)
解決策2: MySQLのバージョンダウングレード
現実的な移行時間が必要な場合の一時的措置:
bash
# 1. 既存MySQLのアンインストール
brew uninstall mysql
# 2. MySQL 8.4インストール
brew install mysql@8.4
# 3. シンボリックリンク作成
ln -s /opt/homebrew/opt/mysql@8.4 /opt/homebrew/opt/mysql
# 4. パス設定(zshの場合)
echo 'export PATH="/opt/homebrew/opt/mysql/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# 5. 起動
brew services start mysql@8.4
動作確認コマンド
bash
mysql --version
# 期待出力: mysql Ver 8.4.0 for macos...
# プラグイン存在確認
ls /opt/homebrew/Cellar/mysql@8.4/lib/plugin | grep native_password
メリット/デメリット
- ✅ アプリ修正不要で即時対応可能
- ❌ セキュリティリスクが継続
- ❌ 将来のバージョンアップ時に対応が必要
トラブルシューティング
XAMPP固有の問題
XAMPPのMySQL管理インターフェースから実行:
sql
-- ユーザー認証方式変更
ALTER USER 'your_user'@'localhost'
IDENTIFIED WITH mysql_native_password;
変更反映エラー時の対処
- MySQLサービス完全再起動
- 権限の再読み込みを実行:sql
FLUSH PRIVILEGES;
- キャッシュクリア:sql
RESET QUERY CACHE;
推奨アプローチ
新規プロジェクト:
最初からcaching_sha2_password
を使用既存プロジェクト:
段階的移行プラン:
非推奨プラグインの継続利用リスク
mysql_native_password
の使用は以下の原因となる:
- 中間者攻撃への脆弱性
- パスワード推測攻撃のリスク増加
- 規制対応システムでのコンプライアンス違反
まとめ
認証方式 | 実行手順 | 用途 | 推奨度 |
---|---|---|---|
caching_sha2_password | ユーザー変更 | 新規/セキュリティ重視 | ★★★ |
mysql@8.4 | バージョン変更 | 緊急時/移行期間中 | ★★☆ |
最善策は新しい認証方式への移行ですが、移行困難な状況ではバージョンダウングレードで一時対応後、計画的に移行を進めてください。