WordPressのサイトを構築した制作者が廃業して、あるいは連絡が取れなくなって、管理者権限を持つWordPressユーザーアカウントがわからなくなった、なんてことはありませんか?
別の人が作ったWordPressを修正して欲しいと依頼され、WordPressのアカウント情報を貰ったが、編集者権限だった・・・クライアントはそれしか知らされていなかった・・・あるあるですよね?
・・・少なくとも私は過去5回以上この相談を受けてます。
管理者権限をもつWordPressユーザのユーザ名やパスワードがわからなくなった場合に、力技でサルベージする方法をご紹介します。
1.データベースを操作可能な場合
大抵のレンタルサーバは、管理画面からphpMyAdminにログインできるようになっていると思います。
その際、DBのユーザ名とパスワードが必要ですが、FTPなりでWordPressがインストールされているディレクトリ直下の、wp-config.php を見れば記載されています。
そこに書かれている、DB名と、テーブル接頭辞も確認しましょう。
該当のDBの、(接頭辞)_users テーブルを開きます。
これが全ユーザの一覧です。
通常はID=1のユーザが特権管理者ですので、こいつを乗っ取りましょう。
user_login の値がユーザ名です。
user_pass にパスワードが入っていますが、ハッシュ化されているので、解読は不可能です。
ですが強制変更はできます。パスワードを知っているユーザの user_pass をコピーして、管理者の user_pass に貼り付けてしまえば、そのパスワードでログインできます。
パスワードを知っているユーザがない場合、管理者ユーザの user_email を自分が受信できるメールアドレスに書き換え、ログイン画面の「パスワードを忘れた方」から、再発行する方法もあります。
2.データベースを操作できない場合
そもそもそんなケースは考えにくいのですが、あるとすれば、
(i) サーバのコンパネがわからない
→サーバの契約者である限り、サーバのコンパネは何らかの方法で再入手できるはずですが、まぁ時間がかかる場合もあるでしょう。
(ii)サーバのコンパネにphpMyAdminがない
→FTPなりでサーバに繋げるなら、phpMyAdminを自力でインストールすればいいわけで。あるいは、外部からの接続が許可されているなら、ローカルマシンのSQLクライアントから接続すればいいわけで。まぁユーザひとつ作るのにそこまで手間を掛けたくない場合もあるでしょう。
(iii) WordPressがSQLiteで動いている
→こういう案件に限ってまぁまぁある。DB Browser for SQLite のようなGUIツールももちろん存在するわけですが、私はSQLiteだった時点で強硬手段に切り替えます。メンドクサイ。
さて、前置きが長くなりましたが、強硬手段です。
テーマファイルをいじって、無理やり新しい管理者権限ユーザを作ります。
A 何らかのWordPressユーザで管理画面にログインできる場合
functions.phpに以下のように追記して、管理画面内の任意のページにアクセスします。
1 2 3 4 5 6 7 8 9 10 11 12 |
function salvage_admin() { $userdata = array( 'user_login' => 'newadmin', //作成したい管理者ユーザのユーザ名 'user_pass' => 'new1234', //作成したい管理者ユーザのパスワード 'user_email' => 'new@example.com', //作成したい管理者ユーザのメールアドレス 'role' => 'administrator', ); $result = wp_insert_user( $userdata ) ; var_dump( $result ); die(); } add_action( 'admin_init', 'salvage_admin' ); |
int(3) のように表示されれば成功です。数字は作成された管理者ユーザのIDです。
失敗した場合は、その理由が表示されます。だいたいは、ユーザ名が既に存在するか、メールアドレスが既に使用されているか、どちらかでしょう。
成功したら、上記のコードは、直ちに削除してください。
B. WordPressユーザが全くわからない場合
functions.phpに以下のように追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function salvage_admin() { if (!empty($_GET['salvage_admin_secret'])) { $userdata = array( 'user_login' => 'newadmin', //作成したい管理者ユーザのユーザ名 'user_pass' => 'new1234', //作成したい管理者ユーザのパスワード 'user_email' => 'new@example.com', //作成したい管理者ユーザのメールアドレス 'role' => 'administrator', ); $result = wp_insert_user( $userdata ) ; var_dump( $result ); die; } } add_action( 'init', 'salvage_admin' ); |
salvage_admin_secret の部分は何でもいいのですが、一般の訪問者がうっかりアクセスすることのないようなパラメータにしてください。
そして、http(s)://(サイトのURL)?salvage_admin_secret=1 にアクセスします。
int(3) のように表示されれば成功です。数字は作成された管理者ユーザのIDです。
失敗した場合は、その理由が表示されます。だいたいは、ユーザ名が既に存在するか、メールアドレスが既に使用されているか、どちらかでしょう。
成功したら、上記のコードは、直ちに削除してください。