PlusMagi's Blog By Pitt Phunsanit Backend,Database Authentication, Authenticator, Authorization, Login

Authentication, Authenticator, Authorization, Login

🔐 Authentication, Authorization, และ Login: ไขความแตกต่างด้วยมุมมอง PostgreSQL

ในโลกของการพัฒนาซอฟต์แวร์และความปลอดภัยทางไซเบอร์ คำศัพท์อย่าง Authentication, Authorization, และ Authenticator มักถูกใช้สลับกันจนทำให้เกิดความสับสน แต่ในความเป็นจริงแล้ว ทั้งสี่คำนี้คือชั้นความปลอดภัยที่ทำงานต่อเนื่องกันในระบบ โดยเฉพาะเมื่อเราออกแบบระบบด้วย PostgreSQL การทำความเข้าใจบทบาทของแต่ละคำจะช่วยให้คุณสร้างระบบที่แข็งแกร่งและปลอดภัยอย่างแท้จริง

🔍 1. Login: จุดเริ่มต้นของการเข้าถึง (The Action)

Login คือ การกระทำ (Action) ที่ผู้ใช้ริเริ่มขึ้น เป็นการที่ผู้ใช้พยายามเข้าสู่ระบบด้วยการกรอกข้อมูลประจำตัว (เช่น Username และ Password) ซึ่งเป็นเพียงการส่งคำขอเข้าใช้ระบบเท่านั้น ยังไม่ได้มีการยืนยันตัวตนใด ๆ เกิดขึ้น

ตัวอย่างใน PostgreSQL: การที่ผู้ใช้คลิกปุ่ม ‘เข้าสู่ระบบ’ และส่งค่า ‘user_id’ และ ‘password’ ไปยังเซิร์ฟเวอร์

🛡️ 2. Authentication: การตรวจสอบตัวตน (Who Are You?)

Authentication (AuthN) คือ กระบวนการตรวจสอบตัวตน ว่าบุคคลที่อ้างตัวว่าเป็นใครนั้น เป็นตัวจริงหรือไม่ หลังจากที่ระบบได้รับข้อมูลจากขั้นตอน Login แล้ว ระบบจะต้องนำข้อมูลนั้นไปตรวจสอบกับแหล่งข้อมูลที่เชื่อถือได้ (เช่น ตารางผู้ใช้ใน PostgreSQL) เพื่อยืนยันความถูกต้องของตัวตน

ตัวอย่างใน PostgreSQL: ระบบจะรันคำสั่ง SQL เพื่อตรวจสอบรหัสผ่านที่แฮช (Hashed Password) ว่าตรงกับที่เก็บไว้ในฐานข้อมูลหรือไม่

SQL

-- ตรวจสอบว่า Username และ Hash Password ตรงกันหรือไม่<br>SELECT user_id, role FROM users<br>WHERE username = 'john_doe' AND password_hash = '$2a$10$...' LIMIT 1;<br>

🔑 3. Authenticator: ตัวช่วยยืนยันตัวตนเพิ่ม (How Do You Prove It?)

Authenticator คือ ปัจจัยเสริม (Factor) ที่ใช้เพิ่มความปลอดภัยให้กับการตรวจสอบตัวตน (AuthN) โดยทั่วไปคือ Multi-Factor Authentication (MFA) เช่น การใช้รหัส OTP (One-Time Password) ที่สร้างโดยแอปพลิเคชันภายนอก (เช่น Google Authenticator) เพื่อพิสูจน์ว่าผู้ใช้มีอุปกรณ์ที่เชื่อมโยงกับบัญชีจริง

ตัวอย่างใน PostgreSQL: ระบบจะตรวจสอบรหัส OTP ที่ผู้ใช้กรอก โดยเปรียบเทียบกับรหัสที่คำนวณจากเวลาปัจจุบัน (Time-based One-Time Password: TOTP) และเก็บค่านี้ไว้ชั่วคราว

SQL

-- ตรวจสอบรหัส OTP ที่ได้รับจากแอปฯ<br>SELECT * FROM user_tokens<br>WHERE user_id = 123 AND token = '123456' AND expires_at > NOW();<br>

👑 4. Authorization: การกำหนดสิทธิ์ (What Can You Do?)

Authorization (AuthZ) คือ กระบวนการกำหนดขอบเขตสิทธิ์ ที่จะเกิดขึ้นหลังจากที่ระบบมั่นใจแล้วว่าผู้ใช้ผ่าน Authentication แล้ว (รู้ตัวตนแล้ว) ระบบจะต้องตรวจสอบว่าผู้ใช้คนนี้มีสิทธิ์ในการกระทำใด ๆ กับทรัพยากรใดบ้าง

ตัวอย่างใน PostgreSQL: การใช้คำสั่ง `GRANT` และ `REVOKE` เพื่อกำหนดว่าผู้ใช้กลุ่ม ‘basic_user’ สามารถ `SELECT` ข้อมูลสินค้าได้เท่านั้น แต่ไม่สามารถ `DELETE` ได้

SQL

-- 1. กำหนดสิทธิ์ในการอ่านข้อมูลสินค้า<br>GRANT SELECT ON products TO 'basic_user';<br>-- 2. ลบสิทธิ์การแก้ไขข้อมูลสินค้า<br>REVOKE UPDATE ON products FROM 'basic_user';<br>

✅ บทสรุป: ลำดับความปลอดภัยที่สมบูรณ์

ระบบความปลอดภัยที่สมบูรณ์จะทำงานเป็นลำดับขั้น: Login (ส่งคำขอ) $ ightarrow$ Authentication (ตรวจสอบรหัสผ่าน) $ ightarrow$ Authenticator (ตรวจสอบ OTP) $ ightarrow$ Authorization (ตรวจสอบสิทธิ์การเข้าถึงข้อมูล) การทำความเข้าใจความแตกต่างนี้จะช่วยให้คุณออกแบบสถาปัตยกรรมที่ใช้ประโยชน์จากฟีเจอร์ความปลอดภัยของ PostgreSQL ได้อย่างเต็มที่