● WordPressに紐付いたMySQLデータベースの、テーブルの接頭語(プレフィックス)の変更方法。「wp_」から「udon_5_」に変更する場合

ここでは、私たち素人にはちょっと難易度が高いですが、でも「勉強になる」、「人によってはこの方法しか選択肢が無い」、という場合のための接頭語の変更方法をご紹介します。

・ 「phpMyAdmin」でのデータベースへのログイン

まず「phpMyAdmin」でデータベースにログインします。
(「phpMyAdmin」は、もともと標準でレンタルサーバについている場合と、自分でインストールしなければならない場合があります。)

そのとき、「へえー」となってもし何か色々いじってしまったら、まずは必ず左側のツリーのトップのデータベース名をクリックします。
テーブル名などを押していると、このあとのSQL命令の実行ができませんので・・・。

・ テーブルの接頭語を変えるSQL命令の作成

左側のツリーのトップのデータベース名をクリックしたら、そのあと、右側の「SQL」タブを押します。

そして以下のようなSQL命令を貼り付けて、画面右下の「実行」を押します。

ALTER TABLE wp_commentmeta RENAME TO udon_5_commentmeta;
ALTER TABLE wp_comments RENAME TO udon_5_comments;
ALTER TABLE wp_links RENAME TO udon_5_links;
ALTER TABLE wp_options RENAME TO udon_5_options;
ALTER TABLE wp_postmeta RENAME TO udon_5_postmeta;
ALTER TABLE wp_posts RENAME TO udon_5_posts;
ALTER TABLE wp_siteguard_history RENAME TO udon_5_siteguard_history;
ALTER TABLE wp_siteguard_login RENAME TO udon_5_siteguard_login;
ALTER TABLE wp_termmeta RENAME TO udon_5_termmeta;
ALTER TABLE wp_terms RENAME TO udon_5_terms;
ALTER TABLE wp_term_relationships RENAME TO udon_5_term_relationships;
ALTER TABLE wp_term_taxonomy RENAME TO udon_5_term_taxonomy;
ALTER TABLE wp_usermeta RENAME TO udon_5_usermeta;
ALTER TABLE wp_users RENAME TO udon_5_users;

「udon_5_」のところを書き換えたい接頭語に置換してから、貼り付けます。

なお、このSQL命令は、画面左側に表示されたテーブル名、すべてに対して同じ命令文で処理を行います。

この命令の「ALTER TABLE」に続く名前は全部、変更前のテーブル名ですので、上記の命令の中にないテーブル名が、phpMyAdminの画面左側(ツリー)に存在したら足します。

ALTER TABLE 「変更前のテーブル名」 RENAME TO 「接頭語だけ変えたテーブル名」;
という構文で足します。最後の「;」を忘れないようにしてください。これが無いとエラーになります。

逆に余計なテーブル名があったら、その行は1行全部、消してください。
ちなみに、
ALTER TABLE wp_siteguard_history RENAME TO udon_5_siteguard_history;
ALTER TABLE wp_siteguard_login RENAME TO udon_5_siteguard_login;
のところは僕のデータベースのプラグイン用のテーブルです。
SITEGUARDプラグインを使っていなければ、phpMyAdminの画面の左側には、この「wp_siteguard_history」と「wp_siteguard_login」テーブルの名前は出ないはずなので、この行は消してください。

その他は全部、MySQLのデフォルトのテーブル名のようです。

さらにちなみに、ですが、デフォルトのテーブル名とデフォルトの「wp_」という接頭語のままだと、悪い人が「SQLインジェクション」というデータベース目的の不正攻撃をする場合に、テーブル名を知らなくても悪さできてしまうことになります。(「SQLインジェクション」とは、MySQLの欠陥をついて、ユーザー名とパスワードを知らなくてもデータベース内に侵入して悪さをする、という攻撃です。悪意の 「ALTER TABLE ・・・」みたいな命令を、ブラウザのURL入力欄から「注入(インジェクション)」してMySQLデータベースの中身を書きかえたりします。テーブル名が接頭語も本名も全部デフォルトだと、その悪意のSQL命令文を書くときにデフォルトのテーブル名をまんまで使えてしまうことになるので、書きやすい、侵入されやすい、まずい、ということなのです。)

だから、wp_ の部分だけでも変えて、テーブル名がバレないようにしなければなりません。
今ここでこのような作業をしているのは、そのような目的も理由の1つです。
(なお、レンタルサーバに「WAF」が標準装備でそれをONにして効いていれば、もしバレたとしても名前を変更したり、内容を見たりすることはできません。・・・のはずです。)

・ 1つめのSQL命令の実行

「実行」ボタンを押します。

「読み込んでいます・・・」~となって、
「成功しました」、みたいな内容のメッセージがテーブルの数だけ出てきたらOKです。
(phpMyAdminのバージョンによって、表示形式は違うかもしれません)

画面が何も変化しないときは失敗かもしれません。
失敗すると「実行」ボタンの下に赤いエラー表示が出ます。

・ SQL実行時にエラーになってしまう場合の対処法(WEFが原因?)

なお「実行」ボタンを押しても
「phpmyadmin error in processing request error code 403 text: Forbidden」みたいなエラーになるときは、レンタルサーバの「WAF」が原因で「アクセス禁止状態」になっているのが理由かもしれません。

参考:phpMyAdminで「403エラー」が表示される。
https://faq.zenlogic.jp/faqs/FAQ01203
引用→「phpMyAdminへのアクセス時に「403エラー」となる場合、WAF(WEBアプリケーションファイアウォール)によりアクセスが制限されている可能性があります。」

例えば、自分のレンタルサーバのWAFのログをみて、「SQLインジェクションからの防御18(alter):」といったようなログがあったら、やはりWAFが原因だと思います。

この「403 Forbidden」のエラーが出た場合のWAF対策としては・・・、

SiteGuard_User_ExcludeSig all

と1行だけ書いた「.htaccess」ファイルを、FTPソフトにて、phpMyadminのディレクトリのルートに配置してください。
(メモ帳でやらないようにご注意を・・・。Terapadなどのテキストエディタをお使いください。)
「WAF」をOFFにすればいだけでは?ということもありますが、レンタルサーバによっては(それともどこも?)、「WAF」はOFFにしてもそれが反映されるのが1時間くらい後の場合もあるから、です。
即刻、「アクセス禁止状態」と解きたい場合は、「.htaccess」ファイルを使うとそれができます。

なお「SiteGuard_User_ExcludeSig all」の部分は、レンタルサーバによって違うかもしれないし、複数行にわたる場合もあるかもしれないので、レンタルサーバ側に聞いてください。

「.htaccess」ファイルを配置できたら、その後、再度、SQLタブにて「実行」してみます。
WAFがエラーの原因の場合なら、多分成功すると思います。

・ さらなるSQLの実行

左側のツリーの接頭語がばらばらばらっと変更されていきます。

最初の命令実行が成功したら、その後再度「SQL」タブを押して・・・、

UPDATE udon_5_options SET option_name = 'udon_5_user_roles' WHERE option_name = 'wp_user_roles';
UPDATE udon_5_usermeta SET meta_key = 'udon_5_capabilities' WHERE meta_key = 'wp_capabilities';
UPDATE udon_5_usermeta SET meta_key = 'udon_5_user_level' WHERE meta_key = 'wp_user_level';

と3行書いて実行します。

成功したら、ブラウザに新規のタブを作成し、その中でWordpressへのログインテストをしてみます。

いつものログインURLで、いったん、ログインを試みます。
いつものログイン画面が出て、いつものユーザー名とパスワードでログインできたら成功のようです。

もしダメだったら、
https://mechalog.com/wp-prefix#title2
http://ysklog.net/wordpress/2025.html
http://wordpress-jp.info/tips/tp-change/

を参考にして、
「udon_5_options」と「udon_5_usermeta」の中の値で、「wp_」のままの値を探し、それを「udon_5_」に修正します。

ただ、漏れもあるかもしれないので、この2つのテーブルの中は一応、「udon_5_」に変更されているかをチェックします。
漏れがみつかったら、そこをダブルクリックすると、値が変更できます。
値を「wp_」から「udon_5_」に変えたら、Enterすれば確定されます。

今回のテスト作業では、「wp_dashboard_quick_press_last_post_id」 が漏れてましたので「udon_5_」に修正しました。

★成功したあとに絶対にやっておくべきこと

処理が終わったら、「.htaccess」ファイルを必ず消します。
「WAF」が効かない状態はまずいので・・・
逆に言うと、「WAF」が効いてることがこれで確認できましたので、あえてプレフィックスを変えなくてもいいのかもしれません。
操作に自信がない方は「WAF」が効いているなら、当面はダイジョブかもしれません。
でも、「WAF」のONにし忘れ、ということもありますから、やっぱり(できれば)プレフィックスは変えておいたほうがいいような気がします。

また、「phpMyAdmin」を手作業でインストールした場合は、セキュリティのために、それを丸ごと削除することをおすすめします。
もし「config」フォルダや「setup」フォルダの属性(パーミッション)を「000」にしてあったら、それを755にもどしてから削除してみて、OKなら「phpMyAdmin」のフォルダ丸ごとを削除しておきます。
セキュリティに疎い方は(僕もですけど)必ずやっておいたほうがいいです。