MySQL|MariaDBインストール後の「Access denied for user 'root'@'localhost'」の件
「Access denied for user 'root'@'localhost'」の件でやたら「skip-grant-tables」が出てくるので正しく対応します
MariaDBのインストール後、初めてrootにログインを試みるも「Access denied for user 'root'@'localhost'
」と表示される件を対処する。MariaDBはもちろん、MySQLでもやり方は同じです。
まずはmysql
をsudo
で昇格して、ログインする。この時オプションは不要[1]。
sudo mysql
ログインできたら新しいパスワードを指定する[2]。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'あたらしいパスワード';
同じエラーが出ていない事を確かめる為に、exit
かquit
でmysql
を終了させる。
可能ならroot
のパスワード変更ではなく、別の一般ユーザーを新規作成したほうが望ましい。
次回からsudo
を使わず、-u root
、-p
オプションを付けてログインを試みる。
mysql -u root -p
パスワードが要求され、認証が通れば成功で鼻高だ!
Access denied
が発生するのか?
なぜ初っぱなからインストール直後にmysql
を、権限のないユーザーから操作するとソケット(mysql.sock
のような)が作成できないために発生する。
なので初回にクライアントをsudo
で昇格してやればで秒で解消できる件なのにググると
- ソケットを手動で作成(まだ分かる)
-
my.cnf
でソケットの作成場所変更(これもまだ分かる) - サービスを止めたりする(止めたことでソケットを作成できる権限を持ち合わせて無いので関係ない)
- やたら
skip-grant-tables
が出てくる(は?)
ご苦労なことだ。
マニュアルなんて読んでない
この問題への対処方は「MySQL :: MySQL 8.0 リファレンスマニュアル :: 6.2.21 MySQL への接続の問題のトラブルシューティング」にある。
検索すると各所でskip-grant-tables
での対処方法が出てくる。
それでも解決できるだろうが、サーバー止めたりと、長ったらしく回りくどい。
またmy.cnf
にskip-grant-tables
を追記しておくやり方もあるが、戻しておく旨を書いてないのはどうなんだ?
と言うことで記事をしました。
skip-grant-tables
is 何?
結局長いので「MySQL :: MySQL 8.0 リファレンスマニュアル :: B.3.3.2 root のパスワードをリセットする方法」見てね。
要略すると
- 権限を無視してすべてのデータベースに無制限アクセスを可能にする(怖い)
- リモート接続が無効化される
- 主にrootパスワードの初期化の際に使うオプション
-
-u
オプションを指定しないと現在ログインしてるユーザー名でDBにログインを試みようとするため。 ↩︎ -
SQL、
ALTER USER
については「MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.7.1.1 ALTER USER ステートメント」および「MySQL :: MySQL 8.0 リファレンスマニュアル :: 2.10.4 初期 MySQL アカウントの保護」を参照。 ↩︎
Discussion