「このページにアクセスするための十分なアクセス権がありません 」の原因

更新


先日、とあるwordpressサイトのリニューアルを請け負ったときに、テスト環境を作成してログインしようとすると、タイトルに表記のエラーが出ました。原因は、元サイトのデータベースのtableの接頭辞がwp_であったのに、これにきちんとした対応をせずにデータベースを取り扱ったためでした。同じ失敗を繰り返さないためにメモします。

テーブルの接頭辞がwp_だとテスト環境構築がより大変

以前の記事「wordpressのテスト環境作成時に必須なdatabase置換操作」で書いた通り、テスト環境を構築する際のデータベースの取り扱いは、テーブルの接頭辞がwp_でなくともそこそこ面倒です。

しかし、テーブルの接頭辞がwp_だと、テスト環境のテーブル接頭辞をwp_以外のものに変更しなければならない場合、さらに大変になります。

作業環境

具体的に以下のような作業環境の場合で考えて見ます。

  • 元のサイトアドレス:webshufu.com
  • テスト環境のサイトアドレス:example.com
  • 元のWordPress アドレス:webshufu.com/blog
  • テスト環境のWordPress アドレス:example.com/blog
  • 元サイトのデータベース接頭辞:wp_
  • テスト環境サイトのデータベース接頭辞:example_

作業手順

テスト環境構築の作業手順は、テーブルの接頭辞がwp_ではない場合と、同様です。

  1. まずは、ファイルのコピー・アップロード
  2. 元サイトからデータベースをエクスポート
  3. エクスポートしたSQLファイルを修正
  4. 修正後の.solをテスト環境のデータベースにインポート

しかし、このうちSQLファイルの修正が面倒なことになります。

wp_は接頭辞だけではない

ワードプレスのデータベースには、テーブル接頭辞をwp_としていない場合もwp_を含む文字列が沢山格納されています。

これらは当然接頭辞を表すwp_ではありません。

従って、テーブル接頭辞をwp_としている場合、SQLファイルのテーブル接頭辞修正作業では、数あるwp_を接頭辞を表すものとそうでないものに分類して、接頭辞を表すもののみをexample_に置換しないといけません。

煩雑な接頭辞置換作業

そこで、確実に接頭辞wp_のみをexample_に変換するため、テーブル名単位で置換作業を行います。

  • wp_commentmeta⇒example_commentmeta
  • wp_comments⇒example_comments
  • wp_links⇒example_links
  • wp_options⇒example_options
  • wp_postmeta⇒example_postmeta
  • wp_posts⇒example_posts
  • wp_terms⇒example_terms
  • wp_term_relationships⇒example_term_relationships
  • wp_term_taxonomy⇒example_term_taxonomy
  • wp_usermeta⇒example_usermeta
  • wp_users⇒example_users

ところがこれで終わりではありません。

ここで作業を終了すると、「このページにアクセスするための十分なアクセス権がありません。」という表示が出てワードプレスの編集作業が一切出来なくなります。

これは、example_optionsテーブルとexample_usermetaの中に接頭辞を表すwp_が残っているからです。これらをexample_に置き換えるため、さらに以下のような置換作業を行います。

  • wp_user_roles⇒example_user_roles
  • wp_capabilities⇒example_capabilities
  • wp_user_level⇒example_user_level
  • wp_dashboard_quick_press_last_post_id
    ⇒example_dashboard_quick_press_last_post_id
  • wp_user-settings⇒example_user-settings
  • wp_user-settings-time⇒example_user-settings-time

これでやっとSQLファイルの修正が完了です。

まとめ

テーブル接頭辞をwp_にすると、セキュリティーが脆くなる上、データベースの取り扱いもめんどくさくなるので注意が必要です。

接頭辞をwp_以外にするよう強くオススメします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です