はじめに
FlaskアプリケーションからMySQLに接続しようとした際、「Host is not allowed to connect to this MySQL server」というエラーに直面することがあります。
このエラーは、MySQLのホスト制限によりアクセスがブロックされていることが原因です。
この備忘録では、実際に発生したエラーメッセージとその解決方法、そしてアプリケーション専用ユーザーの作成手順について記録しています。今後同様のエラーに遭遇した際、素早く対処できるようにまとめました。
接続エラーの原因と解決
mysql.connector.errors.DatabaseError: 1130: Host '192.168.1.5' is not allowed to connect to this MySQL server
このエラーメッセージのポイント:
MySQLサーバーがクライアント(この場合は 192.168.1.5
)からの接続を拒否しています。
これは MySQLユーザーのホスト制限 により、指定のIPアドレスから接続する許可がされていないためです。
解決方法:
以下のようにして 特定のホストまたは全ホスト('%'
)からの接続を許可 する必要があります。
CREATE USER 'flaskuser'@'%' IDENTIFIED BY 'flaskpass';
GRANT ALL PRIVILEGES ON flask_db.* TO 'flaskuser'@'%';
FLUSH PRIVILEGES;
必要に応じて、@'192.168.1.5'
のように、特定のIPからの接続だけを許可する設定も可能です。
アプリケーション専用ユーザー作成のベストプラクティス
MySQLのセキュリティを強化するには、rootユーザーを直接使わず、アプリケーション専用のユーザーを作成して接続するのが安全です。
ユーザー作成と権限付与
CREATE USER 'flaskuser'@'%' IDENTIFIED BY 'flaskpass';
GRANT ALL PRIVILEGES ON flask_db.* TO 'flaskuser'@'%';
FLUSH PRIVILEGES;
Flaskアプリ側の接続設定(app.py)
def get_db_connection():
return mysql.connector.connect(
host='192.168.1.11',
user='flaskuser',
password='flaskpass',
database='flask_db'
)
まとめ
このセットアッププロセスは、MySQLサーバーを本番運用に耐えうる状態へと近づける重要な手順です。特に匿名ユーザーの削除やテストDBの削除、パスワードの設定はセキュリティ強化に不可欠です。
また、アプリ専用ユーザーを作成して接続させることで、root権限の濫用を避けることができ、より安全な運用が実現できます。
今後は、これに加えてファイアウォールの設定やMySQLユーザー管理、外部アクセス制御なども含めて、より堅牢な構成を目指していきたいと思います!