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
를 사용하여 서버에서 부여 테이블을 다시로드시킬 필요도 있습니다. 그렇지 않으면 서버를 다시 시작할 때까지 변경이 인식되지 않은 상태입니다.