Data Masking: ซ่อนข้อมูล nhạy cảmด้วย CONCAT + SUBSTR + REPEAT
แสดงแค่ 5 ตัวอักษรแรก แล้วทับส่วนที่เหลือด้วย # (hash) โดยใช้ REPEAT('#', length - 5)
สร้างตารางและข้อมูล
mysql> create table DemoTable1410 (
-> Password varchar(80)
-> );
Query OK, 0 rows affected (0.51 sec)
mysql> insert into DemoTable1410 values('John12345678');
mysql> insert into DemoTable1410 values('Carol_897');
mysql> insert into DemoTable1410 values('David_5647383');
ข้อมูลต้นฉบับ
+---------------+ | Password | +---------------+ | John12345678 | | Carol_897 | | David_5647383 | +---------------+
คำสั่ง UPDATE Masking
mysql> update DemoTable1410
-> set Password = concat(substr(Password, 1, 5), repeat('#', char_length(Password) - 5));
Query OK, 3 rows affected (0.16 sec)
ข้อมูลหลัง Masking
+---------------+ | Password | +---------------+ | John1####### | | Carol#### | | David######## | +---------------+
อธิบายการทำงาน
substr(Password, 1, 5)— ดึง 5 ตัวแรกchar_length(Password) - 5— คำนวณจำนวนตัวอักษรที่เหลือrepeat('#', n)— สร้างสตริง # จำนวน n ตัวconcat(...)— รวมเข้าด้วยกัน
รูปแบบ Masking อื่นๆ
| รูปแบบ | SQL | ตัวอย่าง (John12345678) |
|---|---|---|
| แสดง 4 ตัวแรก ทับท้าย | CONCAT(SUBSTR(pwd,1,4), REPEAT('*', LENGTH(pwd)-4)) | John********** |
| แสดง 4 ตัวแรก 4 ตัวท้าย ทับกลาง | CONCAT(SUBSTR(pwd,1,4), REPEAT('*', LENGTH(pwd)-8), SUBSTR(pwd,-4)) | John****5678 |
| Email masking | CONCAT(SUBSTR(email,1,1), REPEAT('*', LENGTH(email)-INSTR(email,'@')-1), SUBSTR(email, INSTR(email,'@'))) | j***@domain.com |
| Credit card | CONCAT(REPEAT('*', LENGTH(cc)-4), SUBSTR(cc,-4)) | ************5678 |