WordPress データベースのテーブル接頭語の変更を試みる



WordPress をローカル環境にインストールする際に Bitnami を利用した場合、データベース設定の大半が自動化されるため大変便利ではあるが、同時にテーブル接頭辞の設定も自動化されデフォルトのままインストールされてしまうので、セキュリティ上大きな問題が残ってしまう。
先日のローカル環境構築では Bitnami は利用しなかったが、もし Bitnami で ローカル環境を構築した場合のデフォルトのテーブル接頭辞「wp_」の変更方法を紹介していこうかと。
Contents
テーブル接頭辞(prefix [プレフィックス])とは
まずは簡単にテーブル接頭辞について。
テーブル接頭辞(prefix [プレフィックス])とは、簡単に説明するとデータベース内に保存されているデータ(テーブル)を区別するための「名前」に当たるもの。
ひとつのデータベース内に複数のサイトやブログのデータ(テーブル)を保管して運用する場合、どのデータ(テーブル)がどのサイトやブログのものなのかが分からないとうまくデータベースが働かないため、それをデータベースに理解させる=区別させるために、それぞれテーブルを区別するための「名前」を付けるというルールがある。
つまり「このデータ(テーブル)はこのサイト(ブログ)のもの」とデータベースに理解させるために付ける名称が「テーブル接頭辞」となる。
テーブル接頭辞の設定ルール
テーブル接頭辞は任意に付けることが可能だが一定のルールがある。
- 文字列は半角英数字のみ
- 文字列は 3 ~ 4 文字程度で、長すぎないようにする
- 文字列の一番後ろにはアンダーバー(「_」)を付加する
接頭辞の最後にアンダーバーが必要な理由は、データベースで使用されるテーブル名が
「【テーブル接頭辞】_【テーブル名】」
となり、接頭辞とテーブル名の区分を行うのに必要となるため。
テーブル接頭辞を変更する方法は2種類
テーブル接頭辞の変更方法には大別して2種類ある。
- プラグインを用いた変更
- 手動によるデータベース及び wp-cpnfig と php の記述変更
プラグインを用いた変更が最も手軽かつ簡単だが、プラグイン自体に脆弱性等の問題があるものや、動作の遅延に繋がるものもあると聞くので、今回はデータベースの勉強も兼ねて手動で変更作業を行うことに。
手動で WordPress のデータベーステーブル接頭辞を変更する場合、手順は以下のようになる。
- phpMyAdmin からデータベースのテーブル接頭辞を、SQL を用いて一括修正
- wp-config.php 内の「$table_prefix」(接頭辞指定)部分を書き換える
wp-config.php の書き換えはともかく、データベースに関してはまるで素人なので、ネット上で色々と参考にしながら修正を加えたので、参考にしたサイト等も併せて明記しておく。
ちなみにこれから行う作業の前にWordPressの各データ及び、特にデータベースを必ずバックアップすること。
「推奨」ではなく「必ず」。そうでないと最悪全アンインストール後、ゼロからの再作業の可能性があるため要注意。
phpMyAdmin からデータベースの確認
まずは phpMyAdmin を開き、現在のデータベースの状態を確認する。
Bitnami を用いてローカルインストールした場合、データベースの場所は「bitnami_wordpress」となっている。内部を見てみると、全テーブルの接頭辞が全て WordPress デフォルトの「wp_」となっている。
今回はこのデフォルトのテーブル接頭辞「wp_」を、任意の接頭辞(ここでは仮に「new_」とする)に変更していく。
注意したいのはデフォルト接頭辞「wp_」が使用されている部分は各テーブルだけでなく、テーブル内の各データにも使用されている箇所が複数あるため、これら全てを修正しないとエラーとなってしまうこと。具体的には、
- 「bitnami_wordpress」直下の全テーブル
- 「wp_options」テーブル内「option_name」フィールドの各データ
- 「wp_usermeta」テーブル内「meta_key」フィールドの各データ
- プラグインを追加していた場合、そのプラグイン独自のテーブル及び内部のデータ
などがある。今回は余計なプラグインを導入する前の WordPress インストール直後での作業なのでプラグイン独自のテーブルのことは考えなくても良い。
しかししばらく WordPress を運営した後での変更になるとさらに手間が増えるため、テーブル接頭辞の変更は可能な限り早い方が面倒がなくていいかと。
それではまずデータベースのテーブル接頭辞変更を、SQL 文でのクエリで行っていく。
SQL 文を用いてテーブル接頭辞を変更する
各テーブル接頭辞を一括変更
SQL 文によるテーブル接頭辞変更作業は、2回に分けて行う。まずは「bitnami_wordpress」直下の各テーブルの接頭辞を一括変更する。変更が必要なテーブルは以下の11個。
- wp_commentmeta
- wp_comments
- wp_links
- wp_options
- wp_postmeta
- wp_posts
- wp_terms
- wp_term_relationships
- wp_term_taxonomy
- wp_usermeta
- wp_users
これらテーブルの接頭辞を変更するのに使用したのは以下の SQL 文。
1 2 3 4 5 6 7 8 9 10 11 |
ALTER TABLE wp_commentmeta RENAME TO new_commentmeta; ALTER TABLE wp_comments RENAME TO new_comments; ALTER TABLE wp_links RENAME TO new_links; ALTER TABLE wp_options RENAME TO new_options; ALTER TABLE wp_postmeta RENAME TO new_postmeta; ALTER TABLE wp_posts RENAME TO new_posts; ALTER TABLE wp_terms RENAME TO new_terms; ALTER TABLE wp_term_relationships RENAME TO new_term_relationships; ALTER TABLE wp_term_taxonomy RENAME TO new_term_taxonomy; ALTER TABLE wp_usermeta RENAME TO new_usermeta; ALTER TABLE wp_users RENAME TO new_users; |
phpMyAdmin で「SQL」タブを選択し、上記SQL文を入力後「クエリ実行」をクリック。これで各テーブルの接頭辞をデフォルトの「wp_」から任意の接頭辞「new_」に変更完了。
各テーブル内データのテーブル接頭辞の一括変更
続いて「options」テーブル(変更後は「new_options」)と「usermeta」テーブル(変更後は「new_usermeta」)内データの接頭辞変更のためのSQL文を実行する。変更が必要なデータは、以下の6個。
- 「options」テーブル「option_name」フィールド内 : wp_user_roles
- 「usermeta」テーブル「meta_key」フィールド内 : wp_capabilities
- 「usermeta」テーブル「meta_key」フィールド内 : wp_user_level
- 「usermeta」テーブル「meta_key」フィールド内 : wp_dashboard_quick_press_last_post_id
- 「usermeta」テーブル「meta_key」フィールド内 : wp_user-settings
- 「usermeta」テーブル「meta_key」フィールド内 : wp_user-settings-time
これらデータの接頭辞を変更するのに使用したのは以下の SQL 文。
1 2 3 4 5 6 |
UPDATE new_options SET option_name = 'new_user_roles' WHERE option_name = 'wp_user_roles'; UPDATE new_usermeta SET meta_key = 'new_capabilities' WHERE meta_key = 'wp_capabilities'; UPDATE new_usermeta SET meta_key = 'new_user_level' WHERE meta_key = 'wp_user_level'; UPDATE new_usermeta SET meta_key = 'new_dashboard_quick_press_last_post_id' WHERE meta_key = 'wp_dashboard_quick_press_last_post_id'; UPDATE new_usermeta SET meta_key = 'new_user-settings' WHERE meta_key = 'wp_user-settings'; UPDATE new_usermeta SET meta_key = 'new_user-settings-time' WHERE meta_key = 'wp_user-settings-time'; |
上記 SQL 文入力後クエリ実行。これで「options」テーブル内「option_name」フィールドにあるデータと、「usermeta」テーブル内「meta_key」フィールドにあるデータのテーブル接頭辞をデフォルトの「wp_」から任意の接頭辞「new_」に変更完了。
これで phpMyAdmin からのデータベースのテーブル接頭辞の変更作業は全て終了。次は wp-config.php 内の記述変更作業を行っていく。
ちなみに上記で紹介したSQL文によるテーブル接頭辞の変更の方法及び手順は、以下のサイトを参考にさせていただいた。
wp-config.php の書き換えを行う
データベースのテーブル接頭辞の変更が完了したら、最後は wp-config.php 内の接頭辞指定部分を変更した任意の接頭辞(ここでは「new_」)に変更すれば全作業は終了となる。
環境にもよるが、基本的に wp-config.php は wordpress > htdocs 内にあるので、下記該当箇所を任意の接頭辞に変更する。
1 |
$table_prefix = 'new_'; |
これで WordPress 管理画面を開き何もエラー等が起こらなければ、無事 WordPress のデータベースのテーブル接頭辞変更作業は全て完了となる。
万が一管理画面を開き、「このページにアクセスするための十分なアクセス権がありません」といったエラーが出た場合は、
- 新しい任意の接頭辞は半角英数字のみで記述しているか
- 新しい任意の接頭辞の最後にアンダーバー(「_」)を忘れていないか
- 新しい任意の接頭辞の文字数が長過ぎないか
- テーブル接頭辞変更のための SQL 文にミスはないか
- データベースの余計な箇所まで手を加えていないか
- テーブルだけでなく、各テーブル内のデータの接頭辞も変更しているか
- プラグインを使用している場合、そのプラグインのデータベーステーブルも確認、変更したか
- wp-config.php 内の接頭辞指定部分を変更したか、あるいは変更を間違えていないか
などを疑い、ひとつひとつ検証してみる。
なお、どうしても接頭辞変更後 WordPress が正常に起動しない場合、最悪全てアンインストールして最初から全作業のやり直しとなってしまう。
最悪の事態を避けるためにも、くれぐれもデータベースのバックアップ作業は怠らないように。今回に限らず、重要な変更を加える際の事前バックアップは基本中の基本なのをお忘れなく。
……ちなみに私は今回、ものの見事にバックアップ忘れていた(笑)。何事もなく成功したので良かったようなものの……
しかし私の場合今回の作業は WordPress インストール直後のため最悪の事態となっても被害は最小限だったので、まぁバックアップは不要っちゃあ不要だったが……
コメント更新情報