Movable Type 3.2では、機能の追加に伴って、データベースにいくつかのフィールドが追加されています。
投稿者の設定の画面に「システム管理者」というチェックボックスがあり、それがオンになっている人は、投稿者を追加したり、他の投稿者の権限を設定したりなど、システムの管理を行うことができます。
システム管理者かどうかは、投稿者(author)テーブルに追加された「is_superuser」というフィールドに保存されます。
ところが、Movable Type 3.2にバージョンアップする際に、状況によってこのフィールドの値が正しく設定されず、システム管理ができなくなってしまうことがあります。
システム管理ができないと、上記の設定を行えない他、StyleCatcherやMT-Notifierのプラグインの設定ができないなどの問題が起こります。
参照:
そこで、特定の投稿者をシステム管理者にするCGIを作ってみました。
使い方は以下の通りです。
1.ダウンロードとインストール
以下のアドレスに接続すると、CGIのソースファイルが表示されます。
ソースファイルの内容をすべてコピーし、メモ帳などに貼り付けて、「mt-set-superuser.cgi」のファイル名で保存します。
そして、Movable Typeのインストール先にアップロードし、パーミッションを「755」などに変えて実行可能に設定します。
2.CGIの実行
以下のURLにアクセスすると、指定した投稿者がシステム管理者になります。
http://Movable TypeのURL/mt-set-superuser.cgi?author=投稿者名
例えば、Movable Typeを「http://www.foo.com/mt/」にインストールしていて、投稿者「Melody」をシステム管理者にするには、以下のURLにアクセスします。
http://www.foo.com/mt/mt-set-superuser.cgi?author=Melody
CGIが正しく動作すると、「author ○○○ is set to superuser」と表示されます。
なお、投稿者名を日本語にしている場合は、「author=」で指定する投稿者名をURLエンコードしてください。
例えば、投稿者を「太郎」にしていて、Movable Typeの文字コードをutf-8にしてるとします。
この場合、「太郎」をutf-8でURLエンコードすると「%e5%a4%aa%e9%83%8e」になりますので、「author=%e5%a4%aa%e9%83%8e」と指定します。
URLエンコードは、以下のページで行うと良いでしょう。
3.確認と後処理
CGIを実行したら、システム管理者に設定した投稿者でMovable Typeにログインし、システム管理者になっていることを確認します。
確認ができたら、「mt-set-superuser.cgi」をサーバーから削除しておいてください。







コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
ヽ(*^。^*)ノ ワ~イ できましたーーー!!
ホントなにをやってもダメなんで、もう半ば諦めてました。
ありがとうございます。いつもの投稿者が システム管理者に
昇格しました。これから MT-Notifier を復活させます。
助かりました!!
StyleCatcherでひたすら悩んでました(^^;)
ありがとうございます!!
この問題で困っていましたので早速使わせていただこうと思ったのですが、ブラウザ実行をすると、なぜか以下のようなエラーが出てしまいます。MT は3.2-ja-2なのですが、それがいけないのでしょうか?もし何かお分かりになれば教えていただければと思います。iruka ユーザごと消えてしまったということでしょうか。。。困りました。。
load error : author = iruka at /mt/extlib/CGI/Carp.pm line 314.
>いるかさん
こんにちは。
「load error」のエラーは、指定したユーザーを読み込むことができなかったときに起こります。
ユーザー名「iruka」で、Movable Type(mt.cgi)にログインすることはできているでしょうか?
大変申し訳ありません、お返事が遅れてしまいました。
(こちらのミスかもしれませんが、メール通知機能が動いていないようです。。)
壱さん、コメントありがとうございます。
「iruka」ではログインすらできなくなってしまっています。。パスワードの再設定などもできずにお手上げ状態です(ユーザ名やヒントなどに間違いはないのですが、「ユーザ名かヒントが違います」、と言われてしまいます。。
さらに、サイト内検索時に、「Can't call method "id" on an undefined value at lib/MT/App/Search.pm line 173.」と言うエラーが出て検索の実行すらできなくなってしまいました。。
デフォルトアカウントである Melody ユーザも削除してしまったので、、管理画面に全くたどり着けない状態です。
もし何かお気づきの対処方などがありましたら教えて頂けると大変助かります。次からはお返事遅れないように気をつけます、すみませんでした。
>いるかさん
推測ですが、MT3.2にバージョンアップするのに伴って、mt-db2sql.cgiでBerkeley DBから他のDBに変換をしていないでしょうか。
mt-db2sql.cgiを実行する前に、mt-config.cgiでBerkeley DBの行の先頭に「#」をつけて設定を無効にすると、データが変換されず、初期状態になります。
もしそのようにしていた場合は、変換後のデータベースをいったん削除し、mt-config.cgiのBerkeley DBの行の先頭から「#」を削除して、mt-db2sql.cgiを実行してください。こうすれば、データが変換されます。
>壱さん
コメント、ありがとうございます。
DB の形式違いでは?、とのコメントで少し思いあたるふしがありまして、先ほど MT 実行環境の管理者の方に問い合わせてみましたところ、つい最近 OS 環境が Solaris -> FreeBSD へと変更があったそうです。私は環境のせいではなくて、MT アップグレード後の管理者権限オフ問題が原因かとずっと思っていました。。すみません。。
確かに、「DataSource DS」で指定していた DS 内の既存の *.db ファイルを「file」コマンドで見てみますと、
Berkeley DB (Btree, version 8, big-endian)
となっており、いったん DS ディレクトリを別に移動して mt.cgi にて新規作成された DS 内の db ファイル属性を見て見ますと、
Berkeley DB 1.85/1.86 (Btree, version 3, native byte-order)
となっていました。
ですが、この新規作成した DS データベースでは今まで作成していたエントリがゼロになっており、既存の iruka アカウントもなくなり、Melody アカウントしか有効でなくなっていました。。(ですが、やっと管理画面にはたどりつけました。)
mt-set-superuser.txt に関するお話しから逸れてしまい恐縮ですが、何か解決方法などをご存知ではないでしょうか?さすがにエントリゼロは悲しいですので。。DS データベースは別名で残してあるので何とか変換できないかと思っております。
ちなみに直接 mt-db2sql.cgi を実行しようとすると以下のエラーが出てだめでした。。「**** WARNING: Use of uninitialized value in concatenation (.) or string at mt-db2sql.cgi line 45.
An error occurred while loading data:
Unsupported driver MT::ObjectDriver::DBI::: Can't locate MT/ObjectDriver/DBI/.pm in @INC (@INC contains: /home/masato/public_html/mt/plugins/spamlookup/lib extlib lib /usr/local/lib/perl5/site_perl/5.8.7/mach /usr/local/lib/perl5/site_perl/5.8.7 /usr/local/lib/perl5/site_perl /usr/local/lib/perl5/5.8.7/BSDPAN /usr/local/lib/perl5/5.8.7/mach /usr/local/lib/perl5/5.8.7 .) at (eval 14) line 1.
BEGIN failed--compilation aborted at (eval 14) line 1.」
>いるかさん
こんにちは。
システム管理者の方から、OS変更についてのアナウンスはなかったのでしょうか。だとすると、システム管理者のミスと言えると思います。
システム管理者にかけあって、データベースを変換してもらえないか問い合わせてみた方が良いと思います。