あなたはこのページにアクセスする権限を持っていません
2008/12/21 | SNS/CMS/ブログ
WordPressでこんなエラーが出た。いやいや、自分が管理者で間違いないですけど。ちなみに、エラーが出たWordPressのバージョンはME2.2.1。
何らかの原因で文字コードが変わったりするとこのエラーが出るらしい。例えばデータベース内のテーブル「wp-options」の「wp_user_roles」というところには管理権限に関する情報が書かれている。ここの値は配列がシリアライズして記述されているので、日本語が入っていて文字コードが変わったりすると影響が出て、その結果として権限情報が取得できない、みたいな感じなんだろう。とりあえず、この行がうまく取得できなかった場合にエラーが出そうだ。
で、調べてみたけど、文字コードは変わっていなかった。で、なぜ、エラーが出るのか。
実はWordPressを移設しなくてはならない事情ができて、その際にテーブル名を変えた。デフォルトで入力した際「wp_」だったところを「www_wp_」に変えた。もちろんwp-config.phpの中で$table_prefixの値は書き換えたので、表面上は問題なく表示されていたっぽい。でも、実はwp-config.phpを編集するだけではいけなかった。変更する箇所はデータベース内に3点あって、まずそれらを探す(以下のリスト)。
- wp_optionsでカラム「option_name」で”wp_user_roles”の値を持つ行
- wp_usermetaでカラム「meta_key」で”wp_capabilities”の値を持つ行
- wp_usermetaでカラム「meta_key」で”wp_user_level”の値を持つ行
一見、上記の行を見ても、何もおかしそうな箇所はない。それぞれの値と思われるカラムのデータを見てもwp_っていう文字列が見当たらない。でも、実はそういう問題ではなかった。上記3つの名前そのものがいけないのだ。正しくは以下のように修正。
- 「wp_user_roles」を「www_wp_user_roles」
- 「wp_capabilities」を「www_wp_capabilities」
- 「wp_user_level」を「www_wp_user_level」
こんなところにもテーブル名のprefixが効いてくるとは。PHPでかかれたブログとしてはWordPressが一番メジャーだし、このブログでも使っている。でもいくつか「いただけない部分があるなー」とは思っていたけれど・・・。これって仕様がよくないような気がする。なんだか・・・取って付けたような修正をしていった結果、1箇所変更しただけではうまく変更が効いてくれない、みたいな。まぁ、我慢して使うしかないけれど。