2011年3月7日月曜日

Redmineの管理者パスワードを忘れたので・・・

Redmine.JPにはもっとちゃんとした方法があったりしますが、自分の環境では諸事情により使えなかったので、DBを更新する荒技をやりました。

前提
自分のRedmine環境ではMySQLを使用しています。なので、手順はMySQLに従います。
またそもそもどのテーブルの、なんて項目にパスワードが格納されているか、すら分からない状況からのスタートです。
なお、自分はこの方法でうまくいきましたが、いつでも同じようにうまくいくとは限りませんので。。

手順
"redmine admin password"とかでgoogleすると、sqliteでの同様の実績がありました。

でぃべろっぱーってへてむる: Redmineで管理者がパスワードを忘れた場合
http://devml.blogspot.com/2008/07/redmine.html

この情報から推測すると、
・Redmineのデータベースに"users"テーブルがあり、ユーザ関連の情報を管理している。
・"users"テーブルの"hashed_password"名のカラムに、sha1とかいう暗号(?)で40桁の16進数で暗号化されたパスワードが格納されている。
ということがわかります。

sha1 (Secure Hashed Algorithm1)
http://e-words.jp/w/SHA-1.html

mysqldumpを取得してから、参照と更新を進めます。

$ mysqldump redmine > exp_redminedb_20110307.sql -u root -p
Enter password:【MySQLのパスワード入力】


早速、自身のredmineデータベースを確認。


$ mysql -u root -p
Enter password:【MySQLのパスワード入力】


"redmine"データベースを使用。

mysql> use redmine


"users"テーブルの内容を参照(XXX・・・がsha1で計算された、新しく設定するパスワード文字列)

mysql> select hashed_password from users where id = '1';
+------------------------------------------+
| hashed_password |
+------------------------------------------+
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
+------------------------------------------+
1 row in set (0.02 sec)



id='1'というのは、全ユーザに対する通し番号"id"の1番目。
(最初に作った管理者ユーザは多分どんな場合もid="1"になるのかな、と)
ここの値を更新します。

パスワードのsha1計算は別途、以下のようなツールから計算。

フリーのsha1ハッシュ計算ツール
http://tools.fictionlife.com/sha1/

ハッシュ/チェックサム計算(MD5/CRC/SHA)
http://kujirahand.com/web-tools/Checksum.php?v=text

できれば、コマンドラインからできないものだろうか。


update users set hashed_password ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" where id = '1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0


あとは実際Redmineのログイン画面からログインできれば検証できます。

普段Oracleを使う機会のが多いので知らなかったのですが、MySQLはデフォルトで自動コミットがついてるそうな。

0 件のコメント:

コメントを投稿