Drupal7で開発中、万が一管理者(サイト構築時に作成したアカウント)のパスワードを忘れてしまった時の方法を記述します。
Drupalのusersテーブルについて
Drupal7のユーザーテーブルは以下のようになっている
mysql> desc users;
| Field|Type|Null|Key|Default|Extra|
|---|---|---|---|---|---|---|
| uid | int(10) unsigned | NO | PRI | 0 | |
| name | varchar(60) | NO | UNI | | |
| pass | varchar(128) | NO | | | |
| mail | varchar(254) | YES | MUL | | |
| theme | varchar(255) | NO | | | |
| signature | varchar(255) | NO | | | |
| signature_format | varchar(255) | YES | | NULL | |
| created | int(11) | NO | MUL | 0 | |
| access | int(11) | NO | MUL | 0 | |
| login | int(11) | NO | | 0 | |
| status | tinyint(4) | NO | | 0 | |
| timezone | varchar(32) | YES | | NULL | |
| language | varchar(12) | NO | | | |
| picture | int(11) | NO | MUL | 0 | |
| init | varchar(254) | YES | | | |
| data | longblob | YES | | NULL | |
パスワードを忘れてしまって変更をしたい場合は、usersテーブルのpassフィールドの値を変更すればパスワードを変更をすることができる。
ちなみに管理者(サイト構築時に作成したアカウント)のuidは1である。
パスワード変更のための文字列を用意する
passフィールドに入る値はハッシュ化された値が入るためパスワードにしたい文字列のハッシュを用意します.Drupal7にはハッシュを作るスクリプトが以下にあるでこれを使う。
./scripts/password-hash.sh abcdefg
password: abcdefg hash: $S$DOy6K2AlgtD8pzi0Bdc8pHej5F12fHMmsLJG5mim9aYdq4FLEqfo
パスワードを変更する
tableに先ほど作成した。hashの値を挿入する
UPDATE users SET pass ='$S$DOy6K2AlgtD8pzi0Bdc8pHej5F12fHMmsLJG5mim9aYdq4FLEqfo' WHERE uid = 1;
drushが入っていれば以下のようにコマンドを叩くことによって変更することもできるらしい。(こちらは試していません。)
drush upwd --password="abcdefg" "管理者(サイト構築時に作成したアカウント)"
補足:パスワードロックがかかってしまった場合
drupalでは標準で連続5回同じユーザーのパスワードを間違えるとそのユーザーで一定期間ログインできなくなっている。
これを解消にするにはfooldテーブルの任意の値を消去すれば可能
desc flood;
| Field|Type|Null|Key|Default|Extra|
|---|---|---|---|---|---|---|
| fid | int(11) | NO | PRI | NULL | auto_increment |
| event | varchar(64) | NO | MUL | | |
| identifier | varchar(128) | NO | | | |
| timestamp | int(11) | NO | | 0 | |
| expiration | int(11) | NO | MUL | 0 | |
ログイン失敗時にはeventフィールドの値failed_login_attempt_ipとfailed_login_attempt_userがセットで作成されるためこの自分のアクセスに対応するこのセットを消去することによって一定期間待つ必要は無くなります。
参考にしたページ
https://www.drupal.org/node/1023428
https://www.drupal.org/node/44164