สวัสดีครับผู้อ่านทุกท่าน วันนี้ผมขอมาแชร์วิธีการทำ Data Masking แบบว่องไว สำหรับข้อมูลที่จัดเก็บอยู่ใน MongoDB โดยใช้เทคนิคการสร้าง View
สำหรับท่านที่ยังไม่ทราบว่า Data masking คืออะไร และมีความเกี่ยวข้องอะไรกับ พ.ร.บ.คุ้มครองข้อมูลส่วนบุคคล (PDPA) ผมแนะนำให้ลองอ่านเพิ่มเติมจากบล็อกนี้ครับ
มาลองทำ Workshop เล็ก ๆ กันครับ
ก่อนอื่นเลย เราต้องมีข้อมูลตั้งต้น สำหรับใช้ทำ Workshop นี้ก่อนครับ เริ่มจากสร้าง Collection ชื่อ persons ด้วย Command line ดังนี้เลยครับ
use workshop
Insert ข้อมูลตัวอย่างลงใน Collection ชื่อ persons
db.persons.insertMany(
[
{
"firstName": "Surasak",
"lastName": "Hanlamyuang",
"idCardNo": "9999999999999",
"mobile": "0999999999"
},
{
"firstName": "Maegan",
"lastName": "Cantrell",
"idCardNo": "8888888888888",
"mobile": "0888888888"
}
]
)
หลังจากเพิ่มข้อมูลตัวอย่างแล้ว จะได้ข้อมูลปรากฏดังภาพที่ 1 ครับ
ขั้นตอนต่อไป คือการสร้าง Pipeline สำหรับการทำ Data masking
โดยใน Workshop นี้ เราจะมาลอง masking ข้อมูลด้วยเทคนิคง่าย ๆ โดยมีเงื่อนไขดังนี้ครับ
firstName เราจะปกปิดข้อมูลทั้งหมด เช่นจาก Surasak เป็น xxxxx
lastName เราจะปกปิดข้อมูลทั้งหมดเช่นเดียวกันกับ firstName
idCardNo เราจะปกปิดบางส่วน เช่นจาก 9999999999999 เป็น xxxxxxxxxxx99
mobile เราจะปกปิดบางส่วน เช่นจาก 0999999999 เป็น xxxxxxxx99
ประกาศตัวแปรชื่อ maskingPerson ดังตัวอย่าง Command line ด้านล่าง เพื่อระบุเงื่อนไขการปกปิดข้อมูลให้สอดคล้องกับเงื่อนไขด้านบน
const maskingPerson = {
firstName: {
$concat: [
"xxxxx",
{ $substrCP: ["$firstName", { $strLenCP: "$firstName" }, 0] },
],
},
lastName: {
$concat: [
"xxxxx",
{ $substrCP: ["$lastName", { $strLenCP: "$lastName" }, 0] },
],
},
idCardNo: {
$concat: [
"xxxxxxxxxxx",
{
$substrCP: ["$idCardNo", 11, 2],
},
],
},
mobile: {
$concat: [
"xxxxxxxx",
{
$substrCP: ["$mobile", 8, 2],
},
],
},
};
จากนั้น ประกาศตัวแปรชื่อ pipeline เพื่อมาจัดเก็บสิ่งที่เราได้ตั้งค่าไว้ในตัวแปรชื่อ maskingPerson จากขั้นตอนก่อนหน้า
const pipeline = [{ $set: maskingPerson }];
กรณีที่มีมากกว่าหนึ่ง pipeline สามารถนำมารวมกันในตัวแปรชื่อ pipeline ได้ เช่น
const pipeline = [
{ $set: maskingPerson },
{ $set: maskingAddress }
];
เมื่อสร้าง Pipeline เสร็จแล้ว เราจะลองนำ pipeline ดังกล่าวมาใช้งานกับ View
ซึ่ง View นี้ เราจะตั้งชื่อว่า persons_view ซึ่งอนุญาตให้ใครก็ตามที่มีสิทธิ์เข้าถึง Collection persons จะต้องไม่เห็นข้อมูลส่วนบุคคล ที่จัดเก็บอยู่ใน MongoDB
สร้าง View ด้วยคำสั่งด้านล่างนี้
db.createView("persons_view", "persons", pipeline);
หลังจากที่สร้าง View เสร็จแล้ว ลองเปิด View ดังกล่าวขึ้นมาดู จะพบว่าข้อมูลที่สำคัญ ได้ถูกปกปิดตามเงื่อนไขที่เราตั้งไว้ เรียบร้อยแล้ว
จากตัวอย่างที่ผมยกมา Workshop นี้ เป็นเพียงหนึ่งในแนวทางของการทำ Data masking แบบง่าย ๆ ครับ ยังมีอีกหลายวิธีที่สามารถนำมาประยุกต์ใช้งานได้อีก เพื่อทำให้ข้อมูลมีความปลอดภัยมากยิ่งขึ้น
สามารถดูรายละเอียดเพิ่มเติมได้ที่นี่ครับ
ขอบคุณที่ติดตามอ่านมาจนจบครับ แล้วพบกันใหม่ในบทความหน้า สวัสดีครับ