Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 모든 레코드를 MD5 해시 값으로 업데이트하는 쿼리 작성법

MySQL에서 기존 데이터를 MD5 해시 값으로 일괄 업데이트하려면 내장 함수인 MD5()를 활용하면 됩니다. 이 함수는 입력된 문자열을 32자리 16진수 해시 값으로 변환해 주며, 비밀번호 저장 등에 널리 사용됩니다.

1. 테이블 생성하기

먼저 예제로 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable1887
    (
    Password text,
    HashPassword text
    );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1887(Password) values('John@9089');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1887(Password) values('90987_Carol');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1887(Password) values('656464_David_4343');
Query OK, 1 row affected (0.00 sec)

3. 현재 테이블 상태 확인하기

SELECT 문으로 저장된 데이터를 조회해 보겠습니다.

mysql> select * from DemoTable1887;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다. 아직 HashPassword 컬럼에는 값이 없으므로 NULL로 표시됩니다.

+-------------------+--------------+
| Password          | HashPassword |
+-------------------+--------------+
| John@9089         |         NULL|
| 90987_Carol       |         NULL|
| 656464_David_4343 |         NULL|
+-------------------+--------------+
3 rows in set (0.00 sec)

4. MD5() 함수로 전체 레코드 업데이트하기

이제 UPDATE 문과 MD5() 함수를 조합하여 Password 컬럼의 값을 해시화한 뒤 HashPassword 컬럼에 저장하는 쿼리를 실행합니다.

mysql> update DemoTable1887 set HashPassword=md5(Password);
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3 Warnings: 0

WHERE 절을 생략했기 때문에 테이블의 모든 행이 한 번에 업데이트됩니다. 특정 조건의 레코드만 변경하고 싶다면 WHERE 절을 추가하면 됩니다.

5. 업데이트 결과 확인하기

테이블을 다시 조회하여 변경 사항을 확인해 보겠습니다.

mysql> select * from DemoTable1887;

실행 결과, 각 비밀번호가 32자리 MD5 해시 문자열로 성공적으로 변환된 것을 확인할 수 있습니다.

+-------------------+----------------------------------+
| Password          | HashPassword                     |
+-------------------+----------------------------------+
| John@9089         | 7f92a7e09ab1a0cd3f36ec164f035c9a |
| 90987_Carol       | 1578fa8c47f0e53a898c8ada5c0111b4 |
| 656464_David_4343 | e5ec2bd2cb55b2252be7ca9eb546659e |
+-------------------+----------------------------------+
3 rows in set (0.00 sec)

참고 사항

MD5는 빠르고 간편하지만, 현재는 충돌 공격에 취약한 것으로 알려져 있어 보안이 중요한 서비스에서는 SHA-256 같은 더 강력한 해시 알고리즘 또는 bcrypt, Argon2 같은 전용 비밀번호 해싱 함수를 사용하는 것이 권장됩니다. MySQL에서는 SHA2(column, 256) 함수를 사용해 SHA-256 해시를 생성할 수 있습니다.