● WordPressに紐付いたMySQLデータベースの、テーブルの接頭語(プレフィックス)の変更方法。「wp_」から「udon_5_」に変更する場合
ここでは、私たち素人にはちょっと難易度が高いですが、でも「勉強になる」、「人によってはこの方法しか選択肢が無い」、という場合のための接頭語の変更方法をご紹介します。
まず「phpMyAdmin」でデータベースにログインします。
(「phpMyAdmin」は、もともと標準でレンタルサーバについている場合と、自分でインストールしなければならない場合があります。)
そのとき、「へえー」となってもし何か色々いじってしまったら、まずは必ず左側のツリーのトップのデータベース名をクリックします。
テーブル名などを押していると、このあとの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にして効いていれば、もしバレたとしても名前を変更したり、内容を見たりすることはできません。・・・のはずです。)
「実行」ボタンを押します。
「読み込んでいます・・・」~となって、
「成功しました」、みたいな内容のメッセージがテーブルの数だけ出てきたら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」タブを押して・・・、
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」のフォルダ丸ごとを削除しておきます。
セキュリティに疎い方は(僕もですけど)必ずやっておいたほうがいいです。