mysql CLIが対話型でパスワードを要求することを許可する

mysql CLIが対話型でパスワードを要求することを許可する

大きなスクリプトの一部として、次のコードを使用しています。

mysql -u root -p << MYSQL
    create user '${DOMAIN}'@'localhost' identified by '${DOMAIN}';
    create database ${DOMAIN};
    GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL

ご覧のとおり、権限が付与されたすべての権限を持つデータベースユーザーと同じ値を持つデータベースインスタンスを作成します(パスワードも同じ値です)。

DB user ====> ${domain}.
DB user password ====> ${domain}.
DB instance ====> ${domain}.

別のパスワードが必要なので問題になります。もちろん、スクリプト全体の実行が完了したら、 `$ {domain}でパスワードを手動で変更できますが、これは私が望むものではありません。

私が望むのは、実行時にパスワードを直接入力/貼り付けることです。インタラクティブに

つまり、データベースユーザーのパスワードを求めるメッセージがスクリプト実行の不可欠な部分になることを願っています。

次のコードを試しましたが失敗しました。

mysql -u root -p << MYSQL
    create user '${DOMAIN}'@'localhost' identified by -p;
    create database ${DOMAIN};
    GRANT ALL PRIVILEGES ON ${DOMAIN}.* TO ${domain}@localhost;
MYSQL

スクリプトの実行後にパスワードを手動で変更するのではなく、スクリプトの実行に直接入力/貼り付けてパスワードをインタラクティブに挿入する正しい方法は何ですか?

ベストアンサー1

ユーザーに変数を事前に保存してくださいread

echo "Please enter password for user ${domain}: "; read -s psw
mysql -u root -p << MYSQL
  create user '${domain}'@'localhost' identified by '${psw}';
  create database ${domain};
  GRANT ALL PRIVILEGES ON ${domain}.* TO ${domain}@localhost;
MYSQL 

ここでコマンドはreadユーザー入力を読み取り、それを$psw変数に保存します。パスワード値を入力した後にMySQLデータベースに接続するには、MySQLルートパスワードを入力するように求められます(-pフラグ=対話型パスワードプロンプト)。

おすすめ記事