Skip to content

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ではmysqlclientPyMySQL最新版が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;

変更反映エラー時の対処

  1. MySQLサービス完全再起動
  2. 権限の再読み込みを実行:
    sql
    FLUSH PRIVILEGES;
  3. キャッシュクリア:
    sql
    RESET QUERY CACHE;

推奨アプローチ

  1. 新規プロジェクト
    最初からcaching_sha2_passwordを使用

  2. 既存プロジェクト
    段階的移行プラン:

非推奨プラグインの継続利用リスク

mysql_native_passwordの使用は以下の原因となる:

  • 中間者攻撃への脆弱性
  • パスワード推測攻撃のリスク増加
  • 規制対応システムでのコンプライアンス違反

まとめ

認証方式実行手順用途推奨度
caching_sha2_passwordユーザー変更新規/セキュリティ重視★★★
mysql@8.4バージョン変更緊急時/移行期間中★★☆

最善策は新しい認証方式への移行ですが、移行困難な状況ではバージョンダウングレードで一時対応後、計画的に移行を進めてください。