WordPressの管理者ログイン名の変更

管理者ID 0

WordPressサイトで管理者のログイン名の探し方として有名なのがURLに/?author=1を付けるもの。
これは本来は作者(の内部番号が)1番の人の記事のアーカイブを表示するためのURL。
WordPressではAuthor(記事の作者) = ユーザーなのでauthor=1はユーザーID=1と同じになる。
そして、多くのWordPressサイトではインストール時に登録したID=1のユーザーが管理者。

管理者ID 1
http://example.com/?author=1
ブラウザでこんな風にURLを指定して[Enter]。

管理者ID 2
すると、このようにURLが表示される。
http://example.com/archives/author/foobar

パーマリンク設定によってURLの構造が微妙に違うかもしれないが、上の画像のようにURLの最後の赤字部分(実際は赤字ではない)が一般に管理者のログインIDだと思われているもの。事実、多くのWordPressのサイトではこの部分が本当に管理者のログイン名なので、悪いヤツにとっては後はそのログインパスワードを探すだけとなる。これでパスワードが簡単なものだと目も当てられない。

管理者ID 3
これはユーザー管理画面でユーザーを表示したもの。
何でそうなっているのかよく解らないんだけど、WordPressでは登録した「ユーザー名」(ログイン名)を変更することができない。(少なくともWordPressの管理者画面の標準機能では)

ID
user_login
user_pass
user_nicename
user_email
user_url
user_registered
user_activation_key
user_status
display_name

これはWordPressのデータベースのwp_usersテーブルのカラム。
これも謎だけどWordPressではユーザーを登録するとユーザー名(ログイン名)であるuser_loginと同じ値がuser_nicenameに登録される。どちらも管理画面からは変更することができないのでユーザーが登録されてから削除されるまで基本的には同じ値で併存することになる。user_loginは変更できないということになっているので普通なら変わることがないのだが、user_nicenameはどういう時に書き換えられることになっているのか不明。こちらもたぶん書き変わらない。
そして、最初に挙げた「URLから管理者のログイン名を探す」という方法で表示される管理者のログイン名と思われるものは実はuser_loginではなくuser_nicenameの値。

ということは、管理者のuser_nicenameを書き換えてやれば管理者ログイン名とは違うものを管理者ログイン名であるかのように表示させることができる。

SQLクエリ
update wp_users set user_nicename ='hoge' where ID = 1;

IDが1がWordpressで最初に作成される管理者のID。
このレコードのuser_nicenameの値をhogeに書き換える。
実際には「admin」などの管理者ログイン名っぽいものにしておく方が未対策っぽく見えて良いだろう。

でも、既に公開しているサイトなら誰かに管理者ログイン名を見つけられているかもしれないので管理者ログイン名であるuser_loginの側を変更してしまう方が実はオススメだったりする。

SQLクエリ
update wp_users set user_login = 'hoge' where ID = 1;

IDが1のレコードのuser_loginの値をhogeに書き換える。
もちろん他のユーザーのログイン名も変更して構わないけどユーザーへの通知はお忘れなく。

WordPressでは、一応ユーザーのログイン名は変更できないということになっているので無理やり変更すると何か不具合があるのではないかと心配していたが、多くのサイトで実際に変更してみて今まで何か不具合が起きたことがないので問題ないと思われる。

ただし、書き換えた直後はサイト側ブラウザ側の両方でキャッシュを削除する方が良い。キャッシュが残っていると不具合があるかもしれない。

ログイン名の変更が今後も絶対に不具合の元にならないという保証はできないので「変更推奨」にはしないけど紹介まで。

関連記事: