ในโลกของระบบปฏิบัติการและฐานข้อมูล ไม่ว่าจะเป็น Windows หรือ PostgreSQL ต่างก็มีเครื่องมือพื้นฐานที่จำเป็นต่อการทำงาน แต่ในขณะเดียวกัน เครื่องมือเหล่านั้นก็อาจเป็น ‘ดาบสองคม’ ที่แฝงความเสี่ยงด้านความปลอดภัยร้ายแรงได้เช่นกัน หัวข้อเรื่อง net user ของ Windows เป็นตัวอย่างคลาสสิกที่แสดงให้เห็นถึงความขัดแย้งระหว่าง ‘ความสะดวกในการใช้งาน’ กับ ‘ความเสี่ยงด้านความปลอดภัย’
แม้ว่า net user จะเป็นคำสั่งที่ถูกมองว่าเป็นช่องโหว่ที่แฮกเกอร์นิยมใช้ แต่การที่ Microsoft ยังคงรักษามันไว้ ไม่ได้แปลว่าพวกเขาเพิกเฉยต่อความเสี่ยง แต่เป็นเพราะการแก้ไขปัญหาที่ต้นเหตุที่ถูกต้องคือการ ‘จำกัดสิทธิ์’ ไม่ใช่การ ‘ลบเครื่องมือ’ ออกไปทั้งหมด แนวคิดนี้เป็นหลักการสถาปัตยกรรมความปลอดภัยที่สำคัญ ซึ่งสามารถนำมาประยุกต์ใช้ได้กับระบบฐานข้อมูลอย่าง PostgreSQL
หลักการสถาปัตยกรรมความปลอดภัย: การจำกัดสิทธิ์ (Principle of Least Privilege)
ความเสี่ยงที่แท้จริงไม่ได้อยู่ที่ตัวคำสั่ง net user แต่อยู่ที่การที่ผู้ใช้งานมีสิทธิ์ (Privilege) มากเกินความจำเป็น (Over-privilege) ซึ่งเป็นหลักการที่เรียกว่า Principle of Least Privilege (PoLP)
ในบริบทของ PostgreSQL หลักการนี้หมายถึงการที่ผู้ใช้ (User) หรือบทบาท (Role) ควรมีสิทธิ์ในการเข้าถึงข้อมูลหรือการดำเนินการ (Operation) เท่าที่จำเป็นต่อการทำงานเท่านั้น เราไม่ควรให้ Role ใดมีสิทธิ์เป็น Superuser หากไม่จำเป็นจริง ๆ
การป้องกันความเสี่ยงใน PostgreSQL ด้วย Role-Based Access Control (RBAC)
แทนที่จะให้ Role เดียวมีสิทธิ์ทำทุกอย่าง เราควรแบ่งสิทธิ์ออกเป็นส่วนย่อย ๆ เพื่อจำกัดขอบเขตความเสียหาย (Blast Radius) หาก Role นั้นถูกบุกรุก
SQL
-- ตัวอย่างการสร้าง Role ที่มีสิทธิ์จำกัด (PoLP)
SQL
CREATE ROLE analyst LOGIN PASSWORD 'secure_pwd';
SQL
-- Analyst มีสิทธิ์ SELECT เท่านั้น ไม่สามารถ INSERT หรือ DROP ได้
SQL
GRANT SELECT ON public.data_table TO analyst;
SQL
-- การป้องกันการเข้าถึงตารางสำคัญ
SQL
REVOKE ALL ON public.sensitive_data FROM analyst;
การแก้ไขปัญหาเชิงสถาปัตยกรรม: การจัดการสิทธิ์แทนการลบฟังก์ชัน
เช่นเดียวกับที่ Microsoft เลือกที่จะให้เครื่องมือ net user อยู่ แต่บังคับใช้การจัดการรหัสผ่านที่ซับซ้อน (เช่น LAPS) เพื่อลดความเสี่ยงจากการเดาคำสั่ง การออกแบบระบบที่ดีก็เช่นกัน เราไม่ควรลบฟังก์ชันที่จำเป็นออกไป แต่ควรเพิ่มชั้นของการควบคุม (Control Layer) เข้าไป
ใน PostgreSQL เราสามารถใช้ฟีเจอร์อย่าง Row-Level Security (RLS) เพื่อจำกัดว่า Role ใดสามารถมองเห็นแถวข้อมูล (Row) ใดได้บ้าง แม้ว่า Role นั้นจะมีสิทธิ์ SELECT บนตารางนั้นก็ตาม นี่คือการจำกัดสิทธิ์ที่ละเอียดกว่าการจำกัดแค่ระดับตาราง
SQL
-- การเปิดใช้งาน RLS บนตาราง
SQL
ALTER TABLE public.sales_data ENABLE ROW LEVEL SECURITY;
SQL
-- สร้าง Policy ให้ผู้ใช้ 'regional_manager' เห็นข้อมูลเฉพาะภูมิภาคของตนเอง
SQL
CREATE POLICY regional_policy ON public.sales_data FOR SELECT TO regional_manager USING (region = current_setting('app.region'));
บทสรุป
การวิเคราะห์ความปลอดภัยของ net user สอนให้เราเข้าใจว่า การแก้ไขช่องโหว่ที่ยั่งยืนที่สุดไม่ใช่การกำจัดเครื่องมือ แต่คือการยกระดับสถาปัตยกรรมความปลอดภัยโดยรวม การใช้หลักการจำกัดสิทธิ์ (PoLP) และการควบคุมการเข้าถึงอย่างละเอียด (เช่น RLS ใน PostgreSQL) คือแนวทางที่ Senior Architect ทุกคนต้องยึดถือ เพื่อให้ระบบยังคงมีฟังก์ชันที่จำเป็น แต่ลดพื้นที่เสี่ยงที่แฮกเกอร์จะใช้ประโยชน์ได้มากที่สุด