🛡️

Mac+MariadbでAccess denied for user 'root'@'localhost'

2021/12/22に公開

現象

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