13.7.1.7 SET PASSWORD 구문
SET PASSWORD [FORuser] =password_optionpassword_option: { PASSWORD('auth_string') | OLD_PASSWORD('auth_string') | 'hash_string' }
SET PASSWORD 문은 MySQL 사용자 계정에 암호를 할당합니다.
FOR절을 지정하지 않으면이 문은 현재 사용자의 암호를 설정합니다.userSET PASSWORD = PASSWORD ( 'cleartext password');익명 이외의 계정을 사용하여 서버에 접속 한 모든 클라이언트는 해당 계정의 암호를 변경할 수 있습니다. 서버가 어떤 계정을 자동식으로 인증했는지를 표시하려면
CURRENT_USER()함수를 호출합니다.SELECT CURRENT_USER ();FOR절을 지정한 경우,이 문은 지정된 계정의 암호를 설정합니다. 그러나 그 계정이 존재해야합니다.userSET PASSWORD FOR 'jeffrey'@ 'localhost'= PASSWORD ( 'cleartext password');이 경우는
mysql데이터베이스에 대한UPDATE권한이 필요합니다.
read_only 시스템 변수가 설정되어있는 경우, SET PASSWORD 는 다른 모든 필요한 권한 이외에 SUPER 권한이 필요합니다.
FOR 절이 지정된 경우이 계정 이름은 섹션 6.2.3 "계정 이름 지정" 에 설명되어있는 형식이 사용됩니다. useruser 값은 ' 로 지정하도록하십시오. 여기에서 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를 참조하십시오.)