13.7.1.7 SET PASSWORD 구문
SET PASSWORD [FORuser
] =password_option
password_option
: { PASSWORD('auth_string
') | OLD_PASSWORD('auth_string
') | 'hash_string
' }
SET PASSWORD
문은 MySQL 사용자 계정에 암호를 할당합니다.
FOR
절을 지정하지 않으면이 문은 현재 사용자의 암호를 설정합니다.user
SET PASSWORD = PASSWORD ( '
cleartext password
');익명 이외의 계정을 사용하여 서버에 접속 한 모든 클라이언트는 해당 계정의 암호를 변경할 수 있습니다. 서버가 어떤 계정을 자동식으로 인증했는지를 표시하려면
CURRENT_USER()
함수를 호출합니다.SELECT CURRENT_USER ();
FOR
절을 지정한 경우,이 문은 지정된 계정의 암호를 설정합니다. 그러나 그 계정이 존재해야합니다.user
SET PASSWORD FOR 'jeffrey'@ 'localhost'= PASSWORD ( '
cleartext password
');이 경우는
mysql
데이터베이스에 대한UPDATE
권한이 필요합니다.
read_only
시스템 변수가 설정되어있는 경우, SET PASSWORD
는 다른 모든 필요한 권한 이외에 SUPER
권한이 필요합니다.
FOR
절이 지정된 경우이 계정 이름은 섹션 6.2.3 "계정 이름 지정" 에 설명되어있는 형식이 사용됩니다. user
user
값은 '
로 지정하도록하십시오. 여기에서 user_name
'@' host_name
'
과 ' user_name '
해당 계정의 ' host_name '
mysql.user
테이블 행의 User
와 Host
컬럼에 나열되어있는 내용과 동일합니다. (사용자 이름 만 지정한 경우 '%'
의 호스트 이름이 사용됩니다.) 예를 들어, 'bob'
및 '%.example.org'
의 User
와 Host
컬럼 값을 사용하여 계정의 암호를 설정 하려면이 문을 다음과 같이 설명합니다.
SET PASSWORD FOR 'bob'@'%.example.org'= PASSWORD ( ' cleartext password
');
암호는 다음의 방법으로 지정할 수 있습니다.
PASSWORD()
함수를 사용하여이 함수의 인수는 평문 (암호화되지 않은) 암호입니다.
PASSWORD()
는 암호 해시 및 암호화 된 암호 문자열을 반환합니다.old_passwords
시스템 변수 값에 의해,PASSWORD()
에 의해 사용되는 해시 방식이 결정됩니다.SET PASSWORD
가 암호를 올바른 형식이 아닌으로 거부 한 경우 해시 방식을 변경하기 위해old_passwords
을 변경하는 것이 필요하게 될 가능성이 있습니다. 예를 들어, 계정이mysql_native_password
플러그인을 사용하는 경우old_passwords
값은 0이어야합니다.SET old_passwords = 0; SET PASSWORD FOR 'jeffrey'@ 'localhost'= PASSWORD ( 'mypass');
old_passwords
값이 인증 플러그인에 필요한 값과 다른 경우,PASSWORD()
에 의해 반환 된 해시 된 암호 값이 플러그인에 허용되지 않고 암호를 설정하려고하면 오류가 생성됩니다. 예 :mysql>
SET old_passwords = 1;
mysql>SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');
ERROR 1372 (HY000) : Password hash should be a 41-digit hexadecimal numberOLD_PASSWORD()
함수를 사용하여 :이 함수의 인수는 평문 (암호화되지 않은) 암호입니다.
OLD_PASSWORD()
는 4.1 이전의 해시를 사용하여 암호를 해시 암호화 된 암호 문자열을 반환합니다. 이 해시 방식은mysql_old_password
인증 플러그인을 사용하는 계정에만 적합합니다.이미 암호화 된 암호 문자열을 사용하여
이 암호는 문자열 리터럴로 지정됩니다. 이것은이 계정에 사용되는 인증 방법에 필요한 해시 형식의 이미 암호화 된 암호 값을 표시해야합니다.
다음 표는 old_passwords
의 허용되는 값 각각의 값에 대한 암호 해시 방식 및 각각의 방식으로 해시 된 암호를 사용하는 인증 플러그인을 나타냅니다. 이 값은 MySQL 5.6.6 이후에 허용됩니다. 5.6.6 이전에서는 허용되는 값은 0 (또는 OFF
)와 1 (또는 ON
)입니다.
값 | 암호 해시 방식 | 연관된 인증 플러그인 |
---|---|---|
0 | MySQL 4.1 기본 해시 | mysql_native_password |
1 | 4.1 이전 ( "이전") 해시 | mysql_old_password |
2 | SHA-256 해시 | sha256_password |
암호 설정의 자세한 내용은 섹션 6.3.5 "계정 암호 할당" 을 참조하십시오.
상황에 따라서는, SET PASSWORD
가 서버 로그 또는 클라이언트 측의 ~/.mysql_history
등의 기록 파일에 기록 될 수 있습니다. 즉, 일반 텍스트 암호가 해당 정보에 대한 읽기 권한을 가진 모든 사용자가 읽을 수 있습니다. 이것이 서버 로그에서 발생하는 조건 및이를 제어하는 방법은 섹션 6.1.2.3 "암호 및 로깅" 을 참조하십시오. 클라이언트 측 로깅에 대한 유사한 정보는 섹션 4.5.1.3 "mysql 로그" 를 참조하십시오.
4.1 이전의 클라이언트 프로그램을 사용하여 MySQL 4.1 이상 서버에 연결되어있는 경우 암호를 변경하기 전에 반드시 섹션 6.1.2.4 "MySQL에서 암호 해시" 를 읽어보십시오. 기본 암호 해시 형식이 MySQL 4.1에서 변경 되었기 때문에 암호를 변경하면 암호가 4.1보다 전의 클라이언트가 생성 할 수없는 해시 형식을 사용하여 저장되며이를 통해 나중에 서버에 연결하지 못할 가능성 수 있습니다.
MySQL 복제를 사용하는 경우 현재 CHANGE MASTER TO
문의 일부로 복제 슬레이브에서 사용되는 암호는 실질적으로 길이가 32 자로 제한됩니다. 암호가 더 긴 경우 초과 된 문자는 잘립니다. 이것은 일반적으로 MySQL Server에 의해 적용되는 제한 때문이 아니고, 어느 쪽인가하면, MySQL 복제에 관련된 문제입니다. (자세한 내용은 Bug # 43439를 참조하십시오.)