programing

특수 문자가 포함된 Mysql 명령줄 암호가 작동하지 않습니다.

javajsp 2023. 7. 28. 21:49

특수 문자가 포함된 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