Laravel Sailでmysqlにログインし、CREATE文などを打とうとした場合のエラー
ERROR 1044 (42000):Access denied for user ”sail@’*’ to database ‘test_database’
に対する対処法です。
目次
Laravel sailのmysqlでアクセスエラー(ERROR 1044(42000))
該当エラーではアクセスできないとあるが…
エラーの意味は、「データベースに対するアクセスが拒否されました」という意味です。
とはいえtest_databaseはCREATE文で作成しようとしている段階です。
つまり、ログインしたユーザーにデータベース操作権限がないことがエラーの原因だと分かります。
そこでユーザーの一覧をまずは表示してみました。
いつも通り「select * from mysql.user」を打ちましたが
ERROR 1045 (28000): Access denied for user ‘sail’@‘*’
で撃沈。
そもそもユーザー一覧も見れませんでした。
これらのエラーをもとに検索しましたが
- mysqlに入る際に-hで127.0.0.1を指定する
- mysqlのポート番号を3306から変更する
- configのキャッシュをクリアする
などがありましたが、どれも解決には至りませんでした。
現在MySQLにログインしているユーザーを確認する
そこで、とりあえず現在、どのユーザーでログインしているのかを確認します。
現在のユーザーについて調べるのは「select user(), current_user();」です。
結果は以下の通り
- user():sail@localhost
- current_user():sail@*
user()はログインしようとしたユーザー、current_user()は実際にログインしたユーザーです。
ホストをlocalhostで指定したのですが、そのホストは存在しないので、それ以外のホストで入っているようです。
そしてどうやら「sail@*」に全く権限がないように思えました。
そこで、ログインするユーザーを「sail」から「root」に変更します。
「root」は管理者の代表的なユーザーで、あらゆる権限を持ちます。
Laravel Sailの場合、変更する場所は一か所でOKです。
envファイルの中身を変更することで解決
.envファイルのうち、DB関連の場所に注目します。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=データベース名
DB_USERNAME=root ←sailから変更
DB_PASSWORD=password
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=データベース名
DB_USERNAME=root ←sailから変更
DB_PASSWORD=password
DB_USERNAMEの部分がsailになっているはずです。
ですのでここをrootに変更します。
ですのでここをrootに変更します。
Laravel Sailを使用している場合、「docker-compose.yml」でのDB関連の指定も.envを参照しているはずですので、気にしなくてOKです。
この状態で仮想環境を再起動します。
もしもdockerなどを使用しているなら、mysqlのUsernameがrootに変わったことを確認しましょう。
もしもdockerなどを使用しているなら、mysqlのUsernameがrootに変わったことを確認しましょう。
この状態で
sail mysql
を入力すれば権限を持ったrootユーザーでログインできます。
これでデータベースの作成なども容易に行えます。
これでデータベースの作成なども容易に行えます。
同じようなエラーが出ている方は参考にしてみてください。