Laravel 5.4 で "root@localhost" ユーザーによるマイグレーションアクセス拒否問題:その他の方法
Laravel 5.4 で "root@localhost" ユーザーによるマイグレーションアクセス拒否問題:詳細解説と解決策
Laravel 5.4 でマイグレーションを実行しようとすると、"root@localhost" ユーザーでアクセス拒否エラーが発生する。
原因
この問題は、Laravel がデータベース接続時に root@localhost
ユーザーを使用するように設定されている一方で、MariaDB サーバーがデフォルトで root
ユーザーからのリモート接続を許可していないために発生します。
解決策
以下の手順で解決できます。
新しいデータベースユーザーを作成する
MariaDB コンソールにログインします。
mysql -u root -p
パスワードを入力してログインします。
新しいユーザーを作成します。
CREATE USER 'laravel'@'localhost' IDENTIFIED BY 'password';
password
を実際のパスワードに置き換えます。
新しいユーザーに権限を付与する
作成したユーザーに、Laravel データベースへのフルアクセス権を付与します。
GRANT ALL PRIVILEGES ON database_name.* TO 'laravel'@'localhost';
database_name
を実際のデータベース名に置き換えます。
権限を更新する
変更を反映するために、権限を更新します。
FLUSH PRIVILEGES;
.env ファイルを編集する
Laravel プロジェクトの .env
ファイルを開きます。
以下の 2 つの変数を新しいユーザーのクレデンシャルで更新します。
DB_CONNECTION=mysql
DB_USERNAME=laravel
DB_PASSWORD=password
マイグレーションを再度実行します。
php artisan migrate
補足
- より安全な方法として、
root
ユーザーではなく、専用のデータベース管理ユーザーを作成して使用する方が推奨されます。 password
は、強力で推測困難なパスワードを設定してください。- ローカル環境でのみこの手順を実行する必要があることに注意してください。本番環境では、適切なセキュリティ対策を講じてください。
Laravel 5.4 でのマイグレーションアクセス拒否問題を解決するためのサンプルコード
前提条件
- MariaDB サーバーがインストールされている
- Laravel プロジェクトが作成されている
使用方法
- 以下のコードを
migrate.sh
という名前のシェルスクリプトに保存します。
#!/bin/bash
# MariaDB コンソールにログイン
mysql -u root -p
# 新しいユーザーを作成
echo "CREATE USER 'laravel'@'localhost' IDENTIFIED BY 'password';" | mysql
# 新しいユーザーに権限を付与
echo "GRANT ALL PRIVILEGES ON database_name.* TO 'laravel'@'localhost';" | mysql
# 権限を更新
echo "FLUSH PRIVILEGES;" | mysql
# .env ファイルを編集
sed -i 's/DB_USERNAME=root/DB_USERNAME=laravel/g' .env
sed -i 's/DB_PASSWORD=/DB_PASSWORD=password/g' .env
# マイグレーションを実行
php artisan migrate
- スクリプトに実行権限を与えます。
chmod +x migrate.sh
./migrate.sh
注意事項
- このスクリプトはローカル環境でのみ使用してください。本番環境では、適切なセキュリティ対策を講じてください。
Laravel 5.4 での "root@localhost" ユーザーによるマイグレーションアクセス拒否問題を解決するその他の方法
環境変数を使用する
.env
ファイルで環境変数を使用してデータベース接続情報を設定することで、root
ユーザーを使用せずにマイグレーションを実行できます。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=laravel
DB_PASSWORD=password
MySQL Workbench などのグラフィカルツールを使用して、MariaDB サーバーに接続し、手動で新しいユーザーを作成して権限を付与することができます。
Laravel Forge などのデプロイメントツールを使用している場合は、ツール内でデータベースユーザーを作成して権限を付与することができます。
Docker を使用する
Docker コンテナを使用して MariaDB サーバーを実行している場合は、コンテナの設定ファイルで root
ユーザー以外のユーザーを使用するように設定できます。
laravel mariadb credentials