SQL
-- ตัวอย่างการสร้างตารางที่ระบุ PII และกำหนดประเภทข้อมูลที่เหมาะสม<br>CREATE TABLE user_profiles (\n user_id UUID PRIMARY KEY,\n full_name VARCHAR(255) NOT NULL,\n email TEXT UNIQUE NOT NULL,\n phone_number VARCHAR(20) -- ควรถูกเข้ารหัส<br>\n);
หากต้องการจำลองการ Masking ในระดับแอปพลิเคชันหรือ View เราสามารถใช้ Function ของ PostgreSQL เพื่อปกปิดข้อมูลบางส่วนได้:
SQL
-- ตัวอย่างการสร้าง View เพื่อปกปิดข้อมูล (Masking)<br>CREATE VIEW masked_user_view AS<br>SELECT<br> user_id,<br> full_name,<br> SUBSTR(email, 1, 3) || '***' || SUBSTR(email, LENGTH(email) - 2) || '***' AS masked_email,<br> phone_number<br>FROM user_profiles;
บทสรุป: หลักการออกแบบที่ยึดผู้ใช้เป็นศูนย์กลาง (Privacy by Design)
“>การออกแบบ Database ที่คำนึงถึง PII ไม่ใช่แค่การปฏิบัติตามกฎหมาย แต่คือการสร้างความน่าเชื่อถือให้กับระบบของคุณ การทำ Data Mapping และการกำหนดมาตรการเข้ารหัสที่เหมาะสมตั้งแต่ต้น (Privacy by Design) จะช่วยให้ระบบของคุณมีความยืดหยุ่นและพร้อมรับมือกับการเปลี่ยนแปลงของกฎหมายคุ้มครองข้อมูลส่วนบุคคลในอนาคตได้อย่างสมบูรณ์
“>ในฐานะ System Architect ที่ต้องออกแบบระบบระดับองค์กร การทำความเข้าใจว่าข้อมูลใดคือ ข้อมูลส่วนบุคคล (PII) ถือเป็นรากฐานที่สำคัญที่สุด ไม่ใช่แค่เรื่องของโค้ด แต่เป็นเรื่องของ ความรับผิดชอบทางกฎหมาย
“>เมื่อพูดถึง PostgreSQL หรือระบบฐานข้อมูลใด ๆ การระบุ PII Columns คือการกำหนดว่าคอลัมน์ใดบ้างใน Schema ของเราที่บรรจุข้อมูลที่สามารถระบุตัวตนบุคคลได้ ซึ่งการจัดการส่วนนี้ให้ถูกต้องตั้งแต่ขั้นตอน Design ไม่เพียงแต่ป้องกันการละเมิด PDPA/GDPR เท่านั้น แต่ยังเป็นหลักการของ Privacy by Design อีกด้วย
1. PII Columns คืออะไรในมุมมองของ Database Schema?
“>PII (Personally Identifiable Information) คือข้อมูลที่ใช้ระบุตัวตนได้ ไม่ว่าจะเป็นรหัสประจำตัวประชาชน (citizen_id), อีเมล (email), หรือแม้แต่ IP Address การที่คอลัมน์เหล่านี้ถูกจัดเก็บในตารางฐานข้อมูล ทำให้เราต้องปฏิบัติตามมาตรการความปลอดภัยที่เข้มงวดที่สุด
ใน PostgreSQL การระบุ PII Columns ไม่ได้จบแค่การสร้างตาราง แต่ต้องรวมถึงการกำหนดระดับการเข้าถึง (Access Control) และการเข้ารหัส (Encryption) ตั้งแต่ระดับคอลัมน์ (Column-level Encryption) เลยทีเดียว
2. เทคนิคการจัดการ PII ใน PostgreSQL เพื่อความปลอดภัย
“>การเก็บ PII อย่างปลอดภัยต้องใช้เทคนิคหลายชั้น (Defense in Depth) โดยเฉพาะใน PostgreSQL เราควรพิจารณา 3 แนวทางหลัก:
- Encryption (การเข้ารหัส): สำหรับข้อมูลที่ละเอียดอ่อนมาก เช่น เลขบัตรประชาชน ควรใช้การเข้ารหัสแบบ AES-256 และจัดเก็บ Key ในระบบจัดการ Key (KMS) แยกต่างหาก
- Masking/Tokenization: แทนที่จะเก็บข้อมูลจริงทั้งหมด เราสามารถเก็บค่าที่ถูกปกปิด (Masked) หรือค่าแทน (Token) เช่น แสดงแค่ 4 ตัวท้ายของเบอร์โทรศัพท์ (
***-***-1234) - Access Control (RBAC): จำกัดสิทธิ์การเข้าถึงข้อมูล PII ให้เฉพาะบริการ (Service Account) หรือผู้ใช้ที่จำเป็นต้องใช้เท่านั้น
SQL
-- ตัวอย่างการสร้างตารางที่ระบุ PII และกำหนดประเภทข้อมูลที่เหมาะสม<br>CREATE TABLE user_profiles (\n user_id UUID PRIMARY KEY,\n full_name VARCHAR(255) NOT NULL,\n email TEXT UNIQUE NOT NULL,\n phone_number VARCHAR(20) -- ควรถูกเข้ารหัส<br>\n);“>
หากต้องการจำลองการ Masking ในระดับแอปพลิเคชันหรือ View เราสามารถใช้ Function ของ PostgreSQL เพื่อปกปิดข้อมูลบางส่วนได้:
SQL
-- ตัวอย่างการสร้าง View เพื่อปกปิดข้อมูล (Masking)<br>CREATE VIEW masked_user_view AS<br>SELECT<br> user_id,<br> full_name,<br> SUBSTR(email, 1, 3) || '***' || SUBSTR(email, LENGTH(email) - 2) || '***' AS masked_email,<br> phone_number<br>FROM user_profiles;
บทสรุป: หลักการออกแบบที่ยึดผู้ใช้เป็นศูนย์กลาง (Privacy by Design)
“>การออกแบบ Database ที่คำนึงถึง PII ไม่ใช่แค่การปฏิบัติตามกฎหมาย แต่คือการสร้างความน่าเชื่อถือให้กับระบบของคุณ การทำ Data Mapping และการกำหนดมาตรการเข้ารหัสที่เหมาะสมตั้งแต่ต้น (Privacy by Design) จะช่วยให้ระบบของคุณมีความยืดหยุ่นและพร้อมรับมือกับการเปลี่ยนแปลงของกฎหมายคุ้มครองข้อมูลส่วนบุคคลในอนาคตได้อย่างสมบูรณ์