Mac+MariadbでAccess denied for user 'root'@'localhost'
現象
Mac(M1)にhome brewからmariadbをインストール。rootで接続しテーブルとユーザーを作成後、GRANTしようと思ったらAccess denied for user 'root'@'localhost' database ***
で権限付与できない。
mysql -u root mysql
CREATE USER 'profit-admin'@'localhost';
CREATE DATABASE IF NOT EXISTS `dev-profit` DEFAULT CHARACTER SET utf8;
GRANT ALL ON `dev-profit`.* to 'profit-admin'@'localhost';
Access denied for user 'root'@'localhost' database dev-profit
という感じです。
今まではrootが自動的に特権ユーザーになっていて、なんでも出来たんですが、バージョンの問題か、何か手順がもれたのか原因はいまいちはっきりしてません。
構成はこんな感じです。
- macOS 12.0.1
- Homebrew 3.3.9
- Server version: 10.6.4-MariaDB Homebrew
解決した手順
sudo mysql -u root
DROP USER 'root'@'localhost';
CREATE USER 'root'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
flush privileges;
※ 2023/01/28、mariadb再インストールして同じトラブルでスッキリした状態から試して、余計な作業を消しました。rootを一度消さないでGRANTだけを実行していけそうな気がしたんですけど、それだとダメでした。
解説(というか感想)
Access denied for user 'root'@'localhost'
で検索するといっぱい情報が出てくるけど、どれをやってもダメでイライラいました😝
多いのはmysqld_safe --skip-grant-tables
で起動してGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'
で行けるという奴。
ところがmysqld_safe --skip-grant-tables
で起動するとuse mysql
すらできない。これはdatadir
の指定で見えるようになりました。
さらにGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'
するとThe MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
というエラーになってできませんでした。正直これを突破した原因はいまいちわかってないのですが、mysqld_safe --skip-grant-tables
で起動後にflush privileges
を実行したからか、sudo mysql -u root
で接続したからか、どっちかだと思います。
でGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'
が実行できたのですが、目的のテーブルにgrantしようと思ったら相変わらず下記のエラーが。
Access denied for user 'root'@'localhost' database dev-profit
最終的に以下のコマンドでできるようになりました。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
とWITH GRANT OPTION
をつけてやる必要があります。
こちらのサイトで情報見つけました。ありがたや。ありがたや。
Discussion