특수 문자가 포함된 Mysql 명령줄 암호가 작동하지 않습니다.
데이터베이스 스키마를 업그레이드하기 위해 다음과 같은 bash 스크립트가 있습니다.이 스크립트는 명령줄에서 호스트 이름 및 데이터베이스 암호를 읽습니다.
여기서 문제는 암호가 영숫자 e.gr00t이면 스크립트가 작동한다는 것입니다.그러나 암호에 특수 문자(예: pa**w0rd)가 포함되어 있으면 스크립트가 작동하지 않고 바로 종료됩니다.이것 좀 도와주세요.감사해요.
#!/bin/bash
echo "Enter hostname."
read -p "Hostname [localhost]: " DB_HOST
DB_HOST=${DB_HOST:-localhost}
echo "Enter MySQL root password"
DB_PASS=
while [[ $DB_PASS = "" ]]; do
read -sp "Password: " DB_PASS
done
MYSQL="mysql --force --connect-timeout=90 --host=$DB_HOST -u root --password=${DB_PASS}"
# Apply schema updates. My DBName is "mydb"
# Upgrade schema file is stored in "mysql" folder
$MYSQL mydb -e exit > /dev/null 2>&1 && $MYSQL mydb < "../mysql/upgrade_schema_v.2.1.sql"
bash를 사용하여 mysql에 로그인
Ubuntu 또는 Linux 셸의 경우 명령어를 사용해 보십시오.
mysql -u username -p'p@ssw()rD'
원격 호스트 로그인 사용
mysql -h hostname -u user -p'password'
이 문제는 암호에 셸 GLOB(와일드카드) 문자를 사용하고 있으며 Bash(또는 Linux의 경우 일반적으로)에서는 셸에 의해 와일드카드가 확장되기 때문에 발생합니다.
가장 안전하고 안정적인 해결책은 암호에 셸 와일드카드 문자 또는 셸로 해석되는 다른 문자를 사용하지 않는 것입니다.또한 공백을 피해야 합니다.다른 캐릭터들도 많이 있습니다.
다음은 피해야 할 사항입니다.
" ' $ , [ ] * ? { } ~ # % \ < > | ^ ;
다음은 일반적으로 안전하게 사용할 수 있는 항목입니다.
: @ . , / + - ! =
암호가 여전히 안전한지 확인하려면 암호를 더 길게 설정합니다.예를 들어,
K@3amvv7l1wz1192sjqhym
이는 상위, 하위, 숫자 및 특수 문자가 처음 4개에 포함되어 있기 때문에 오래된 암호 복잡성 규칙을 충족하며 나머지 문자는 무작위로 생성되지만 문제가 있는 문자는 방지합니다.
그러나 암호를 사용해야 하는 경우 암호 매개 변수를 따옴표로 묶을 수 있습니다. 암호에 따옴표가 포함되어 있으면 문제가 발생합니다.
암호를 작은 따옴표로 묶습니다.
만약에pa**w0rd
,사용하다'pa**w0rd'
변수는 코드가 아닌 데이터에 가장 잘 사용됩니다.변수의 계층은 확장의 일부(즉, 명령줄이 원하는 토큰에서 워드 분할됨)를 원할 때 확장을 보호하기 어렵게 하지만 다른 모든 효과는 원하지 않습니다.해결책은 코드를 문자열에 저장하지 않는 것입니다.대신 다음과 같은 기능을 사용합니다.
do_mysql() {
host="$1"
pass="$2"
mysql --force --connect-timeout=90 --host="$host" -u root --password="$pass" "$@"
}
그러면 다음과 같은 추가 인수로 실행할 수 있습니다.
do_mysql "$DB_HOST" "$DB_PASS" -e exit > /dev/null && do_mysql "$DB_HOST" "$DB_PASS" < "../mysql/upgrade_schema_v.2.1.sql"
변수에는 대문자를 사용하지 않는 것이 좋습니다.이렇게 하면 환경 변수와 충돌하여 변경할 의도가 없는 항목을 실수로 변경할 수 있습니다(우연히 재설정한 사용자 수).PATH
증명할 수 있음).
언급URL : https://stackoverflow.com/questions/46663630/mysql-command-line-password-with-special-characters-is-not-working
'programing' 카테고리의 다른 글
모든 플라스크 경로에 접두사 추가 (0) | 2023.08.02 |
---|---|
C++ 문자열(또는 char*)을 wstring(또는 wchar_t*)으로 변환합니다. (0) | 2023.08.02 |
Oracle SQL 쿼리를 사용하여 그룹의 각 요소에 대한 시퀀스 번호 추가 (0) | 2023.07.28 |
함수를 반환하는 함수를 만들려면 어떻게 해야 합니까? (0) | 2023.07.28 |
MySQL에서 지정된 텍스트가 포함된 필드를 쿼리하려면 어떻게 해야 합니까? (0) | 2023.07.28 |