6.3.5 계정 암호 지정
MySQL 서버에 연결하는 클라이언트에 필요한 인증서 암호를 포함 할 수 있습니다. 이 섹션에서는 MySQL 계정에 암호를 할당하는 방법에 대해 설명합니다. 클라이언트 인증 플러그인을 사용하여 발생합니다. 섹션 6.3.7 "플러그 인증" 을 참조하십시오.
CREATE USER 를 사용하여 새 계정을 만들 때 암호를 지정하려면 IDENTIFIED BY 절을 포함합니다.
mysql>CREATE USER 'jeffrey'@'localhost'->IDENTIFIED BY 'mypass';
기존 계정에 암호를 할당 방법 또는 그것을 변경하는 방법의 하나는 SET PASSWORD 명령문을 발행하는 것입니다.
mysql>SET PASSWORD FOR->'jeffrey'@'localhost' = PASSWORD('mypass');
MySQL에서는 mysql 데이터베이스의 user 테이블에 패스워드가 저장됩니다. mysql 데이터베이스에 대한 UPDATE 권한을 가지고 root 등의 사용자 만 다른 사용자의 암호를 변경할 수 있습니다. 익명 사용자로 연결하지 않은 경우 FOR 절을 생략하면 자신의 암호를 변경할 수 있습니다.
mysql> SET PASSWORD = PASSWORD('mypass');
old_passwords 시스템 변수의 값은 PASSWORD() 에서 사용되는 해시 방식이 결정됩니다. 함수를 사용하여 암호를 지정해도, SET PASSWORD 에서 암호의 형식이 올바르지 않은으로 거부되는 경우 old_passwords 를 설정하고 해시 방식을 변경해야하는 경우도 있습니다. 허용되는 값은 섹션 5.1.4 "서버 시스템 변수" 를 참조하십시오.
read_only 시스템 변수를 사용하면 SUPER 권한을 가지고 있지 않은 사용자에 의한 SET PASSWORD 명령문의 사용을 피할 수 있습니다.
또한 글로벌 수준 ( ON *.* )에서 GRANT USAGE 명령문을 사용하면 계정의 현재 권한에 영향을주지 않고 계정에 암호를 지정할 수 있습니다.
mysql>GRANT USAGE ON *.* TO 'jeffrey'@'localhost'->IDENTIFIED BY 'mypass';
명령 행에서 암호를 지정하려면, mysqladmin 명령을 사용합니다.
shell> mysqladmin -u user_name -h host_name password " newpwd "
이 명령에 암호가 설정되는 계정은 User 컬럼에있는 user_name 과 일치하는 user 테이블 행을 가진 계정 및 Host 컬럼에 연결하는 클라이언트 호스트입니다.
인증 중에 클라이언트가 서버에 연결하면 MySQL에서는 user 테이블의 비밀번호가 암호화 된 해시 값 ( PASSWORD() 에서 암호에 반환되는 값)로 처리됩니다. 계정에 암호를 할당 할 때는 일반 텍스트 암호 대신 암호화 된 값을 저장하는 것이 중요합니다. 다음 지침을 사용합니다.
CREATE USER,IDENTIFIED BY절을 포함한GRANT또는 mysqladmin password 명령을 사용하여 암호를 지정하면 자동으로 암호가 암호화됩니다. 리터럴 평문 암호를 지정합니다.mysql>
CREATE USER 'jeffrey'@'localhost'->IDENTIFIED BY 'mypass';CREATE USER또는GRANT는PASSWORD()에서 암호에 반환되는 해시 값을 알고있는 경우에 일반 텍스트 암호 전송을 방지 할 수 있습니다. 전에 키워드PASSWORD를 붙인 해시 값을 지정합니다.mysql>
CREATE USER 'jeffrey'@'localhost'->IDENTIFIED BY PASSWORD '*90E462C37378CED12064BB3388827D2BA3A9B689';SET PASSWORD를 사용하여 계정에 비어 있지 않은 암호를 지정할 경우,PASSWORD()기능을 사용하여 암호를 암호화해야합니다. 그렇지 않으면 암호가 평문으로 저장됩니다. 다음과 같은 암호를 할당한다고 가정합니다.mysql>
SET PASSWORD FOR->'jeffrey'@'localhost' = 'mypass';그 결과 암호화 된 값이 아닌 리터럴 값
'mypass'가 암호로user테이블에 저장됩니다.jeffrey가이 암호를 사용하여 서버에 연결을 시도하면 그 값이 암호화되고user테이블에 저장된 값과 비교됩니다. 그러나 저장되는 값은 리터럴 문자열'mypass'이기 때문에 비교에 실패하고 서버는엑세스거부 라는 오류를 반환합니다.
PASSWORD() 암호화는 Unix 암호 암호화는 다릅니다. 섹션 6.3.1 "사용자 이름과 암호" 를 참조하십시오.
SET PASSWORD , GRANT 또는 mysqladmin을 사용하여 암호를 지정하는 것이 바람직하지만, user 테이블을 직접 수정할 수 있습니다. 이 경우, FLUSH PRIVILEGES 를 사용하여 서버에서 부여 테이블을 다시로드시킬 필요도 있습니다. 그렇지 않으면 서버를 다시 시작할 때까지 변경이 인식되지 않은 상태입니다.