• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 1. 일반적인 보안 문제
    2. MySQL 권한 시스템
    3. MySQL 사용자 계정 관리
    1. 사용자 이름과 암호
    2. 사용자 계정 추가
    3. 사용자 계정 삭제
    4. 계정 자원 제한 설정
    5. 계정 암호 지정
    6. 암호 만료 및 샌드 박스 모드
    7. 플러그 인증
    8. MySQL에서 사용 가능한 인증 플러그인
    9. 프록시 사용자
    10. 보안 연결을 위해 SSL 사용
    11. SSH를 사용하여 Windows에서 MySQL에 대한 원격 연결
    12. MySQL Enterprise Audit 로그 플러그인
    13. SQL 기반의 MySQL 계정 활동 감사
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

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 클라이언트 라이브러리의 샌드 박스 모드로 이러한 변화에 맞추어 커넥터를 변경을 준수하기위한 수정 노력도 시작하고 있습니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved