新しいmysqlユーザーとデータベースを作成する前に、次のことを行いました。
read sps -s
# Inputing and saving the sps (password) value.
echo ${sps}
# sps password value echoed.
mysql -u root -p[PASSWORD]
mysql>
CREATE user "test"@"localhost" IDENTIFIED BY "${sps}";
質問
ログインするとmysql -u test -p[SPS_PASSWORD_VALUE]
アクセス拒否エラーが発生します。
パスワードは私が与えた値${sps}
ではなく、${sps}
それ自体です。文字列として。
罠
test1が手動で(変数ではなく)パスワードを提供したため、問題が発生したことを「正式に」証明するために${sps} variable not being expanded **inside** mysql shell, and therefore acts as a regular string, I created another user
今回はよくログインできました。
質問
mysqlシェルにあるときに変数拡張がない理由は何ですか、この動作を防止するか、少なくともこれに似た動作を得る方法は何ですか?
たぶんこれはバグですか?
答え1
いいえ。 MySQL Shellは環境変数を拡張しないからです。ユーザーのパスワードはリテラルtest
です${sps}
。しかし、Bashに変数を拡張し、結果をMySQLに提供させることができます。
echo "CREATE user \"test\"@\"localhost\" IDENTIFIED BY \"${sps}\";" | mysql -u root -p[PASSWORD]