在创建新的 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}
它本身,作为字符串。
陷阱
为了“正式”证明问题是由于${sps} variable not being expanded **inside** mysql shell, and therefore acts as a regular string, I created another user
test1` 手动提供密码(而不是从变量)造成的,这次我可以正常登录。
问题
为什么当我在 mysql shell 中时,没有变量扩展,我如何防止这种行为或至少获得接近这种行为?
也许这是一个错误?
答案1
不能,因为 MySQL Shell 不会扩展环境变量。用户的密码test
将是${sps}
字面意思。但是你可以让 Bash 扩展变量并将结果输入 MySQL:
echo "CREATE user \"test\"@\"localhost\" IDENTIFIED BY \"${sps}\";" | mysql -u root -p[PASSWORD]