Security Best Practices → TLS, Encryption, Row-Level Security (RLS)

Sharing is caring!

ความปลอดภัย (Security) เป็นหัวใจสำคัญในการใช้งานฐานข้อมูล PostgreSQL โดยเฉพาะเมื่อระบบต้องรองรับข้อมูลที่มีความอ่อนไหว เช่น ข้อมูลลูกค้า การเงิน หรือข้อมูลภายในองค์กร บทความนี้จะอธิบาย Best Practices ด้าน Security ได้แก่ TLS/SSL, Encryption, และ Row-Level Security (RLS)

1. การใช้ TLS/SSL

TLS (Transport Layer Security) หรือ SSL เป็นการเข้ารหัสข้อมูลที่ส่งระหว่าง Client ↔ Server เพื่อป้องกันการดักฟัง (Sniffing) และ Man-in-the-middle attack

การตั้งค่าใน postgresql.conf

# เปิดใช้งาน SSL
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'rootCA.crt'
  

การตั้งค่าใน pg_hba.conf

# บังคับใช้ SSL
hostssl all all 0.0.0.0/0 cert clientcert=1
  

2. การเข้ารหัสข้อมูล (Encryption)

PostgreSQL รองรับการเข้ารหัสข้อมูลได้หลายระดับ เช่น – Encryption at Rest (เข้ารหัสไฟล์ฐานข้อมูล) – Encryption in Transit (TLS) – Column-level Encryption ผ่าน Extension เช่น pgcrypto

ตัวอย่างการใช้ pgcrypto

CREATE EXTENSION pgcrypto;

-- เก็บข้อมูลเข้ารหัส
INSERT INTO users (id, name, email, secret_data)
VALUES (1, 'Alice', '[email protected]', pgp_sym_encrypt('1234-5678-9012-3456', 'encryption-key'));

-- อ่านข้อมูลแบบถอดรหัส
SELECT id, name, pgp_sym_decrypt(secret_data::bytea, 'encryption-key') AS decrypted_data
FROM users;
  

3. Row-Level Security (RLS)

RLS เป็นฟีเจอร์ที่อนุญาตให้กำหนดสิทธิ์การเข้าถึงข้อมูลในระดับ Row เช่น กำหนดให้ User เห็นเฉพาะข้อมูลของตัวเอง

การเปิดใช้งาน RLS

ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
  

การสร้าง Policy

CREATE POLICY user_order_policy
ON orders
FOR SELECT
USING (user_id = current_user_id());
  

ทดสอบการใช้งาน

-- ผู้ใช้ A จะเห็นเฉพาะ Order ของตัวเอง
SELECT * FROM orders;
  

4. Security Best Practices

  • บังคับใช้ TLS/SSL ทุกการเชื่อมต่อ
  • ใช้ pgcrypto สำหรับข้อมูลอ่อนไหว
  • เปิดใช้ Row-Level Security เมื่อมีหลาย User ใช้ตารางร่วมกัน
  • จำกัดสิทธิ์ผู้ใช้ตามหลัก Least Privilege
  • เปิดการ Audit Log เพื่อตรวจสอบความผิดปกติ

5. ตัวอย่างการตั้งค่า TLS + RLS ร่วมกัน

-- pg_hba.conf
hostssl ordersdb app_user 0.0.0.0/0 cert clientcert=1

-- เปิด RLS
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;

-- Policy
CREATE POLICY user_order_policy
ON orders
FOR SELECT
USING (user_id = current_user_id());
  

สรุป

การเพิ่มความปลอดภัยให้ PostgreSQL ไม่ได้ซับซ้อน แต่ต้องมีการวางแผนที่ดี TLS ช่วยป้องกันข้อมูลระหว่างทาง, Encryption ช่วยป้องกันข้อมูลภายใน, และ Row-Level Security ช่วยป้องกันการเข้าถึงข้อมูลที่ไม่ควรเข้าถึง หากนำทั้งหมดนี้มาใช้ร่วมกัน จะช่วยให้ระบบปลอดภัยและสอดคล้องกับมาตรฐานองค์กร

SEO Keywords

PostgreSQL Security,Postgres TLS Setup,Postgres pgcrypto Encryption,Postgres RLS Example,Database Security Best Practices,Encrypt Data PostgreSQL,Postgres Secure Connection

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *