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플래그 = 대화형 비밀번호 프롬프트).

관련 정보