Loading...
MySQL 9.5 Reference Manual 9.5의 8.2.16 Server Handling of Expired Passwords의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL은 패스워드 만료 기능을 제공하여, 데이터베이스 관리자가 사용자가 자신의 패스워드를 재설정하도록 요구할 수 있게 합니다. 패스워드는 수동으로 만료시킬 수 있으며, 자동 만료 정책에 따라서도 만료시킬 수 있습니다(자동 만료 정책에 대해서는 Section 8.2.15, “Password Management”를 참조하십시오).
ALTER USER 문은 계정 패스워드 만료를 가능하게 합니다. 예를 들면 다음과 같습니다:
1ALTER USER 'myuser'@'localhost' PASSWORD EXPIRE;
만료된 패스워드를 가진 계정을 사용하는 각 커넥션에 대해, 서버는 클라이언트의 연결을 끊거나 클라이언트를 “sandbox mode”로 제한합니다. Sandbox mode에서는 서버가 만료된 패스워드를 재설정하는 데 필요한 작업만을 클라이언트가 수행할 수 있도록 허용합니다. 서버가 어떤 동작을 수행하는지는 이후에 설명하는 것처럼 클라이언트 및 서버 설정 모두에 따라 달라집니다.
서버가 클라이언트의 연결을 끊는 경우, ER_MUST_CHANGE_PASSWORD_LOGIN 에러를 반환합니다:
1$> mysql -u myuser -p 2Password: ****** 3ERROR 1862 (HY000): Your password has expired. To log in you must 4change it using a client that supports expired passwords.
서버가 클라이언트를 sandbox mode로 제한하는 경우, 해당 클라이언트 세션 내에서는 다음과 같은 작업이 허용됩니다:
ALTER USER 또는
SET PASSWORD를 사용하여 계정 패스워드를 재설정할 수 있습니다. 이 작업이 완료되면, 서버는 해당 세션에 대해 정상적인 접근을 복구하며, 또한 이 계정을 사용하는 이후의 커넥션에 대해서도 정상적인 접근을 복구합니다.참고
만료된 패스워드를 현재 값과 동일하게 설정하여 “재설정”하는 것도 가능하지만, 보안 정책상 더 바람직한 방법은 다른 패스워드를 선택하는 것입니다. DBA는 적절한 패스워드 재사용 정책을 설정함으로써 재사용을 방지할 수 있습니다. Password Reuse Policy를 참조하십시오.
세션 내에서 허용되지 않는 어떤 작업에 대해서든, 서버는 ER_MUST_CHANGE_PASSWORD 에러를 반환합니다:
1mysql> USE performance_schema; 2ERROR 1820 (HY000): You must reset your password using ALTER USER 3statement before executing this statement. 4 5mysql> SELECT 1; 6ERROR 1820 (HY000): You must reset your password using ALTER USER 7statement before executing this statement.
이는 기본적으로 인터랙티브하게 mysql 클라이언트를 실행했을 때 일반적으로 발생하는 동작입니다. 기본 설정상 이러한 실행은 sandbox mode로 설정됩니다. 정상 동작을 재개하려면 새로운 패스워드를 선택하십시오.
배치 모드와 같은 비인터랙티브 방식으로 mysql 클라이언트를 실행하는 경우, 패스워드가 만료되었으면 서버는 일반적으로 클라이언트의 연결을 끊습니다. 비인터랙티브 mysql 실행이 연결을 유지하여(즉, sandbox mode에서 허용되는 문을 사용해) 패스워드를 변경할 수 있도록 하려면, mysql 명령에 --connect-expired-password 옵션을 추가하십시오.
앞에서 언급했듯이, 서버가 만료된 패스워드를 가진 클라이언트의 연결을 끊을지 sandbox mode로 제한할지는 클라이언트와 서버 설정의 조합에 따라 달라집니다. 다음 설명에서는 관련 설정과 그 상호 작용 방식에 대해 설명합니다.
참고
이 설명은 패스워드가 만료된 계정에만 적용됩니다. 클라이언트가 만료되지 않은 패스워드를 사용하여 연결하는 경우, 서버는 해당 클라이언트를 일반적인 방식으로 처리합니다.
클라이언트 측에서, 특정 클라이언트는 만료된 패스워드에 대해 sandbox mode를 처리할 수 있는지를 나타냅니다. C 클라이언트 라이브러리를 사용하는 클라이언트의 경우, 이를 수행하는 방법은 두 가지가 있습니다:
mysql_options()에 MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS 플래그를 전달합니다:1bool arg = 1; 2mysql_options(mysql, 3 MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, 4 &arg);
이 방법은 mysql 클라이언트 내부에서 사용되는 기술로, 인터랙티브하게 실행되었거나
--connect-expired-password
옵션과 함께 실행된 경우
MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS를 활성화합니다.
mysql_real_connect()에 CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS 플래그를 전달합니다:1MYSQL mysql; 2mysql_init(&mysql); 3if (!mysql_real_connect(&mysql, 4 host, user, password, db, 5 port, unix_socket, 6 CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS)) 7{ 8 ... handle error ... 9}
기타 MySQL 커넥터들은 sandbox mode 처리 가능 여부를 나타내기 위한 자체적인 규칙을 가지고 있습니다. 관심 있는 커넥터의 문서를 참조하십시오.
서버 측에서는, 클라이언트가 만료된 패스워드를 처리할 수 있음을 나타내면, 서버는 해당 클라이언트를 sandbox mode로 둡니다.
클라이언트가 만료된 패스워드를 처리할 수 있음을 나타내지 않거나(또는 그러한 표시가 불가능한 이전 버전의 클라이언트 라이브러리를 사용하는 경우), 서버의 동작은 disconnect_on_expired_password 시스템 변수 값에 따라 달라집니다:
disconnect_on_expired_password가 활성화되어 있는 경우(기본값), 서버는
ER_MUST_CHANGE_PASSWORD_LOGIN
에러와 함께 클라이언트의 연결을 끊습니다.
disconnect_on_expired_password가 비활성화되어 있는 경우, 서버는 클라이언트를 sandbox mode로 둡니다.
8.2.15 Password Management
8.2.17 Pluggable Authentication