MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【保存版】MySQLのrootユーザーから失われた全権限を復元する方法

MySQLのrootユーザーから権限が失われてしまった場合でも、UPDATE文を使えば全権限を復元することができます。本記事では、rootユーザーの特権(Super_priv)や権限委譲権限(Grant_priv)を復旧させる具体的な手順を解説します。

手順1:mysqldを--skip-grant-tablesオプションで再起動する

まず、現在稼働しているmysqld(MySQLサーバー)を停止します。その後、--skip-grant-tablesオプションを付けて再起動してください。このオプションを指定すると、権限テーブル(grant tables)が読み込まれずにサーバーが起動するため、認証なしでログインできるようになります。

次に、mysqlクライアントでサーバーに接続します。このとき、パスワードを求める-pオプションは不要で、ユーザー名の指定も省略できる場合があります。

# mysqldを停止
$ systemctl stop mysqld

# --skip-grant-tablesオプション付きで起動
$ mysqld_safe --skip-grant-tables &

# 認証なしで接続
$ mysql

手順2:UPDATE文でrootユーザーの権限を復元する

mysqlクライアントに接続したら、以下のSQLを実行してrootユーザーに全権限を付与します。

mysql> UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root';
Query OK, 0 rows affected (0.04 sec)
Rows matched: 1  Changed: 0  Warnings: 0

このコマンドでは、以下の2つの重要な権限フラグを「Y」に設定しています。

  • Grant_priv = 'Y':他のユーザーへ権限を付与(GRANT)できる権限
  • Super_priv = 'Y':スーパー特権(サーバー管理に関する強力な権限)

手順3:FLUSH PRIVILEGESで権限情報を再読み込みする

最後に、FLUSH PRIVILEGESコマンドを実行して、変更した権限テーブルの内容をサーバーに反映させます。これにより、メモリ上の権限キャッシュが更新され、新しい設定が即座に有効になります。

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.18 sec)

注意点

--skip-grant-tablesモードでは誰でも認証なしでデータベースにアクセスできてしまうため、作業中はサーバーを外部ネットワークから隔離するか、--skip-networkingオプションを併用することを推奨します。権限の復元が完了したら、必ず通常モードでmysqldを再起動してください。

  1. MySQLルートパスワードをリセットまたは変更する方法【ALTER USERコマンド解説】

    MySQLのrootパスワードをリセットまたは変更するには、まず管理者モードでMySQLにログインする必要があります。ログイン後、mysqlデータベースに切り替えて、登録されているすべてのユーザーとホスト情報を確認できます。 1. ユーザー一覧の確認 以下のクエリを実行して、現在存在するユーザーとホストの一覧を表示します。 SELECT user,host FROM user; 実行結果は次のとおりです。 +------------------+-----------+ | user | host | +------------------+------

  2. Macでrootユーザーを有効にする方法|ターミナルとディレクトリユーティリティの手順を解説

    macOSでは、管理者アカウントでログインしていても、システムの一部の領域には既定ではアクセスできないようになっています。しかしrootユーザーを有効にすれば、ファイルシステム全体に対する読み書き権限が得られます。他のユーザーアカウントのファイルにもアクセスできるため、ログイン情報を忘れてしまった場合や、退職者が会社支給のMacのログイン情報を残さずに去ってしまった場合などに非常に役立ちます。 ただし、rootユーザーを有効にするとMacを完全にコントロールできる反面、誤操作によってシステムを壊してしまうリスクも格段に高まります。Appleがrootアクセスを既定で無効にしているのはまさにこ