ป้ายกำกับ: Pii

PII columns ในมุมมองของ Database Design, กฎหมายคุ้มครองข้อมูลส่วนบุคคล (PDPA/GDPR) และความปลอดภัยสารสนเทศPII columns ในมุมมองของ Database Design, กฎหมายคุ้มครองข้อมูลส่วนบุคคล (PDPA/GDPR) และความปลอดภัยสารสนเทศ

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) จะช่วยให้ระบบของคุณมีความยืดหยุ่นและพร้อมรับมือกับการเปลี่ยนแปลงของกฎหมายคุ้มครองข้อมูลส่วนบุคคลในอนาคตได้อย่างสมบูรณ์