터미널 내에서 MySQL에서 다음 명령을 실행하려고했을 때 :
mysql -u $user -p$password -e "statement"
실행은 예상대로 작동하지만 항상 경고를 발행합니다.
경고 : 명령 행 인터페이스에서 비밀번호를 사용하면 안전하지 않을 수 있습니다.
그러나 $password
터미널 내에서 bash 스크립트에서 반복적으로 명령을 실행하고 싶기 때문에 프롬프트가 표시되는 것을 기다리는 것을 좋아하지 않기 때문에 암호를 저장 하는 환경 변수 ( )를 사용하여 위의 명령문을 수행 해야합니다. 한 번의 스크립트로 비밀번호를 50 번 또는 100 번 입력하도록 강요했습니다. 여기 내 질문이 있습니다.
-
경고를 억제하는 것이 가능합니까? 내가 말한대로 명령이 제대로 작동하지만 반복하여 명령을 50 또는 100 번 실행할 때 창이 지저분 해집니다.
-
경고 메시지를 준수하고 스크립트에 비밀번호를 쓰지 않아야합니까? 이 경우 프롬프트가 표시 될 때마다 비밀번호를 입력해야합니까?
달리는 man mysql
것은 도움이되지 않습니다.
--show-warnings
각 명령문 뒤에 경고가 표시됩니다. 이 옵션은 대화식 및 배치 모드에 적용됩니다.
내가 빠진 것이 없다면 기능을 끄는 방법에 대해서는 언급하지 않았습니다.
OS X 10.9.1 Mavericks를 사용하고 있으며 homebrew에서 MySQL 5.6을 사용합니다.
답변
MySQL 클라이언트 / 서버 버전이 5.6.xa 방법 인 경우 WARNING 메시지가 mysql_config_editor 도구를 사용하지 않도록하십시오 .
mysql_config_editor set --login-path=local --host=localhost --user=username --password
그런 다음 쉘 스크립트에서 사용할 수 있습니다.
mysql --login-path=local -e "statement"
대신에:
mysql -u username -p pass -e "statement"
답변
나는 다음과 같은 것을 사용한다 :
mysql --defaults-extra-file=/path/to/config.cnf
또는
mysqldump --defaults-extra-file=/path/to/config.cnf
config.cnf에 다음이 포함됩니다.
[client]
user = whatever
password = whatever
host = whatever
이를 통해 다른 서버 / 역할 / 데이터베이스에 대해 여러 구성 파일을 가질 수 있습니다. ~ / .my.cnf를 사용하면 하나의 구성 세트 만 사용할 수 있습니다 (유용한 기본값 세트 임).
데비안 기반 배포판에 있고 루트로 실행중인 경우 위를 건너 뛰고 /etc/mysql/debian.cnf를 사용하여 …
mysql --defaults-extra-file=/etc/mysql/debian.cnf
답변
편리한 (그러나 동일하게 안전하지 않은) 방법 중 하나는 다음을 사용하는 것입니다.
MYSQL_PWD=xxxxxxxx mysql -u root -e "statement"
공식 문서는 권장하지 않습니다.
참조 (버전 5.6 수동 MySQL의) 암호 보안에 대한 6.1.2.1 최종 사용자 지침 :
MYSQL_PWD
환경 변수에 비밀번호 저장MySQL 비밀번호를 지정하는이 방법은 매우 안전하지 않은 것으로 간주되어 사용해서는 안됩니다. 일부 ps 버전 에는 실행중인 프로세스 환경을 표시하는 옵션이 포함되어 있습니다. 일부 시스템에서을 설정하면 ps
MYSQL_PWD
를 실행하는 다른 사용자에게 비밀번호가 노출됩니다 . 이러한 ps 버전이없는 시스템에서도 사용자가 프로세스 환경을 검사 할 수있는 다른 방법이 없다고 가정하는 것은 현명하지 않습니다.
답변
커맨드 라인에서 암호를 사용하려면 특정 오류 메시지를 필터링하는 데 효과적이라는 것을 알았습니다.
mysqlcommand 2>&1 | grep -v "Warning: Using a password"
기본적으로 표준 오류를 표준 출력으로 리디렉션하고 grep을 사용하여 “경고 : 암호 사용”과 일치하는 모든 행을 삭제합니다.
이런 식으로 오류를 포함한 다른 출력을 볼 수 있습니다. 나는 이것을 다양한 쉘 스크립트 등에 사용합니다.
답변
다음은 일일 mysqldump 데이터베이스 백업을위한 bash 스크립트를보다 안전하게 작동시키는 방법입니다. 이것은 크리스티안 포르타의 위대한 답변의 확장입니다.
-
먼저 mysql_config_editor (mysql 5.6+와 함께 제공)를 사용하여 암호화 된 비밀번호 파일을 설정하십시오. 사용자 이름이 “db_user”라고 가정하십시오. 쉘 프롬프트에서 실행 :
mysql_config_editor set --login-path=local --host=localhost --user=db_user --password
암호를 묻는 메시지가 나타납니다. 입력하면 사용자 / 패스가 암호화되어 저장됩니다.
home/system_username/.mylogin.cnf
물론 “system_username”을 서버의 사용자 이름으로 변경하십시오.
-
bash 스크립트를 다음과 같이 변경하십시오.
mysqldump -u db_user -pInsecurePassword my_database | gzip > db_backup.tar.gz
이에:
mysqldump --login-path=local my_database | gzip > db_backup.tar.gz
더 이상 노출 된 비밀번호가 없습니다.
답변
가장 쉬운 방법은
mysql -u root -pMYPASSWORD -e "show databases" 2>/dev/null
답변
로그인 경로를 지정할 때 스크립트에서 mysql_config_editor를 실행하여 비밀번호를 전달할 수도 있습니다.
expect -c "
spawn mysql_config_editor set --login-path=$mySqlUser --host=localhost --user=$mySqlUser --password
expect -nocase \"Enter password:\" {send \"$mySqlPassword\r\"; interact}
"
그러면 스크립트에서 프롬프트와 상호 작용하기 위해 사용할 수있는 예상 세션이 시작됩니다.