6.3.8.3 이전 암호 해시 방식과 mysql_old_password 플러그인에서 마이그레이션
MySQL 서버는 plugin
컬럼에서 이름이 지정된 인증 플러그인을 사용하여 mysql.user
테이블에 나열 된 계정에 대해 연결 시도를 인증합니다. plugin
컬럼이 비어있는 경우 서버는 다음과 같이 인증을 수행합니다.
MySQL 5.7.2 이전에는
Password
컬럼의 암호 해시 형식에 따라서 서버는 암시 적으로mysql_native_password
이나mysql_old_password
플러그 인을 사용합니다.Password
값이 비어 있거나 4.1 암호 해시 (41 자) 인 경우, 서버는mysql_native_password
을 사용합니다. 암호 값이 4.1 이전 암호 해시 (16 문자)의 경우, 서버는mysql_old_password
을 사용합니다. (이 해시 형식에 대한 자세한 내용은 섹션 6.1.2.4 "MySQL에서 암호 해시" 를 참조하십시오.)MySQL 5.7.2의 시점에서는
plugin
컬럼을 하늘 이외에해야 서버는 빈plugin
값을 가진 계정을 비활성화합니다. 5.7.5의 시점에서mysql_old_password
지원이 삭제되어 있습니다.
4.1 이전 암호 해시 및 mysql_old_password
플러그인은 MySQL 5.6.5의 시점에서 비추천입니다 4.1 암호 해시 및 mysql_native_password
플러그인에 의해 제공되는보다 낮은 보안 수준을 제공한다. plugin
컬럼을 하늘 이외에해야하는 MySQL 5.7.2의 요구 사항과 5.7.5에서 mysql_old_password
지원이 삭제 된 것을 합칠 경우 DBA는 다음과 같이 계정을 업그레이드하는 것이 좋습니다 합니다.
mysql_native_password
을 명시 적으로 사용하기 위해 그것을 암묵적으로 사용하는 계정을 업그레이드합니다.mysql_native_password
을 명시 적으로 사용하기 위해 (암시 적 또는 명시 적으로)mysql_old_password
를 사용하여 계정을 업그레이드합니다.
이 섹션의 단계에서는 이러한 업그레이드를 수행하는 방법을 설명합니다. 그 결과, 계정은 빈 plugin
값을 가지지 않고, 4.1보다 이전 암호 해시 또는 mysql_old_password
플러그인을 사용하지 않습니다.
이 단계의 변형으로 DBA는 SHA-256 암호 해시를 사용하여 인증하는 sha256_password
플러그인으로 업그레이드하는 옵션을 사용자에게 제공 할 수 있습니다. 이 플러그인은 섹션 6.3.8.4 "SHA-256 인증 플러그인" 을 참조하십시오.
다음 표에는이 설명에서 고려되는 mysql.user
계정 유형을 나열합니다.
plugin 컬럼 | Password 컬럼 | 인증 결과 | 업그레이드 작업 |
---|---|---|---|
하늘 | 하늘 | 암묵적으로 mysql_native_password 를 사용하는 | 플러그인 할당 |
하늘 | 4.1 해시 | 암묵적으로 mysql_native_password 를 사용하는 | 플러그인 할당 |
하늘 | 4.1 이전의 해시 | 암묵적으로 mysql_old_password 를 사용하는 | 플러그인을 할당 암호를 다시 해시하기 |
mysql_native_password | 하늘 | 명시 적으로 mysql_native_password 를 사용하는 | 없음 |
mysql_native_password | 4.1 해시 | 명시 적으로 mysql_native_password 를 사용하는 | 없음 |
mysql_old_password | 하늘 | 명시 적으로 mysql_old_password 를 사용하는 | 플러그 인 업그레이드 |
mysql_old_password | 4.1 이전의 해시 | 명시 적으로 mysql_old_password 를 사용하는 | 플러그인을 업그레이드하고 암호를 다시 해시하기 |
mysql_native_password
플러그인 행에 해당하는 계정은 (플러그인이나 해시 형식을 변경할 필요가 없기 때문에) 업그레이드 작업은 필요하지 않습니다. 암호가 빈 행에 해당하는 계정은 DBA 암호를 선택하도록 계정 소유자에게 요구하는 것을 고려해야합니다 (또는 ALTER USER
를 사용하여 빈 계정 암호 만료 하여 그것을 요구해야합니다.)
mysql_native_password의 암시 적 사용에서 명시적인 사용으로 업그레이드
빈 플러그인 4.1 암호 해시를 가진 계정은 암시 적으로 mysql_native_password
을 사용합니다. mysql_native_password
을 명시 적으로 사용하도록 계정을 업그레이드하려면 DBA는 다음 문을 실행하도록하십시오.
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE plugin = ''AND (Password = ''OR LENGTH (Password) = 41); FLUSH PRIVILEGES;
MySQL 5.7.2 이후에서는 DBA는 그 업그레이드 작업간에 동일한 작업을 수행 mysql_upgrade를 실행할 수 있습니다. 5.7.2 이전에서는 DBA는 이러한 문을 실행하여 계정을 능동적으로 업그레이드 할 수 있습니다.
참고 :
이 단계는 이미 암묵적으로 사용하는 계정에 대해서만
mysql_native_password
플러그인을 명시하기 위해 언제 실행해도 안전합니다.이 단계에서는 암호를 변경할 필요가 없기 때문에, DBA는 사용자에게 영향을 주거나 업그레이드 과정에 참여하도록 사용자에게 요구하거나하지 않고이 작업을 수행 할 수 있습니다.
mysql_old_password에서 mysql_native_password에 계정을 업그레이드
mysql_native_password
을 명시 적으로 사용하려면 (암시 적 또는 명시 적으로) mysql_old_password
를 사용하여 계정을 업그레이드하도록하십시오. 이렇게하려면 플러그인을 변경하고 4.1보다 전부터 4.1 해시 형식으로 비밀번호를 변경해야합니다.
이 절차에 설명 된 계정 업그레이드 할 필요가있는 경우는 다음 조건 중 하나에 해당됩니다.
plugin
컬럼이 비어 있고 암호 해시 형식이 4.1보다 전 (16 자)이기 때문에 계정은 암묵적으로mysql_old_password
을 사용합니다.계정은 명시 적으로
mysql_old_password
을 사용합니다.
이러한 계정 식별하려면 다음 쿼리를 사용합니다.
SELECT User, Host, Password FROM mysql.user WHERE (plugin = ''AND LENGTH (Password) = 16) OR plugin = 'mysql_old_password';
다음의 설명에 해당 계정 세트를 갱신하기위한 두 가지 방법을 보여줍니다. 이들은 서로 다른 특성을 가지고 있기 때문에, DBA는 둘 다 읽고 특정 MySQL 설치에 최적의 방법을 결정하도록하십시오.
방법 1.
이 방법의 특징 :
모든 사용자가
mysql_native_password
로 업그레이드 될 때까지secure_auth=0
을 지정하여 서버와 클라이언트를 실행해야합니다. (그렇지 않으면 사용자는 새로운 형식의 해시로 업그레이드하기 위해 이전 형식의 암호 해시를 사용하여 서버에 연결할 수 없습니다.)MySQL 5.5에서 5.7.1까지에서 작동합니다. 5.7.2 시점에서 서버는 비어 있지 않은 플러그인을 갖도록 계정에 요구하고 그렇지 않은 경우 해당 계정을 비활성화하기 위해 작동하지 않습니다. 따라서 5.7.2 이상으로 업그레이드 한 경우 방법 2를 선택하십시오.
DBA는 서버가 secure_auth=0
을 지정하여 실행되고 있는지 확인하도록하십시오.
명시 적으로 mysql_old_password
를 사용하는 모든 계정은 DBA는 하늘의 플러그인에 설정하도록하십시오.
UPDATE mysql.user SET plugin = '' WHERE plugin = 'mysql_old_password'; FLUSH PRIVILEGES;
또한 영향을받는 계정의 암호를 만료하려면 다음 문을 사용합니다.
UPDATE mysql.user SET plugin = ''password_expired = 'Y' WHERE plugin = 'mysql_old_password'; FLUSH PRIVILEGES;
이 시점에서 영향을받는 사용자는 서버에 연결하고 4.1의 해시가 사용되도록 암호를 재설정 할 수 있습니다. DBA는 빈 플러그인을 현재 가지고 각 사용자에게 연결하여 다음 문을 실행하도록 요구하게하십시오.
SET old_passwords = 0;
SET PASSWORD = PASSWORD ( ' user-chosen-password
');
MySQL 5.6.5 이후에서는 클라이언트 측 --secure-auth
가 기본적으로 활성화되어 있기 때문에, DBA는이를 해제하도록 사용자에게 떠올리게합니다. 그렇지 않으면 사용자가 연결할 수 없습니다.
shell> mysql -u user_name
-p --secure-auth=0
영향을받는 사용자가이 문을 실행 한 후, DBA는 해당 계정 플러그인을 mysql_native_password
로 설정하면 플러그인을 명시 적으로 할 수 있습니다. 또한 DBA는 다음 문을 정기적으로 실행하면 영향을받는 사용자가 자신의 암호를 재설정 한 모든 계정을 검색하고 수정할 수 있습니다.
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE plugin = ''AND (Password = ''OR LENGTH (Password) = 41); FLUSH PRIVILEGES;
빈 플러그인을 가진 계정이 없으면이 쿼리는 빈 결과를 반환합니다.
SELECT User, Host, Password FROM mysql.user WHERE (plugin = ''AND LENGTH (Password) = 16);
이 시점에서 모든 계정은 4.1 이전 암호 해시에서 마이그레이션되고 secure_auth=0
을 지정하여 서버를 실행할 필요가 없습니다.
방식 2.
이 방법의 특징 :
DBA는 영향을받는 각 계정에 새 암호를 할당합니다. 따라서 DBA는 이러한 각 사용자에게 새 암호를 통지하고 새 암호를 선택하도록 사용자에게 요청해야합니다. DBA에서 사용자에게 암호 통지는 MySQL의 범위를 벗어납니다. DBA 암호를 신중하게 알리도록하십시오.
secure_auth=0
을 사용하여 서버 또는 클라이언트를 실행할 필요가 없습니다.MySQL 5.5 이후의 어떤 버전에서도 작동합니다.
이 방법은 암호를 개별적으로 설정할 필요가 있기 때문에, DBA는 각 계정을 별도로 업데이트합니다. DBA는 계정마다 다른 암호를 선택하도록하십시오.
'user1'@'localhost'
가 업그레이드 된 계정 중 하나라고 가정합니다. DBA는 다음과 같이 변경하도록하십시오.
SET old_passwords = 0;
UPDATE mysql.user SET plugin = 'mysql_native_password'
Password = PASSWORD ( ' DBA-chosen-password
')
WHERE (User, Host) = ( 'user1', 'localhost');
FLUSH PRIVILEGES;
또한 암호를 만료하려면 대신 다음 문을 사용합니다.
SET old_passwords = 0;
UPDATE mysql.user SET plugin = 'mysql_native_password'
Password = PASSWORD ( ' DBA-chosen-password
') password_expired ='Y '
WHERE (User, Host) = ( 'user1', 'localhost');
FLUSH PRIVILEGES;
다음 DBA는 사용자에게 새 암호를 알려하여 암호를 사용하여 서버에 연결하여 새 암호를 선택하기 위해 다음 문을 실행하도록 사용자에게 요구하도록하십시오.
SET old_passwords = 0;
SET PASSWORD = PASSWORD ( ' user-chosen-password
');
업그레이드하는 계정마다 반복합니다.