MySQL で WordPress の管理者ユーザーを作成する方法

ダッシュボードなしで WordPress の管理者アクセスを復元する3つの方法: ページ読み込み時にアカウントを作成する mu-plugin(データベースツール不要)、phpMyAdmin または Adminer での2つの SQL クエリ、または同じ SQL クエリを MySQL のコマンドラインで実行する方法。

あなたの状況 最良の方法
FTP またはファイルマネージャーのアクセスのみ — データベースツールなし オプション1(mu-plugin)
phpMyAdmin、Adminer、cPanel のデータベースアクセス オプション2(SQL クエリ)
サーバーへの SSH アクセス オプション3(MySQL CLI)

MySQL 経由で管理者ユーザーを追加する必要がある理由

管理者アクセスは、いくつかの理由で失われることがあります:wp_usermeta の行を書き換える失敗した移行、まずいユーザー役割の変更、権限を破損させるプラグイン、または誤って削除されたアカウントなどです。WP STAGING のサポートチケットでは、締め出された管理者の最も多い原因は、wp_usermeta の役割割り当てを乱した失敗した移行です——これを直す方法を示します。

データベースで直接管理者ユーザーを作成することは、安全かつ可逆的です。何も削除されません——新しい行を挿入するだけです。WordPress のユーザーシステムはログインのたびにこれらのテーブルから読み取るため、新しいアカウントはクエリを実行した瞬間に利用可能になります。

WordPress の管理者ユーザー復元サービスが必要ですか? WP Staging Pro を入手する。当社の開発者が WordPress の管理者ユーザーを復元します!

始める前に:WordPress のテーブル接頭辞を見つける

3つの方法はいずれも、WordPress データベースのテーブル接頭辞を知っている必要があります。デフォルトは wp_ ですが、多くのホストや移行ツールがこれを変更します(たとえば wpstg0_abc_)。

サイトのルートにある wp-config.php を開き、次の行を見つけます。

$table_prefix = 'wp_';

下のすべての SQL 例で wp_ を、そこに見つけた値に置き換えてください。接頭辞は meta_key の値にも適用されます——接頭辞が wpstg0_ なら、権限キーは wp_capabilities ではなく wpstg0_capabilities です。

オプション1:mu-plugin で WordPress 管理者を追加する(データベースアクセス不要)

FTP または cPanel のファイルマネージャーのアクセスはあるがデータベースツールがない場合、必須使用プラグイン(mu-plugin)が最速の道です。wp-content/mu-plugins/add-admin.php に新しいファイルを作成し、このコードを貼り付けます。

PHP
/*
Plugin Name: Add admin account
Description: This adds an admin account into database
Author: WP STAGING
Version: 1.0
Author URI: https://wp-staging.com
*/

add_action('wp_loaded', function() {
  if (isset($_GET['add-admin'])) {
    $inserted = wp_insert_user([
    'user_pass' => 'password',
    'user_login' => 'username',
    'user_email' => 'test@example.com',
    'role' => 'administrator'
  ]);
  var_dump($inserted);
exit;
  }
});

user_passuser_loginuser_email を希望の値に変更します。https://example.com/?add-admin でサイトを開いてアカウント作成を起動し、新しい認証情報でログインします。

ログインしたらすぐに mu-plugin ファイルを削除してください。 残したままにすると、URL を知っている人なら誰でもあなたのサイトに管理者アカウントを作成できてしまいます。

オプション2:phpMyAdmin または Adminer で WordPress 管理者を追加する

データベースツール——Adminer または phpMyAdmin——を開き、SQL クエリのパネルに移動します。次の3つのクエリを順番に実行し、接頭辞と認証情報をあなたのサイトに合わせて更新します。

重要: wp_ 以外の別のテーブル接頭辞を使っている場合は、テーブル接頭辞も変更する必要があります!

ステップ1 — ユーザー行を挿入する。 選んだユーザー名、パスワード、表示名、メールアドレスに置き換えます。

INSERT INTO `wp_users` (`user_login`, `user_pass`, `user_nicename`, `user_email`,
`user_status`)
VALUES ('wpstaging', MD5('password123'), 'Rene Hermenau', 'support@domain.com', '0');

ステップ2 — 管理者の役割権限を割り当てる。

INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`)
VALUES (NULL, (Select max(id) FROM wp_users),'wp_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');

ステップ3 — レガシーのユーザーレベルを設定する(古いテーマやプラグインが参照します)。

INSERT INTO `wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, (Select max(id) FROM wp_users), 'wp_user_level', '10');
WordPress 用に SQL で管理者ユーザーを作成する方法
SQL Query

3つのクエリがすべて成功したら、wp-login.php に移動して新しい認証情報でログインします。

接頭辞が wp_ でない場合は、wp_userswp_usermetawp_capabilitieswp_user_level のすべての箇所で置き換えてください。たとえば接頭辞 wpstg0_ では、テーブル名は wpstg0_userswpstg0_usermeta になり、権限のメタキーは wpstg0_capabilities になります。

オプション3:MySQL コマンドラインで WordPress 管理者を追加する

SSH アクセスがある場合、MySQL コマンドラインはブラウザーベースのツールを必要とせずに、オプション2と同じ結果を生みます。SQL 文は同一で——インターフェースだけが異なります。

ステップ1 — MySQL サーバーに接続する。

mysql -u <username> -p

<username> をあなたの MySQL ユーザーに置き換えます。パスワードの入力を求められます。

ステップ2 — WordPress データベースを選択する。

USE <database_name>;

<database_name>wp-config.php のデータベース名(DB_NAME 定数)に置き換えます。

ステップ3 — 新しいユーザー行を挿入する。

INSERT INTO wp_users (user_login, user_pass, user_nicename, user_email, user_status)
VALUES ('<username>', MD5('<password>'), '<display_name>', '<email>', '0');

<username><password><display_name><email> をあなたの値に置き換えます。MD5() 関数はパスワードを暗号化します。ここでは強いパスワードを使い、あとで WordPress ダッシュボードから変更してください。

ステップ4 — 新しいユーザー ID を取得する。

SELECT ID FROM wp_users WHERE user_login = '<username>';

返された整数を控えておきます——次のステップで必要です。

ステップ5 — 管理者の役割を割り当てる。

INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
VALUES (<user_id>, 'wp_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');

<user_id> をステップ4で返された ID に置き換えます。

これで MySQL コマンドラインで新しい WordPress 管理者ユーザーを作成できました。選んだユーザー名とパスワードでダッシュボードにログインします。

トラブルシューティング:新しいアカウントが機能しない場合

それでもログインできない、またはアカウントがユーザーに表示されるのに役割が管理者ではなく購読者と表示される場合は、この3つの原因を順に進めてください。

誤ったテーブル接頭辞

最も多い間違いは、サイトがカスタム接頭辞を使っているのに wp_ でクエリを実行することです。wp-config.php の正しい接頭辞に置き換えて、INSERT と UPDATE のクエリを再実行します。meta_key の値も接頭辞に依存します:wp_capabilities<接頭辞>capabilities になります。たとえば wpstg0_capabilities です。

wp_usermeta 行の欠落

WordPress はログインのたびに wp_usermeta から wp_capabilities を読み取って役割を判定します。ステップ2(オプション2)またはステップ5(オプション3)が静かに失敗した場合——たとえば user_id のサブクエリが NULL を返したため——アカウントは wp_users に存在しますが役割がありません。INSERT INTO wp_usermeta のクエリを再実行し、再度ログインを試みる前に、行がテーブルに現れることを確認してください。

メールアドレスの重複による競合

既存のアカウントが、あなたが指定したメールアドレスをすでに保持している場合、INSERT は成功しますが、WordPress はログインの試行を古いアカウントに振り向けることがあります。まず SELECT user_email FROM wp_users を実行してそのメールがまだ使われていないことを確認するか、一意の復旧用メールアドレスを選んでください。

アクセスを復元したあと:WordPress のログインを堅牢にする

ダッシュボードに戻ったら、再びの締め出しを防ぐために数分かけてください:

  • 二要素認証を有効にする — 評判の良い 2FA プラグインを使えば、ブルートフォース攻撃や誤ったアカウント削除によって締め出されたままになる可能性がはるかに低くなります。
  • ユーザーの役割を監査する — ユーザー → すべてのユーザーに進み、たった今作成した復旧アカウントを含め、予期しない管理者アカウントがないか確認します。
  • 復旧アカウントのメールを更新するか、メインの管理者アカウントが正しく機能していることを確認したら削除します。
  • この復旧のために作成した mu-plugin をすべて削除する — アクセスを取り戻したらすぐに wp-content/mu-plugins/ から削除します。
  • 今後のデータベース操作の前に 完全なバックアップを取る — きれいなロールバックポイントを確保するためです。

この記事が、データベースで新しい管理者ユーザーを手動で作成する方法の理解に役立てば幸いです。まだ質問がある場合や不明な点がある場合は、ぜひ私たちにお問い合わせください。

Rene Hermenau

著者: Rene Hermenau

著者について: René Hermenau は WP STAGING の創設者です。WordPress のバックアップ、ステージング、移行、データベース処理、安全なデプロイメントワークフローに取り組んでいます。