MySQLのユーザー名とパスワードを紛失しました。どうすれば取得できますか?
10 に答える
MySQLプロセスを停止します。
--skip-grant-tablesオプションを使用してMySQLプロセスを開始します。
-urootオプションを指定してMySQLコンソールクライアントを起動します。
すべてのユーザーを一覧表示します。
SELECT * FROM mysql.user;
パスワードを再設定する;
UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';
しかし、忘れないでください
MySQLプロセスを停止します
MySQLプロセスを通常どおりに開始します(つまり、-skip-grant-tablesオプションなしで)
終わったら。そうしないと、データベースのセキュリティが危険にさらされる可能性があります。
残念ながら、ユーザーパスワードは取得できません。一方向ハッシュでハッシュ化されており、わからない場合は元に戻せません。上記のXenphYanを使用して、新しいXenphYanを作成することをお勧めします。
マニュアルの次の手順を使用して、Windows上のMySQLルートアカウント のパスワードをリセットすることもできます。
- 管理者としてシステムにログオンします。
- MySQLサーバーが実行されている場合は停止します。Windowsサービスとして実行されているサーバーの場合は、サービスマネージャーに移動します。
スタートメニュー->コントロールパネル->管理ツール->サービス
次に、リストからMySQLサービスを見つけて、停止します。サーバーがサービスとして実行されていない場合は、タスクマネージャーを使用してサーバーを強制的に停止する必要があります。
テキストファイルを作成し、その中に次のステートメントを配置します。パスワードを使用するパスワードに置き換えます。
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;
UPDATEステートメントとFLUSHステートメントは、それぞれ1行で記述する必要があります。UPDATEステートメントは既存のすべてのルートアカウントのパスワードをリセットし、FLUSHステートメントはサーバーに許可テーブルをメモリにリロードするように指示します。
- ファイルを保存します。この例では、ファイルの名前はC:\mysql-init.txtになります。
コンソールウィンドウを開いて、コマンドプロンプトを表示します。
スタートメニュー->実行->cmd
特別な--init-fileオプションを使用してMySQLサーバーを起動します。
C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt
MySQLをC:\ mysql以外の場所にインストールした場合は、それに応じてコマンドを調整します。
サーバーは、起動時に--init-fileオプションで指定されたファイルの内容を実行し、各rootアカウントのパスワードを変更します。
サーバー出力をログファイルではなくコンソールウィンドウに表示する場合は、コマンドに--consoleオプションを追加することもできます。
MySQLインストールウィザードを使用してMySQLをインストールした場合は、-defaults-fileオプションを指定する必要がある場合があります。
C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt
適切な--defaults-file設定は、ServicesManagerを使用して見つけることができます。
スタートメニュー->コントロールパネル->管理ツール->サービス
リストからMySQLサービスを見つけて右クリックし、[プロパティ]オプションを選択します。[実行可能ファイルへのパス]フィールドには、-defaults-file設定が含まれています。
- サーバーが正常に起動したら、C:\mysql-init.txtを削除します。
- MySQLサーバーを停止してから、通常モードで再起動します。サーバーをサービスとして実行する場合は、Windowsの[サービス]ウィンドウからサーバーを起動します。サーバーを手動で起動する場合は、通常使用するコマンドを使用してください。
これで、新しいパスワードを使用してrootとしてMySQLに接続できるようになります。
ここで最も役立つ答えの改善:
1] mysql サーバーを再起動する必要はありません
2] ネットワークに接続された MySQL サーバーのセキュリティ上の懸念
MySQL サーバーを再起動する必要はありません。
FLUSH PRIVILEGES;
パスワード変更のための update mysql.user ステートメントの後に使用します。
FLUSH ステートメントは、パスワードの変更を認識できるように、付与テーブルをメモリに再ロードするようにサーバーに指示します。
では、--skip-grant-options
誰でもパスワードなしですべての特権を使用して接続できます。これは安全でないため、
--skip-grant-tablesを--skip-networkingと組み合わせて使用して、リモート クライアントが接続しないようにします。
from: 参照: resetting-permissions-generic
ブルートフォースを使わずに MySQL パスワードを直接回復することはできませんが、別の方法があるかもしれません。MySQL Workbench を使用してデータベースに接続し、資格情報を「ボールト」に保存した場合は、ゴールデンです。
Windows では、資格情報は%APPDATA%\MySQL\Workbench\workbench_user_data.datに保存され、 CryptProtectDataで暗号化されます(追加のエントロピーなし)。復号化は簡単です:
std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
DATA_BLOB inblob { length, input };
DATA_BLOB outblob;
if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
throw std::runtime_error("Couldn't decrypt");
}
std::vector<unsigned char> output(length);
memcpy(&output[0], outblob.pbData, outblob.cbData);
return output;
}
または、このDonationCoder スレッドで、簡単な実装のソース + 実行可能ファイルを確認できます。
mysql が実行されているサーバーへのルート アクセス権がある場合は、このコマンドを使用して mysql サーバーを停止する必要があります。
sudo service mysql stop
このコマンドを使用してmysqlを起動します
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
これで、mysql にログインできます。
sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
完全な手順については、 http://www.techmatterz.com/recover-mysql-root-password/ を参照してください。