• 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. 함수와 연산자
  • 1. 함수와 연산자 참조
    2. 식 평가 형식 변환
    3. 연산자
    4. 제어 흐름 함수
    5. 문자열 함수
    6. 수치 함수와 연산자
    7. 날짜 및 시간 함수
    8. MySQL에서 사용되는 달력
    9. Full-Text 검색 기능
    10. 캐스트 함수와 연산자
    11. XML 함수
    12. 비트 함수
    13. 암호화 함수와 압축 함수
    14. 정보 함수
    15. 공간 분석 함수
    16. 글로벌 트랜잭션 ID와 함께 사용되는 함수
    17. MySQL Enterprise Encryption 기능
    18. 기타 함수
    19. GROUP BY 절에서 사용되는 함수와 수식
    20. 정밀 계산
  • 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 새로운 기능

12.13 암호화 함수와 압축 함수

표 12.17 암호화 함수

이름 설명
AES_DECRYPT () AES를 사용하여 해독합니다
AES_ENCRYPT () AES를 사용하여 암호화합니다
COMPRESS () 이진 문자열로 결과를 반환합니다
DECODE () ENCODE ()를 사용하여 암호화 된 문자열을 디코딩합니다
DES_DECRYPT () 문자열을 해독합니다
DES_ENCRYPT () 문자열을 암호화합니다
ENCODE () 문자열을 인코딩합니다
ENCRYPT () 문자열을 암호화합니다
MD5 () MD5 체크섬을 계산합니다
OLD_PASSWORD() (deprecated 5.6.5) 4.1 이전 PASSWORD 구현의 값을 돌려줍니다
PASSWORD () 암호 문자열을 계산하여 반환합니다
RANDOM_BYTES () 임의의 바이트 벡터를 반환합니다
SHA1() , SHA() SHA-1 160 비트 체크섬을 계산합니다
SHA2 () SHA-2 체크섬을 계산합니다
UNCOMPRESS () 압축 된 문자열을 압축 해제합니다
UNCOMPRESSED_LENGTH () 압축 이전의 문자열 길이를 반환합니다
VALIDATE_PASSWORD_STRENGTH () 암호의 강도를 판단합니다

많은 암호화 함수와 압축 함수는 결과에 임의의 바이트 값이 포함되어있을 가능성이있는 문자열이 반환됩니다. 이러한 결과를 저장할 경우, VARBINARY 또는 BLOB 이진 문자열 데이터 유형의 컬럼을 사용합니다. 이는 후행 공백을 제거하고 문자 세트를 변환하거나하면 데이터 값이 변경 될 가능성이 있다는 문제를 해결할 수 있습니다. 예를 들어, 비 이진 문자열 데이터 형식 ( CHAR , VARCHAR , TEXT )을 사용하는 경우에 이러한 문제가 발생할 수 있습니다.

일부 암호화 함수는 ASCII 문자 ( MD5() , OLD_PASSWORD() , PASSWORD() , SHA() , SHA1() , SHA2() ) 문자열이 반환됩니다. MySQL 5.6의 경우 반환 값은 character_set_connection 및 collation_connection 시스템 변수에서 결정된 문자 집합 및 정렬 순서를 포함한 비 이진 문자열입니다.

MD5() 또는 SHA1() 등의 함수가 바이너리 문자열로 16 진수 문자열을 반환 버전에서는 반환 값을 대문자로 변환하거나 대문자와 소문자가 구별되지 않는 방법으로 그대로 비교할 수 없습니다. 값을 비 이진 문자열로 변환해야합니다. 섹션 12.10 「캐스트 함수 및 연산자 " 에서 이진 문자열 변환의 설명을 참조하십시오.

응용 프로그램에서 16 진수 문자열을 반환하는 함수 ( MD5() 또는 SHA1() 등)에서 값을 저장하려면 UNHEX() 를 사용하여 16 진수 표현을 바이너리로 변환 해, 그 결과를 BINARY( N ) 컬럼에 저장하면보다 효율적인 저장 및 비교를 제공합니다. 16 진수의 각 쌍에는 바이너리 형식으로 1 바이트가 필요하기 때문에, N 의 값은 16 진수 문자열의 길이에 따라 다릅니다. N 은 MD5() 값의 경우 16, SHA1() 의 경우는 20입니다. SHA2() 의 경우 N 의 범위는 결과의 원하는 비트 길이를 지정하는 인수에 따라 28에서 32까지입니다.

utf8 문자 집합 (문자마다 4 바이트 사용됩니다)이 사용되는 컬럼에 값이 포함되는 경우, 16 진수 문자열을 CHAR 컬럼에 저장할 때 크기의 페널티는 최소 2 회, 최대 8 회입니다. 또한 문자열을 저장하면 값이 커지고, 문자 집합의 데이터 정렬 규칙을 고려할 필요가 있기 때문에 비교가 느려집니다.

응용 프로그램에서 MD5() 문자열 값을 CHAR(32) 컬럼에 저장된다고 가정합니다.

 CREATE TABLE md5_tbl (md5_val CHAR (32), ...);
 INSERT INTO md5_tbl (md5_val, ...) VALUES (MD5 ( 'abcdef'), ...);

16 진수 문자열을보다 컴팩트 한 형식으로 변환하려면 다음과 같이 대신 UNHEX() 및 BINARY(16) 가 사용되도록 응용 프로그램을 변경합니다.

 CREATE TABLE md5_tbl (md5_val BINARY (16), ...);
 INSERT INTO md5_tbl (md5_val, ...) VALUES (UNHEX (MD5 ( 'abcdef')) ...);

해쉬 함수가 두 개의 다른 입력 값에 같은 값을 생성하는 매우 드문 경우에 대응할 수 있도록 응용 프로그램이 준비 될 것입니다. 충돌을 감지하는 방법의 하나는 해시 컬럼을 기본 키로하는 것입니다.

참고

MD5 및 SHA-1 알고리즘의 악용 알려져 있습니다. 대신,이 섹션에서 설명하는 기타 암호화 함수 ( SHA2() 등) 중 하나를 사용하는 것을 고려하십시오.

주의

SSL 연결을 사용하지 않으면 암호화 함수의 인수로 지정된 암호 및 기타 기밀 값은 일반 텍스트로 MySQL 서버로 전송됩니다. 또한 이러한 값은 기록 할 MySQL 로그에 표시됩니다. 이러한 유형의 노출을 방지하기 위해 응용 프로그램은 클라이언트 측에서 비밀 값을 암호화하고 서버에 전송할 수 있습니다. 같은 고려 사항이 암호화 키에도 적용됩니다. 이러한 노출을 방지하기 위해 응용 프로그램은 저장 프로 시저를 사용하여 서버 측에서 값을 암호화하고 해독 할 수 있습니다.

  • AES_DECRYPT ( crypt_str , key_str [, init_vector )

    이 함수는 공식의 AES (Advanced Encryption Standard) 알고리즘을 사용하여 데이터를 해독합니다. 자세한 내용은 AES_ENCRYPT() 의 설명을 참조하십시오.

    MySQL 5.6.17 시점에서는 옵션의 초기화 벡터 인수 init_vector 를 사용할 수 있습니다. 그 버전은 AES_DECRYPT() 가 사용되는 문은 문 기반 복제에 대해 안전하지 쿼리 캐시에 저장할 수 없습니다.

  • AES_ENCRYPT ( str , key_str [, init_vector )

    AES_ENCRYPT() 및 AES_DECRYPT() 는 AES (Advanced Encryption Standard) 알고리즘 (이전에는 "Rijndael"라고했습니다)를 사용한 데이터 암호화 및 복호화가 구현됩니다. AES 표준은 다양한 키의 길이가 허용됩니다. 기본적으로 이러한 함수에서 키 길이가 128 비트 AES가 구현됩니다. MySQL 5.6.17 시점에서 나중에 설명하도록 사용할 수있는 키의 길이는 196 또는 256 비트입니다. 키의 길이는 성능과 보안 사이에서 트레이드 오프입니다.

    AES_ENCRYPT() 는 키 문자열 key_str 를 사용하여 문자열 str 을 암호화하고 암호화 된 출력을 포함한 바이너리 문자열을 반환합니다. AES_DECRYPT() 는 키 문자열 key_str 를 사용하여 암호화 된 문자열 crypt_str 을 해독하고 원래 일반 텍스트 문자열을 반환합니다. 함수 인수 중 하나가 NULL 의 경우, 함수에서 NULL 이 반환됩니다.

    str 및 crypt_str 인수는 임의의 길이로 할 수 있으며, AES 등의 블록 기반의 알고리즘은 필요에 따라 블록의 배수가되도록 자동으로 패딩이 str 에 추가됩니다. 이 패딩은 AES_DECRYPT() 함수에 의해 자동으로 삭제됩니다. crypt_str 의 길이는 다음 공식을 사용하여 계산할 수 있습니다.

     16 * (trunc ( string_length / 16) + 1)
    

    키 길이가 128 비트 인 경우 key_str 인수에 열쇠를 건네주는 가장 안전한 방법은 완전히 임의의 128 비트 값을 생성하고 그것을 이진 값으로 전달됩니다. 예 :

     INSERT INTO t
     VALUES (1, AES_ENCRYPT ( 'text', UNHEX ( 'F3229A0B371ED2D9441B830D21A390C3')));
    

    암호를 사용하면 암호를 해시하여 AES 키를 생성 할 수 있습니다. 예 :

     INSERT INTO t VALUES (1, AES_ENCRYPT ( 'text', SHA2 ( 'My secret passphrase', 512)));
    

    암호 또는 암호는 직접 crypt_str 에 전달하지 않고 먼저 해시하십시오. 이 문서의 이전 버전에서는 기존의 접근 방식이 제안되고 있었지만, 여기에 예제가 더 안전하기 때문에 권장되지 않습니다.

    AES_DECRYPT() 에서 잘못된 날짜 또는 부정한 패딩이 검출 된 경우는 NULL 이 반환됩니다. 그러나 입력 데이터 또는 키가 무효가되어있는 경우, AES_DECRYPT() 에서 NULL 이 아닌 값 (쓰레기 가능성도 있습니다)가 반환 될 수 있습니다.

    MySQL 5.6.17 시점에서는 AES_ENCRYPT() 및 AES_DECRYPT() 에서 블록 암호화 모드의 제어가 허용되는 옵션 init_vector 초기화 벡터 인수가 지정됩니다.

    • block_encryption_mode 시스템 변수는 블록 기반의 암호화 알고리즘의 모드를 제어합니다. 기본값은 128 비트의 키 길이와 ECB 모드를 사용하여 암호화를 나타내는 aes-128-ecb 입니다. 이 변수에 허용되는 값은 섹션 5.1.4 "서버 시스템 변수" 를 참조하십시오.

    • 옵션 init_vector 인수는 필요로하는 블록 암호화 모드를 지원하는 초기화 벡터가 제공됩니다.

    옵션 init_vector 인수가 필요한 모드에서는 16 바이트 이상의 길이로해야합니다 (16 이상의 바이트는 무시됩니다). init_vector 이 누락 된 경우 오류가 발생합니다.

    init_vector 이 필요없는 모드에서는 이것이 무시되고 지정된 경우 경고가 생성됩니다.

    RANDOM_BYTES(16) 를 호출하면 초기화 벡터에 사용되는 바이트 무작위 문자열을 생성 할 수 있습니다. 초기화 벡터가 필요한 암호화 모드에서 암호화 및 복호화에 동일한 벡터를 사용해야합니다.

    mysql> SET block_encryption_mode = 'aes-256-cbc';
    mysql> SET @key_str = SHA2('My secret passphrase',512);
    mysql> SET @init_vector = RANDOM_BYTES(16);
    mysql> SET @crypt_str = AES_ENCRYPT('text',@key_str,@init_vector);
    mysql> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);
    +-----------------------------------------------+
    | AES_DECRYPT(@crypt_str,@key_str,@init_vector) |
    +-----------------------------------------------+
    | text                                          |
    +-----------------------------------------------+
    

    다음 표에는 허용되는 각 블록 암호화 모드 지원되는 SSL 라이브러리 및 초기화 벡터 인수가 필수인지 여부를 표시합니다.

    블록 암호화 모드 모드가 지원되는 SSL 라이브러리 초기화 벡터가 필요
    ECB OpenSSL, yaSSL 아니오
    CBC OpenSSL, yaSSL 예
    CFB1 OpenSSL 예
    CFB8 OpenSSL 예
    CFB128 OpenSSL 예
    OFB OpenSSL 예

    MySQL 5.6.17에서는 AES_ENCRYPT() 또는 AES_DECRYPT() 가 사용되는 문은 문 기반 복제에 대해 안전하지 쿼리 캐시에 저장할 수 없습니다.

  • COMPRESS ( string_to_compress )

    문자열을 압축하고 그 결과를 바이너리 문자열로 반환합니다. 이 함수를 사용하려면 MySQL이 zlib 등의 압축 라이브러리를 사용하여 컴파일되어 있어야합니다. 그렇지 않으면 반환 값은 항상 NULL 입니다. 압축 된 문자열은 UNCOMPRESS() 를 사용하여 압축을 해제 할 수 있습니다.

     mysql> SELECT LENGTH(COMPRESS(REPEAT('a',1000)));
             -> 21
     mysql> SELECT LENGTH(COMPRESS(''));
             -> 0
     mysql> SELECT LENGTH(COMPRESS('a'));
             -> 13
     mysql> SELECT LENGTH(COMPRESS(REPEAT('a',16)));
             -> 15
    

    압축 된 문자열의 내용은 다음의 방법으로 저장됩니다.

    • 빈 문자열은 빈 문자열로 저장됩니다.

    • 비어 있지 않은 문자열은 4 바이트 길이의 압축되지 않은 문자열로 저장됩니다 (낮은 바이트가 1 번째) 그 후에 압축 된 문자열이 계속됩니다. 문자열이 공백 문자로 끝나는 경우는 결과가 CHAR 또는 VARCHAR 컬럼에 저장되어 있어도 후행 공백 문자가 삭제되는 문제가 해결되도록 " . "문자가 추가됩니다. (단, CHAR 와 VARCHAR 등의 비 이진 문자열 데이터 형식을 사용하여 압축 된 문자열을 저장하면 문자 집합 변환이 발생할 가능성이 있기 때문에 어떤 경우에도 권장되지 않습니다. 대신, VARBINARY 또는 BLOB 이진 문자열 컬럼을 사용하십시오.)

  • DECODE ( crypt_str , pass_str )

    암호화 된 문자열 crypt_str 암호로 pass_str 를 사용하여 해독합니다. crypt_str 는 ENCODE() 에서 반환 된 문자열하도록하십시오.

  • DES_DECRYPT ( crypt_str [, key_str )

    DES_ENCRYPT() 를 사용하여 암호화 된 문자열을 해독합니다. 오류가 발생하면이 함수는 NULL 을 반환합니다.

    이 함수는 MySQL이 SSL 지원으로 구성되어있는 경우에만 작동합니다. 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오.

    key_str 인수가 지정되어 있지 않은 경우, DES_DECRYPT() 는 암호화 된 문자열의 첫 번째 바이트를 조사하여 원래의 문자열을 암호화 할 때 사용한 DES 키 번호를 특정하고 DES 키 파일에서 메시지를 해독하는 열쇠를 읽습니다. 이 기능은 사용자가 SUPER 권한을 가지고 있어야합니다. 키 파일은 --des-key-file 서버 옵션을 사용하여 지정할 수 있습니다.

    이 함수를 key_str 인수에 전달하면 그 문자열이 메시지를 해독하는 열쇠로 사용됩니다.

    crypt_str 인수가 암호화 된 문자열로 표시되지 않는 경우, MySQL에서는 지정된 crypt_str 가 반환됩니다.

  • DES_ENCRYPT ( str [, { key_num | key_str }])

    Triple-DES 알고리즘을 사용하여 지정된 열쇠로 문자열을 암호화합니다.

    이 함수는 MySQL이 SSL 지원으로 구성되어있는 경우에만 작동합니다. 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오.

    사용하는 암호화 키는 지정된 경우, DES_ENCRYPT() 에 두 번째 인수에 따라 선택됩니다. 인수를 붙이지 않는 경우는 DES 키 파일의 첫 번째 키가 사용됩니다. key_num 인수를 지정하면 DES 키 파일의 지정된 열쇠 번호 (0 - 9)가 사용됩니다. key_str 인수를 지정하면 지정된 키 문자열을 사용하여 str 이 암호화됩니다.

    키 파일은 --des-key-file 서버 옵션을 사용하여 지정할 수 있습니다.

    반환되는 문자열은 첫 번째 문자가 CHAR(128 | key_num ) 인 이진 문자열입니다. 오류가 발생한 경우 DES_ENCRYPT() 은 NULL 을 반환합니다.

    암호화 된 키를 인식하기 쉽게하기 위해 128이 추가됩니다. 문자열 키를 사용하는 경우 key_num 는 127입니다.

    결과 문자열의 길이는 다음 공식으로 지정됩니다.

     new_len = orig_len + (8 - ( orig_len % 8)) + 1
    

    DES 키 파일의 각 행의 형식은 다음과 같습니다.

     key_num des_key_str
    

    각 key_num 값은 0 에서 9 까지의 범위 내의 숫자로해야합니다. 파일의 행은 임의의 순서로 지정할 수 있습니다. des_key_str 는 메시지를 암호화하는 데 사용되는 문자열입니다. 숫자와 키 사이에는 적어도 하나의 공백을 넣도록하십시오. 첫 번째 열쇠는 DES_ENCRYPT() 에 키 인수를 지정하지 않은 경우에 사용되는 기본 키입니다.

    FLUSH DES_KEY_FILE 문에 키 파일에서 새로운 키 값을 읽을 수 있도록 MySQL에 지시 할 수 있습니다. 여기에는 RELOAD 권한이 필요합니다.

    기본 키 세트를 가지는 장점은 이러한 값을 해독 할 권리를 최종 사용자에게 부여하지 않고 암호화 된 컬럼 값의 유무를 확인하는 방법이 응용 프로그램에 제공되는 것입니다.

     mysql> SELECT customer_address FROM customer_table
          > WHERE crypted_credit_card = DES_ENCRYPT('credit_card_number');
    
  • ENCODE ( str , pass_str )

    암호로 pass_str 을 사용하여 str 를 암호화합니다. 결과는 str 과 같은 길이의 이진 문자열입니다. 결과를 해독하려면 DECODE() 를 사용합니다.

    ENCODE() 함수를 사용해서는 없게되어 있습니다. 아직 ENCODE() 를 사용할 필요가있는 경우에는 위험을 줄이기 위해 함께 salt 값을 사용해야합니다. 예 :

     ENCODE ( 'plaintext', CONCAT ( 'my_random_salt', 'my_secret_password'))
    

    암호를 업데이트 할 때마다 새로운 임의의 salt 값을 사용해야합니다.

  • ENCRYPT ( str [, salt ])

    UNIX crypt() 시스템 호출을 사용하여 str 를 암호화하고 이진 문자열을 반환합니다. salt 인수는 두 개 이상의 문자를 포함하는 문자열을해야합니다. 그렇지 않으면, 결과는 NULL 이됩니다. salt 인수가 지정되지 않은 경우 임의의 값이 사용됩니다.

     mysql> SELECT ENCRYPT('hello');
             -> 'VxuFAJXVARROc'
    

    적어도 일부 시스템에서는 ENCRYPT() 은 str 의 처음 8 문자 이외의 모든 것을 무시합니다. 이 동작은 기반이되는 crypt() 시스템 호출의 구현에 따라 다릅니다.

    시스템 호출은 0 바이트로 끝나는 문자열이 요구되기 때문에 ucs2 , utf16 , utf16le 또는 utf32 멀티 바이트 문자 집합을 포함 ENCRYPT() 의 사용은 권장되지 않습니다.

    시스템에서 crypt() 를 사용할 수없는 경우 (Windows의 경우) ENCRYPT() 는 항상 NULL 을 반환합니다.

  • MD5 ( str )

    문자열의 MD5 128 비트 체크섬을 계산합니다. 이 값은 32 자리의 16 진수 문자열로 반환됩니다. 인수가 NULL 인 경우에는 NULL 입니다. 예를 들어, 반환 값을 해시 키로 사용할 수 있습니다. 효율적인 해시 값의 저장 내용은이 섹션의 시작 부분에 나와있는 참고를 참조하십시오.

    반환 값은 연결 문자 셋의 비 이진 문자열입니다.

     mysql> SELECT MD5('testing');
             -> 'ae2b1fca515949e5d54fb22b8ed95575'
    

    이것은 "RSA Data Security, Inc. MD5 Message-Digest Algorithm"입니다.

    이 섹션의 시작 부분에 나열된 MD5 알고리즘에 대한 참고를 참조하십시오.

  • OLD_PASSWORD ( str )

    OLD_PASSWORD() 는 보안을 개선하기 위해 MySQL 4.1에서 PASSWORD() 의 구현이 변경되었을 때 추가되었습니다. OLD_PASSWORD() 는 PASSWORD() 의 4.1 이전의 구현의 값을 문자열로 반환합니다. 이것은 버전 5.6의 MySQL 서버에 연결해야하는 4.1 이전의 클라이언트를 차단하지 않고, 그 클라이언트의 암호를 재설정하도록 허용하는 것입니다. 섹션 6.1.2.4 "MySQL에서 암호 해시" 를 참조하십시오.

    반환 값은 연결 문자 셋의 비 이진 문자열입니다.

    참고

    4.1 이전의 해시 방식을 사용하는 암호는 기본 암호 해시 방식을 사용하는 암호보다 안전하지 않기 때문에 사용하지 않도록하십시오. 4.1 이전 암호는 사용되지 않으며, 이러한 지원은 향후 MySQL 릴리스에서 제거 될 예정입니다. 마지막으로, OLD_PASSWORD() 도 사용되지 않습니다.

  • PASSWORD ( str )

    일반 텍스트 암호 str 에서 계산 한 해시 된 암호 문자열을 반환합니다. 반환 값은 연결 문자 셋의 비 이진 문자열입니다. 인수가 NULL 의 경우는 NULL 입니다. 이 함수는 mysql.user 부여 테이블에 저장하는 MySQL 패스워드를 암호화 할 때 서버에서 사용되는 알고리즘에 대한 SQL 인터페이스입니다.

    old_passwords 시스템 변수는 PASSWORD() 함수에서 사용되는 암호 해시 방법을 제어합니다. 이것은 IDENTIFIED BY 절을 사용하여 암호를 지정하는 CREATE USER 및 GRANT 문이 실행되는 암호 해시에 영향을줍니다.

    다음 표는 old_passwords 의 허용되는 값 각각의 값에 대한 암호 해시 방식 및 각각의 방식으로 해시 된 암호를 사용하는 인증 플러그인을 나타냅니다. 이 값은 MySQL 5.6.6 이후에 허용됩니다. 5.6.6 이전에서는 허용되는 값은 0 (또는 OFF )와 1 (또는 ON )입니다.

    값 암호 해시 방식 연관된 인증 플러그인
    0 MySQL 4.1 기본 해시 mysql_native_password
    1 4.1 이전 ( "이전") 해시 mysql_old_password
    2 SHA-256 해시 sha256_password

    old_passwords=1 의 경우, PASSWORD( str ) 는 OLD_PASSWORD( str ) 와 같은 값을 반환합니다. 후자의 함수는 old_passwords 값에 의해 영향을받지 않습니다.

    mysql> SET old_passwords = 0;
    mysql> SELECT PASSWORD('mypass'), OLD_PASSWORD('mypass');
    +-------------------------------------------+------------------------+
    | PASSWORD('mypass')                        | OLD_PASSWORD('mypass') |
    +-------------------------------------------+------------------------+
    | *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 | 6f8c114b58f2ce9e       |
    +-------------------------------------------+------------------------+
    
    mysql> SET old_passwords = 1;
    mysql> SELECT PASSWORD('mypass'), OLD_PASSWORD('mypass');
    +--------------------+------------------------+
    | PASSWORD('mypass') | OLD_PASSWORD('mypass') |
    +--------------------+------------------------+
    | 6f8c114b58f2ce9e   | 6f8c114b58f2ce9e       |
    +--------------------+------------------------+
    

    SHA-256 암호 해시 ( old_passwords=2 )는 PASSWORD() 의 결과를 비 결정적으로 임의의 salt 값이 사용됩니다. 그 결과,이 함수가 사용되는 문은 문 기반 복제 안전하지 쿼리 캐시에 저장할 수 없습니다.

    PASSWORD() 에서 실행되는 암호화는 단방향 (되돌릴 수 없습니다). 암호화 유형은 Unix 암호에 사용되는 것과 동일하지 않습니다. 그 유형을 사용하려면 ENCRYPT() 를 사용합니다.

    참고

    PASSWORD() 함수는 MySQL 서버의 인증 시스템에 사용됩니다. 자신의 응용 프로그램에서는 사용하지 않도록하십시오. 그래서 대신 MD5() 또는 SHA2() 를 사용하십시오. 응용 프로그램의 보안 암호 처리 및 인증 보안에 대한 자세한 내용은 RFC 2195의 섹션 2 ( "Challenge-Response Authentication Mechanism (CRAM) ') 도 참조하십시오.

    참고

    4.1 이전의 해시 방식을 사용하는 암호는 기본 암호 해시 방식을 사용하는 암호보다 안전하지 않기 때문에 사용하지 않도록하십시오. 4.1 이전 암호는 사용되지 않으며, 이러한 지원은 향후 MySQL 릴리스에서 제거 될 예정입니다. 그 결과, PASSWORD() 에서 4.1 이전 암호 해시를 생성하는 old_passwords=1 도 비추천입니다. 계정 업그레이드 지침은 섹션 6.3.8.3 "4.1 이전 암호 해시 방식과 mysql_old_password 플러그인에서 마이그레이션" 을 참조하십시오.

    주의

    상황에 따라서는 서버 로그 또는 클라이언트 쪽 ~/.mysql_history 등의 기록 파일에 PASSWORD() 를 호출 문이 기록 될 수 있습니다. 이것은 그 정보에 대한 읽기 권한을 가지고있는 사용자라면 누구든지 일반 텍스트 암호를 읽을 수 있다는 것을 의미합니다. 이것이 서버 로그에서 발생하는 조건 및이를 제어하는 방법은 섹션 6.1.2.3 "암호 및 로깅" 을 참조하십시오. 클라이언트 측 로깅에 대한 유사한 정보는 섹션 4.5.1.3 "mysql 로그" 를 참조하십시오.

  • RANDOM_BYTES ( len )

    이 함수는 SSL 라이브러리 (OpenSSL 또는 yaSSL)의 난수 생성기를 사용하여 생성 된 임의의 len 바이트의 이진 문자열을 반환합니다. len 에서 허용되는 값은 1에서 1024까지의 범위입니다. 값이이 범위를 벗어나면 RANDOM_BYTES() 는 경고를 생성하고 NULL 을 반환합니다.

    RANDOM_BYTES() 를 사용하면 AES_DECRYPT() 및 AES_ENCRYPT() 함수에 초기화 벡터를 제공 할 수 있습니다. 이러한 맥락에서 사용하려면 len 을 16 이상으로 할 필요가 있습니다. 더 큰 값도 허용되지만 16을 넘는 바이트는 무시됩니다.

    RANDOM_BYTES() 는 그 결과를 비 결정적으로 임의의 값을 생성합니다. 그 결과,이 함수가 사용되는 문은 문 기반 복제에 대해 안전하지 쿼리 캐시에 저장할 수 없습니다.

    이 함수는 MySQL 5.6.17 시점에서 사용 가능합니다.

  • SHA1( str ) , SHA( str )

    RFC 3174 (Secure Hash Algorithm)에 설명 된대로 문자열의 SHA-1 160 비트 체크섬을 계산합니다. 이 값은 40 자리의 16 진수 문자열로 반환됩니다. 인수가 NULL 인 경우에는 NULL 입니다. 이 함수를 사용하는 예를 들어, 해시 키가있을 수 있습니다. 효율적인 해시 값의 저장 내용은이 섹션의 시작 부분에 나와있는 참고를 참조하십시오. SHA1() 는 암호를 저장하는 암호화 함수로도 사용할 수 있습니다. SHA() 는 SHA1() 의 동의어입니다.

    반환 값은 연결 문자 셋의 비 이진 문자열입니다.

     mysql> SELECT SHA1('abc');
             -> 'a9993e364706816aba3e25717850c26c9cd0d89d'
    

    SHA1() 는 MD5() 와 동일하지만 암호화에 관해서는보다 안전하다고 생각됩니다. 그러나이 섹션의 시작 부분에 나열된 MD5 및 SHA-1 알고리즘에 대한 참고를 참조하십시오.

  • SHA2 ( str , hash_length )

    SHA-2 제품군에 대한 해시 함수 (SHA-224, SHA-256, SHA-384 및 SHA-512)를 계산합니다. 1 번째의 인수는 해시되는 일반 텍스트 문자열입니다. 두 번째 인수는 결과의 원하는 비트 길이가 지정됩니다. 값은 224,256,384,512 또는 0 (256과 동일합니다) 할 필요가 있습니다. 인수 중 하나가 NULL 이거나 해시의 길이가 허용되는 값 중 하나가 아닌 경우에는 반환 값이 NULL 입니다. 그렇지 않으면 함수의 결과가 원하는 비트 수가 포함 된 해시 값입니다. 효율적인 해시 값의 저장 내용은이 섹션의 시작 부분에 나와있는 참고를 참조하십시오.

    반환 값은 연결 문자 셋의 비 이진 문자열입니다.

     mysql> SELECT SHA2('abc', 224);
             -> '23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7'
    

    이 함수는 MySQL이 SSL 지원으로 구성되어있는 경우에만 작동합니다. 섹션 6.3.10 "안전한 연결을위한 SSL 사용" 을 참조하십시오.

    SHA2() 는 MD5() 또는 SHA1() 보다 암호화에 관해서는보다 안전하다고 생각됩니다.

  • UNCOMPRESS ( string_to_uncompress )

    COMPRESS() 함수에서 압축 된 문자열을 압축 해제합니다. 인수가 압축 된 값이 아닌 경우는 결과가 NULL 입니다. 이 함수를 사용하려면 MySQL이 zlib 등의 압축 라이브러리를 사용하여 컴파일되어 있어야합니다. 그렇지 않으면 반환 값은 항상 NULL 입니다.

     mysql> SELECT UNCOMPRESS(COMPRESS('any string'));
             -> 'any string'
     mysql> SELECT UNCOMPRESS('any string');
             -> NULL
    
  • UNCOMPRESSED_LENGTH ( compressed_string )

    압축 된 문자열이 압축되기 전의 길이를 반환합니다.

     mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));
             -> 30
    
  • VALIDATE_PASSWORD_STRENGTH ( str )

    일반 텍스트 암호를 나타내는 인수가 지정된 경우,이 함수는 암호의 강도를 나타내는 정수를 반환합니다. 반환 값은 0 (약점)에서 100 (강도)까지의 범위 내입니다.

    암호는 한층 엄격해진 테스트의 대상이며, 반환 값은 다음 표와 같이 어떤 테스트를 통과했는지를 나타냅니다.

    비밀번호 테스트 반환 값
    길이 <4 0
    길이 ≥ 4 및 < validate_password_length 25
    정책 1을 충족 ( LOW ) 50
    정책 2를 충족 ( MEDIUM ) 75
    정책 3을 충족 ( STRONG ) 100

    VALIDATE_PASSWORD_STRENGTH() 가 암호를 평가 validate_password 플러그인으로 실행됩니다. 이 플러그인이 설치되어 있지 않은 경우, 함수는 항상 0을 반환합니다. validate_password 플러그인의 설치 내용은 섹션 6.1.2.6 "비밀번호 확인 플러그인" 을 참조하십시오. 암호 테스트에 영향을 미치는 매개 변수를 확인하거나 구성하려면 validate_password 플러그인으로 구현되는 시스템 변수를 확인하거나 설정합니다. 섹션 6.1.2.6.2 "비밀번호 확인 플러그인의 옵션 및 변수" 를 참조하십시오.

    이 함수는 MySQL 5.6.6에서 추가되었습니다.


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