久しぶりにCMSいじる時、パスワードの入力をブラウザキャッシュ保存に任せすぎた時、クライアントに確認してもわからないって言われたとき。。
各々CMSにはパスワード忘れた時用のリマインダー機能を使えばたいてい何とかなりますけど、
万が一そのアカウントに設定してるメールアドレスが受信できない(もしくはメールが飛ばない環境)だったら。。
もうDB直接いじってエイヤってしたほうが早くね?ってことでやり方まとめました。(ただしご利用は自己責任で)
Wordpress版
Wordpressは接頭語が「wp_」だった場合、「wp_users」テーブルにログインユーザ情報が格納されてます。
user_passってのがそれですね、わかりやすい。
phpmayadminやselect文で確認してもらえばわかりますが、ハッシュ化された内容が登録されてるので、
SQLを実施する場合は下記で行けます。(SQL実施前に対象DBをuseしといてくださいね)
UPDATE wp_users SET user_pass = MD5('新しいパスワード') WHERE ID = 'パスを変更したいユーザーのID';
パスワード変更したいユーザのレコードを確認してwhere で指定すればいいだけ。
簡単ね。
Movabletype版
Movabletypeも同様に「mt_author」ってテーブルに格納されてます。
こちらも「author_password」ってカラムに登録されてますが、暗号化されておりますね。
テーブルだけじゃ把握できなかったのでMT本体を解析したところ「lib/MT/Author.pm」に暗号化関連のset_passworrd関数を見つけました。
こちらをちょちょいと拝借して簡易パッチを作成。
#!/usr/bin/perl -w
use strict;
use lib qw ( lib extlib );
use MT::Util;
my $pass = $ARGV[0];
my @alpha = ( 'a' .. 'z', 'A' .. 'Z', 0 .. 9 );
my $salt = join '', map $alpha[ rand @alpha ], 1 .. 16;
my $crypt_sha;
if ( eval { require Digest::SHA } ) {
# Can use SHA512
$crypt_sha
= '$6$'
. $salt . '$'
. Digest::SHA::sha512_base64( $salt . $pass );
}
else {
# Use SHA-1 algorism
$crypt_sha
= '{SHA}'
. $salt . '$'
. MT::Util::perl_sha1_digest_hex( $salt . $pass );
}
print $crypt_sha;
MTディレクトリ直下に設置して、cmd実行
perl makepwd.pl test
「test」の部分はパスワードとして利用したい文字。
これを実施すると暗号化された文字が生成されるので、こいつを使ってSQLでauthor_passwordの該当レコードを変更すればよき。
update mt_author set author_password = "生成された文字" where ID = 該当レコードのID
なお、上記MT7系でも動作し、実施してパスワード強制変更はできました。
が、何でも言いますが、利用は自己責任でお願いします。何か起きても一切責任取りませんので、
ご利用の際はDBバックアップなどしたり、とったdumpを使って別の環境で利用して問題ないかなど予防線は貼ってくださいね、いわずもがなですが。