ユーザーを作成しましたが、パスワードを忘れました
mysql> 'right'で識別されるユーザー 'blayo' @ '%'を作成します;
どのLinuxコマンドラインツールで実行できますかmysql 5.5と同じ方法でパスワードを暗号化しますか?
mysql> mysql.userからパスワード、ユーザーを選択 ------------------------------ ------------ + ------- + * 920018161824B14A1067A69626595E68CB8284CB | blayo |
...正しいものを使用していることを確認します
$ツール権限 * 920018161824B14A1067A69626595E68CB8284CB
さて、ささいな(おそらくcheating)方法は実行することです:
mysql -NBe "select password('right')"
これは、mysqlのバージョンが使用するパスワードハッシュ方式を使用してパスワードを生成します。 [[〜#〜] edit [〜#〜]:-NBを追加しました。これにより、列名とASCIIテーブルアートが削除されます。]
いくつかのワンライナー:
MySQL(ser)-pを追加する必要がある場合があります):
mysql -NBe "select password('right')"
---(Python:
python -c 'from hashlib import sha1; print "*" + sha1(sha1("right").digest()).hexdigest().upper()'
Perl:
Perl -MDigest::SHA1=sha1_hex -MDigest::SHA1=sha1 -le 'print "*". uc sha1_hex(sha1("right"))'
[〜#〜] php [〜#〜]:
php -r 'echo "*" . strtoupper(sha1(sha1("right", TRUE))). "\n";'
ルビー:
Ruby -e 'require "digest/sha1"; puts "*" + Digest::SHA1.hexdigest(Digest::SHA1.digest("right")).upcase'
すべての出力:
* 920018161824B14A1067A69626595E68CB8284CB
MySQLはコマンドラインとログでパスワードを難読化しないので、私の心はまだ打撃を受けています。 @Gillesの回答にコメントするのではなく、それが回答を追加する唯一の理由です。
したがって、もちろん、あなたはcould管理者としてMySQLにログインし、@ patrixが示唆するように、blayoユーザーの新しいパスワードを設定するだけです。
ただし、これを行う標準的な方法は、MySQLのpassword()関数を使用することです。これは、プレーンテキストのパスワードを引数として受け取ります(真剣に?)。
これを行う場合は、MySQLユーザーのパスワードのプレーンテキストバージョンをbash履歴とMySQLログに残しておくと、後でこれらのログファイルにアクセスできた人が簡単に取得できます。
画面やログにエコーしないでパスワードを要求する小さなユーティリティを用意して、結果のMySQL互換ハッシュを提供するほうがいいのではないでしょうか。
したがって、@ Gillesの回答を少しだけ変更して、次のようなPythonを使用する小さなシェルスクリプトはどうでしょうか。これを簡単に変更して、MySQLデータベースに対してSQLステートメントを実行し、パスワードを一度に設定できます。しかし、それほど遠くに行かなくても、結果のハッシュをコピーしてSQLステートメントに貼り付け、usersテーブルを更新するだけです。
#!/bin/bash
mysqlpwd=$(/usr/bin/python -c 'from hashlib import sha1; import getpass; print "*" + sha1(sha1(getpass.getpass("New MySQL Password:")).digest()).hexdigest()')
echo $mysqlpwd
シェルを使用してもう1つ:
_echo -n 'right' | sha1sum | xxd -r -p |\
sha1sum | tr '[a-z]' '[A-Z]' | awk '{printf "*%s", $1}'
_
説明:
echo -n
_改行なしで印刷sha1sum
_最初のSHA1xxd -r -p
_ハッシュをunhexsha1sum
_秒SHA1tr '[a-z]' '[A-Z]'
_大文字に変換awk '{print "*" $1}'
_先頭を追加*詳細:
2.と3.の間で、オプションの_awk '{printf "%s", $1}'
_ステップを改行およびハイフンの削除用に挿入できます。しかし、xxdはとにかくそれらを無視します(dave_thompson_085に感謝)。
さらに、ステップ5と6は、{print "*" toupper($1)}
に置き換えることで一度に実行できます(dave_thompson_085に感謝)。
ハッシュはsha1(sha1(password)) です。 salt (これは重大なセキュリティ上の欠陥です)がないため、 ハッシュをテーブルで検索 できます。
POSIXツールとsha1sum
from GNU coreutilsまたはBusyBox、sha1(sha1(password))は、sha1sum
コマンドは、ダイジェストを16進数で出力します。バイナリに変換する標準のツールはありません。
awk "$(printf %s 'right' | sha1sum |
sed -e 's/ .*//' -e 's/../, 0x&/g' \
-e 's/^/BEGIN {printf "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"/' \
-e 's/$/; exit}/')" | sha1sum
Pythonの標準ライブラリには標準ダイジェストがあるため、シンプルな1行です。
printf %s 'right' |
python -c 'from hashlib import sha1; import sys; print sha1(sha1(sys.stdin.read()).digest()).hexdigest()'
または、ワンライナー内のパスワードで:
python -c 'from hashlib import sha1; print sha1(sha1("right").digest()).hexdigest()'
シェルを使用する別の
echo -n 'right' | openssl sha1 -binary | openssl sha1 -hex | \
awk '{print "*"toupper($0)}'
...出力:
*920018161824B14A1067A69626595E68CB8284CB
ユーザーをクレートしてパスワードを忘れた場合は、これを行う必要があり、簡単です。
これは私が一度に100億のことをしているときにも数十回起こりました。パスワードを回復する最良の方法は次のとおりです。
最初にMySQLサーバーを完全に停止しました
mysqld_safe --skip-grant-tables&を発行
次に、パスワードを発行せずにrootとしてログインしました。mysql-u mysql-userだけです(mysqld_safeの後にログインできます)。
次に、mysql> userテーブルに移動し、ユーザーのパスワードを更新します
次に戻ってmysqlを再起動します
それが機能するかどうかを確認し、私たちに知らせてください。
MySQL 4.1+はダブルSHA1を使用します
> SELECT PASSWORD("right")
*920018161824B14A1067A69626595E68CB8284CB
> SELECT SHA1(UNHEX(SHA1("right")))
920018161824B14A1067A69626595E68CB8284CB
sh-3.2# php -r 'echo "*" . sha1(sha1("right", TRUE)). "\n";'
*920018161824b14a1067a69626595e68cb8284cb
このアルゴリズムは、他の言語に簡単に移植できます。違いは、「select password」のパスワードハッシュは常に「*」文字で始まることです。