• 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. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    1. 계정 관리 문
    1. ALTER USER 구문
    2. CREATE USER 구문
    3. DROP USER 구문
    4. GRANT 구문
    5. RENAME USER 구문
    6. REVOKE 구문
    7. SET PASSWORD 구문
    2. 테이블 유지 보수 문
    3. 플러그인 및 사용자 정의 함수 문
    4. SET 구문
    5. SHOW 구문
    6. 기타 관리 문
    8. MySQL 유틸리티 문
  • 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 새로운 기능

13.7.1.2 CREATE USER 구문

CREATE USER user_specification [, user_specification] ...

user_specification:
    user [ identified_option ]

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED BY PASSWORD 'hash_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin AS 'hash_string'
} 

CREATE USER 문은 새로운 MySQL 계정을 만듭니다. 이미 존재하는 계정에 오류가 발생합니다. 이 문을 사용하려면 mysql 데이터베이스에 대한 글로벌 CREATE USER 권한 또는 INSERT 권한이 있어야합니다. 각 계정에 대해 CREATE USER 는 권한이없는 새 줄을 mysql.user 테이블에 만들고 그 계정에 인증 플러그인을 할당합니다. 사용되는 구문에 따라 CREATE USER 는 해당 계정에 암호를 할당 할 수 있습니다.

각 user_specification 절은 계정 이름과 해당 계정을 사용하여 클라이언트 인증 방법에 대한 정보로 구성됩니다. CREATE USER 구문이 부분은 GRANT 와 공유되기 때문에 여기서의 설명은 GRANT 에도 적용됩니다.

각 계정 이름은 섹션 6.2.3 "계정 이름 지정" 에 설명되어있는 형식이 사용됩니다. 예 :

 CREATE USER 'jeffrey'@ 'localhost'IDENTIFIED BY 'mypass';

계정 이름의 사용자 이름 부분 만 지정한 경우 '%' 의 호스트 이름 부분이 사용됩니다.

서버는 사용자 지정 절에 플러그인을 지정하기위한 IDENTIFIED WITH 또는 암호를 지정하기위한 IDENTIFIED BY 가 포함되어 있는지 여부에 따라 각 계정에 인증 플러그인과 암호를 다음과 같이 지정합니다 .

  • IDENTIFIED WITH 를 지정하면 서버는 지정된 플러그인을 할당하지만 그 계정에 암호가 없습니다.

  • IDENTIFIED BY 를 지정하면 서버는 플러그인을 암시 적으로 할당 더욱 지정된 암호를 지정합니다.

  • IDENTIFIED WITH 과 IDENTIFIED BY 가 모두 지정하지 않으면 서버는 플러그인을 암시 적으로 할당하지만 그 계정에 암호가 없습니다.

계정에 암호가없는 경우 해당 계정의 mysql.user 테이블 행의 Password 컬럼이 비어 있습니다. 이것은 안전하지 않습니다. 암호를 설정하려면 SET PASSWORD 를 사용합니다. 섹션 13.7.1.7 "SET PASSWORD 구문" 을 참조하십시오.

인증 플러그인 암시 적 할당은 서버는 다음의 규칙을 사용합니다.

  • MySQL 5.6.6의 시점에서 서버 계정에 기본 플러그인을 할당합니다. 이 플러그인이 해당 계정의 mysql.user 테이블 행의 plugin 컬럼의 값입니다. 기본 플러그인은 서버를 시작할 때 --default-authentication-plugin 옵션이 다른 값으로 설정되지 않는 한, mysql_native_password 입니다.

  • MySQL 5.6.6 이전에는 서버 계정에 플러그인을 할당하지 않습니다. 해당 계정의 mysql.user 테이블 행의 plugin 컬럼이 비어 있습니다.

특정 계정을 사용하는 클라이언트 연결의 경우, 서버가 해당 계정에 할당 된 인증 플러그인을 호출하면 클라이언트는 플러그인이 구현하고있는 인증 방법에 의해 요구되는 자격 증명을 지정해야 수 있습니다. 서버 (계정을 만들거나 연결시) 플러그인을 찾을 수없는 경우 오류가 발생합니다.

계정 mysql.user 테이블 행에 비어 있지 않은 plugin 열이 포함되어있는 경우 :

  • 서버는 지정된 플러그인을 사용하여 클라이언트의 연결 시도를 인증합니다.

  • SET PASSWORD 를 PASSWORD() 와 함께 사용하는 계정의 비밀번호에 대한 변경은 PASSWORD() 에 적절한 암호 해시 방식이 사용되도록 old_passwords 시스템 변수가 인증 플러그인에 필요한 값으로 설정된 상태에서 실행해야합니다. 플러그인이 mysql_old_password 인 경우는 SET PASSWORD 를 old_passwords 의 값에 관계없이 4.1 이전 암호 해시를 사용하는 OLD_PASSWORD() 와 함께 사용하여 암호를 변경할 수 있습니다.

계정 mysql.user 테이블 행에 빈 plugin 열이 포함되어있는 경우 :

  • 서버는 Password 컬럼에 저장되어있는 암호 해시 형식에 따라 mysql_native_password 또는 mysql_old_password 인증 플러그인을 사용하여 클라이언트의 연결 시도를 인증합니다.

  • SET PASSWORD 를 사용하여 계정의 비밀번호에 대한 변경은 old_passwords 가 4.1 또는 4.1 이전의 암호 해시를 나타내는 각각 0 또는 1로 설정된 상태에서 PASSWORD() 와 함께 또는 old_passwords 의 값에 관계없이 4.1 더 이전 암호 해시를 사용하는 OLD_PASSWORD() 와 함께 실행할 수 있습니다.

CREATE USER 의 예 :

  • 계정 인증 플러그인을 지정하려면 IDENTIFIED WITH auth_plugin 을 사용합니다. 플러그인 이름은 따옴표로 둘러싸인 문자열 리터럴 또는 인용되지 않은 이름 일 수 있습니다. ' auth_string ' 플러그인에 전달되는 옵션의 따옴표로 둘러싸인 문자열 리터럴입니다. 문자열의 의미는 플러그인에 의해 해석되기 때문에 그 형식은 플러그인 고유합니다. 특정 플러그인을 받아 인증 문자열 값 (있는 경우)에 대해서는 그 플러그인의 설명서를 참조하십시오.

     CREATE USER 'jeffrey'@ 'localhost'IDENTIFIED WITH mysql_native_password;
    

    서버는 계정에 지정된 인증 플러그인을 할당되지만 암호를 할당하지 않습니다. 클라이언트는 연결할 때 암호를 지정해야합니다. 그러나 암호가없는 계정은 안전하지 않습니다. 계정이 확실하게 특정 인증 플러그인을 사용하며 해당 해시 형식의 암호가 설정되도록하려면 IDENTIFIED WITH 플러그인을 명시 적으로 지정한 후 SET PASSWORD 를 사용하여 비밀번호를 설정합니다.

     CREATE USER 'jeffrey'@ 'localhost'IDENTIFIED WITH mysql_native_password;
     SET old_passwords = 0;
     SET PASSWORD FOR 'jeffrey'@ 'localhost'= PASSWORD ( 'mypass');
    

    SET PASSWORD 를 PASSWORD() 와 함께 사용하는 계정의 비밀번호에 대한 변경은 PASSWORD() 에 적절한 암호 해시 방식이 사용되도록 old_passwords 시스템 변수가 계정 인증 플러그인에 필요한 값으로 설정된 상태에서 실행해야합니다. 따라서 대신 sha256_password 또는 mysql_old_password 플러그인을 사용하려면 CREATE USER 문에서 플러그인을 지정하고 SET PASSWORD 를 사용하기 전에 old_passwords 를 각각 2 또는 1로 설정합니다. ( mysql_old_password 의 사용은 권장되지 않습니다. 이것은 비추천이며, 그 지원은 미래의 MySQL 릴리스에서 제거 될 예정입니다.)

  • 계정을 만들 때 계정의 암호를 지정하려면 IDENTIFIED BY 를 일반 텍스트 암호 상수 값을 함께 사용합니다.

     CREATE USER 'jeffrey'@ 'localhost'IDENTIFIED BY 'mypass';
    

    서버는 앞에서 설명한 바와 같이 해당 계정에 인증 플러그인을 암시 적으로 할당 또한 특정 암호를 할당합니다. 클라이언트는 연결시 특정 암호를 지정해야합니다.

    암시 적으로 할당 된 플러그인이 mysql_native_password 인 경우는 old_passwords 시스템 변수가 0으로 설정되어 있어야합니다. 그렇지 않은 경우, CREATE USER 는 플러그인에 필요한 형식으로 암호를 해시하지 않기 때문에 오류가 발생합니다.

     mysql> SET old_passwords = 1;
     mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
     ERROR 1827 (HY000) : The password hash does not have the expected
     format. Check if the correct password algorithm is being used with
     the PASSWORD () function.
    
     mysql> SET old_passwords = 0;
     mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
     Query OK, 0 rows affected (0.00 sec)
    
  • 암호 해시 값 (암호에 대해 PASSWORD() 가 반환하는 값)를 알고있는 경우에 일반 텍스트 암호를 지정하지 않도록하려면 해시 값 앞에 키워드 PASSWORD 를 지정합니다.

     CREATE USER 'jeffrey'@ 'localhost'
     IDENTIFIED BY PASSWORD '* 90E462C37378CED12064BB3388827D2BA3A9B689';
    

    서버는 앞에서 설명한 바와 같이 해당 계정에 인증 플러그인을 암시 적으로 할당 또한 특정 암호를 할당합니다. 이 암호 해시는 할당 된 플러그인에 필요한 형식이어야합니다. 클라이언트는 연결시 암호를 지정해야합니다.

  • 사용자가 암호없이 연결할 수 있도록하려면 IDENTIFIED BY 절을 포함하지 않도록합니다.

     CREATE USER 'jeffrey'@ 'localhost';
    

    서버는 앞에서 설명한 바와 같이 해당 계정에 인증 플러그인을 암시 적으로 할당되지만 암호를 할당하지 않습니다. 클라이언트는 연결할 때 암호를 지정해야합니다. 그러나 암호가없는 계정은 안전하지 않습니다. 이 문제를 해결하려면 SET PASSWORD 를 사용하여 계정의 암호를 설정합니다.

앞서 설명한 바와 같이, 플러그인 암시 적 할당은 기본 인증 플러그인에 따라 다릅니다. --default-authentication-plugin 의 허용되는 값은 mysql_native_plugin 과 sha256_password 이며, mysql_old_password 은 허용되지 않습니다. 즉, CREATE USER ... IDENTIFIED BY 구문 mysql_old_password 를 사용하는 계정을 만들 수 있도록 기본 플러그인을 구성 할 수 없습니다. mysql_old_password 를 사용하는 계정을 생성하려면 CREATE USER ... IDENTIFIED WITH 를 사용하여 플러그인을 명시 적으로 지정한 후에는 암호를 설정합니다.

 CREATE USER 'jeffrey'@ 'localhost'IDENTIFIED WITH mysql_old_password;
 SET old_passwords = 1;
 SET PASSWORD FOR 'jeffrey'@ 'localhost'= PASSWORD ( 'mypass');

그러나 mysql_old_password 은 비추천이기 때문에 이전 단계는 권장하지 않습니다.

암호 인증 플러그인 설정 자세한 내용은 섹션 6.3.5 "계정 암호 지정" 및 섹션 6.3.7 "플러그 인증" 을 참조하십시오.

중요

상황에 따라 CREATE USER 가 서버 로그 또는 클라이언트 측의 ~/.mysql_history 등의 기록 파일에 기록 될 수 있습니다. 즉, 일반 텍스트 암호가 해당 정보에 대한 읽기 권한을 가진 모든 사용자가 읽을 수 있습니다. 이것이 서버 로그에서 발생하는 조건 및이를 제어하는 방법은 섹션 6.1.2.3 "암호 및 로깅" 을 참조하십시오. 클라이언트 측 로깅에 대한 유사한 정보는 섹션 4.5.1.3 "mysql 로그" 를 참조하십시오.

중요

MySQL의 일부 버전에서는 새로운 권한 또는 기능을 추가하기 위해 부여 테이블의 구조를 변경하는 것도 있습니다. 모든 새로운 기능을 안정적으로 활용할 수 있도록하려면 새로운 버전의 MySQL에 업데이트 할 때마다 부여 테이블을 업데이트하여 최신 구조를 갖게합니다. 섹션 4.4.7 "mysql_upgrade - MySQL 테이블 체크 및 업그레이드" 를 참조하십시오.


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