6.3.6 암호 만료 및 샌드 박스 모드
MySQL 5.6에서는 데이터베이스 관리자가 계정 암호를 만료하고 사용자가 자신의 암호를 재설정 할 것을 요구할 수있다 비밀번호 만료 기능이 도입되어 있습니다. 직후의 설명에서는 암호 만료의 현재 동작에 대해 설명합니다. 그 후, 어떤 기능이 어떤 상황에서 사용할 수 있는지를 이해하는 데 도움이 배경으로이 기능 개발에 대한 여러 버전에 걸쳐 자세히 설명합니다. 그러나 모든 기능 및 수정을 활용할 수있게하려면 가능하면 MySQL 5.6의 최신 버전을 사용하도록하십시오.
암호 만료 동작
계정의 암호를 만료하려면 ALTER USER
문을 사용합니다. 예 :
ALTER USER 'myuser'@ 'localhost'PASSWORD EXPIRE;
이 문은 password_expired
컬럼을 'Y'
로 설정하면 지정된 계정에 연결된 mysql.user
테이블의 행을 변경합니다. 이렇게하면 계정이 열려있는 현재의 연결은 영향을받지 않습니다. 그 계정을 사용하는 후속 각 연결에서 서버는 클라이언트를 절단하거나 "샌드 박스 모드"에서 클라이언트를 처리합니다. 이 모드에서는 만료 된 암호를 재설정하는 데 필요한 작업 만 서버에서 클라이언트로 허용됩니다. (서버에서 실행되는 작업은 클라이언트와 서버 모두의 설정에 따라 달라집니다.)
서버가 클라이언트를 절단하면 ER_MUST_CHANGE_PASSWORD_LOGIN
오류가 반환됩니다.
shell>mysql -u myuser -p
Password :******
ERROR 1862 (HY000) : Your password has expired. To log in you must change it using a client that supports expired passwords.
서버가 클라이언트를 샌드 박스 모드로 전환하면 이러한 작업이 클라이언트 세션에서 허용됩니다.
클라이언트는
SET PASSWORD
를 사용하여 계정의 암호를 재설정 할 수 있습니다. 이것은password_expired
컬럼을'N'
으로 설정하여 현재 계정에 연결된mysql.user
테이블의 행을 변경합니다. 비밀번호가 재설정되면 서버는 세션 및 계정을 사용하는 후속 연결에 대한 일반 액세스를 복원합니다.비밀번호를 현재 값으로 설정하면, "재설정"할 수 있습니다. 적절한 정책으로 다른 암호를 선택하는 것이 좋습니다.
클라이언트는
SET
문을 사용할 수 있습니다. 예를 들어,old_passwords
시스템 변수를 기본값과 다른 값으로 설정해야하는 해시 형식이 계정의 암호로 사용되는 경우 암호를 재설정하기 전에이 필요할 수 있습니다.
세션에서 허용되지 않는 조작의 경우, 서버는 ER_MUST_CHANGE_PASSWORD
오류를 반환합니다.
mysql> USE test;
ERROR 1820 (HY000) : You must SET PASSWORD before executing this statement
이미 설명했듯이, 서버가 암호가 만료되는 클라이언트를 절단 할 것인지, 샌드 박스 모드로 전환 할 것인가는 클라이언트 설정 및 서버 설정의 조합에 따라 다릅니다. 다음의 설명에서는 관련 설정과 그들이 어떻게 상호 작용하는지에 대해 설명합니다.
클라이언트는 특정 클라이언트가 만료 비밀번호에 샌드 박스 모드를 처리 할 수 있는지 여부를 나타냅니다. C 클라이언트 라이브러리를 사용하는 클라이언트의 경우이를 실행하기위한 두 가지 방법이 있습니다.
연결 전에
MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
플래그를mysql_options()
에 전달합니다.arg = 1; result = mysql_options (mysql, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS & arg);
연결시
CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS
플래그를mysql_real_connect()
에 전달합니다.mysql = mysql_real_connect (mysql, host, user, password "test" port, unix_socket, CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS);
기타 MySQL 커넥터는 샌드 박스 모드를 처리 할 준비가되어 있는지를 보여주는 독특한 규칙이 준비되어 있습니다. 관련 커넥터의 문서를 참조하십시오.
서버 측에서 클라이언트가 만료 암호를 처리 할 수있는 것을 나타내고있는 경우, 서버는 샌드 박스 모드로 전환합니다.
클라이언트가 만료 암호를 처리 할 수있는 것을 나타 않은 경우 (또는 그 같이 나타낼 수없는 이전 버전의 클라이언트 라이브러리를 사용하는 경우) 서버의 액션은 disconnect_on_expired_password
시스템 변수의 값에 따라 다릅니다.
disconnect_on_expired_password
가 활성화 (기본값)하면 서버는 클라이언트를 절단하고ER_MUST_CHANGE_PASSWORD_LOGIN
오류를 반환합니다.disconnect_on_expired_password
이 비활성화되어있는 경우 서버는 클라이언트를 샌드 박스 모드로 전환합니다.
위의 클라이언트 설정 및 서버 설정은 만료 암호가있는 계정에만 적용됩니다. 클라이언트가 만료되지 않은 암호를 사용하여 연결하면 서버는 클라이언트를 정상적으로 처리합니다.
암호 만료 기능 개발
다음의 타임 라인에는 다양한 암호 만료 기능이 추가 된 버전을 제공합니다.
MySQL 5.6.6 : 암호 만료의 초기 구현
DBA 계정의 암호를 만료 할 수 있도록 password_expired
열이 mysql.user
테이블에 도입되었습니다. 이 컬럼의 기본값은 'N'
(만료 없음)입니다.
password_expired
컬럼을 'Y'
로 설정하기위한 SQL 인터페이스로서 ALTER USER
문이 도입되었습니다.
만료 암호를 가진 계정을 사용하여 연결하면 SET PASSWORD
명령문 만 허용된다 "샌드 박스 모드"로 전환합니다. 기타 문의 경우, 서버는 ER_MUST_CHANGE_PASSWORD
오류를 반환합니다. 이 목표는 서버에서 다른 작업이 허용되기 전에 클라이언트에 암호 재설정을 강제하는 것입니다. SET PASSWORD
는 계정의 암호를 재설정하고 password_expired
을 'N'
으로 설정합니다.
초기 구현은 ALTER USER
를 사용하면 mysql.user
테이블의 Password
컬럼이 빈 문자열로 설정되는 버그가 있습니다. 즉,이 문을 사용하려면 사용자는 MySQL 5.6.7까지 기다려야합니다.
MySQL 5.6.7 :
Password
컬럼이 빈 문자열로 설정되지 않도록, ALTER USER
가 고정되었습니다.
MySQL 5.6.8 :
ALTER USER
는 준비된 문으로 사용할 수 있습니다.
mysqladmin password 만료 된 네이티브 또는 이전 기본 암호를 가진 계정의 암호를 설정할 수있게되었습니다.
SET PASSWORD
이외에 클라이언트가 SET
문을 실행할 수 있도록 허용되도록 샌드 박스 모드가 변경되었습니다. SET
금지하여 old_passwords
를 설정해야 클라이언트가 암호를 재설정 할 수 없습니다. 또한이를 통해 연결시 SET
를 광범위하게 사용하여 세션 환경을 초기화하는 일부 커넥터도 사용할 수 없습니다.
MySQL 5.6.9 :
문에 지정된 계정과 클라이언트가 인증 된 계정이 일치하는 경우에만 SET PASSWORD
가 허용되도록 샌드 박스 모드가 변경되었습니다.
MySQL 5.6.10 :
만료 암호가있는 계정 클라이언트 연결을 서버가 처리하는 방법을보다 효과적으로 제어 할 수 있도록되어 클라이언트가 만료 암호를 처리 할 수있는 여부를 나타내는 것이 허용되도록 샌드 박스 모드가 변경되었습니다 했다.
서버가 만료 암호를 가진 계정을 처리하는 방법을 제어하는
disconnect_on_expired_password
시스템 변수가 추가되었습니다.C API 클라이언트 라이브러리에
mysql_options()
에 대한MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
과mysql_real_connect()
에 대한CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS
두 플래그가 추가되었습니다. 각 플래그를 사용하면 클라이언트 프로그램이 만료 암호가있는 계정에 샌드 박스 모드를 처리 할 수 있는지 여부를 나타낼 수 있습니다.MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS
이 mysqltest에서는 무조건 mysql에서는 대화 형 모드에서 mysqladmin에서는 첫 번째 명령이password
의 경우에 사용합니다.ER_MUST_CHANGE_PASSWORD_LOGIN
오류가 추가되었습니다. 클라이언트가 연결되면 서버는이 오류를 반환합니다.
MySQL 서버와 C API 클라이언트 라이브러리의 샌드 박스 모드로 이러한 변화에 맞추어 커넥터를 변경을 준수하기위한 수정 노력도 시작하고 있습니다.