MySQL การใช้งานฟังก์ชัน CURRENT_USER()

ฟังก์ชัน CURRENT_USER() ใน MySQL ใช้เพื่อคืนค่าชื่อผู้ใช้และโฮสต์ที่ระบบใช้ในการตรวจสอบสิทธิ์ (authentication) ของ session ปัจจุบัน

โดยผลลัพธ์จะอยู่ในรูปแบบ 'user_name'@'host_name' เช่น 'admin'@'localhost'
แตกต่างจาก USER() ตรงที่ CURRENT_USER() แสดงชื่อผู้ใช้ตามที่ "ระบบตรวจสอบสิทธิ์" ไม่ใช่ชื่อผู้ใช้ที่ login เข้ามา จึงเหมาะสำหรับใช้ตรวจสอบสิทธิ์ระดับ session ว่ากำลังใช้สิทธิ์ของใครอยู่

ประโยชน์ของฟังก์ชัน CURRENT_USER()

  • ตรวจสอบว่า session ปัจจุบันใช้สิทธิ์ของผู้ใช้ใดอยู่
  • ใช้สำหรับ debugging และ audit log เพื่อตรวจสอบว่า query ทำงานภายใต้สิทธิ์ของใคร
  • ป้องกันความเข้าใจผิดในการ login หลาย user บน session เดียว
  • ใช้ตรวจสอบสิทธิ์ก่อนทำงานกับข้อมูลสำคัญ
  • เหมาะสำหรับระบบที่ใช้ proxy users หรือ stored procedure ที่เรียกใช้ภายใต้สิทธิ์ของผู้ใช้คนละคน

รูปแบบการใช้งาน

CURRENT_USER()

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

SQL
SELECT CURRENT_USER() AS current_session_user;
-- ตัวอย่างผลลัพธ์: 'root@localhost'

สมมติว่ามีตารางชื่อ query_logs ซึ่งเก็บข้อมูลดังนี้

log_id run_by executed_at query_summary
1admin@localhost2024-04-10 09:00:00SELECT * FROM users
2report_user@localhost2024-04-10 10:12:00SELECT SUM(sales)

บันทึกว่า session ปัจจุบันใช้สิทธิ์ของใคร

SQL
INSERT INTO query_logs (run_by, executed_at, query_summary)
VALUES (CURRENT_USER(), NOW(), 'SELECT * FROM sales');

หมายเหตุ

  • CURRENT_USER() แสดงผู้ใช้ที่ระบบใช้ตรวจสอบสิทธิ์ (authenticated user) อาจต่างจาก USER() ซึ่งแสดงผู้ใช้ที่ login เข้ามา
  • หากใช้ DEFINER หรือ SQL SECURITY DEFINER กับ Stored Procedure ค่าที่ได้จาก CURRENT_USER() อาจไม่ตรงกับ USER()
  • หากใช้งานผ่าน proxy หรือ GRANT EXECUTE TO … ผู้ใช้จริงอาจต่างจาก session ที่เห็น
  • ไม่ควรใช้ CURRENT_USER() เป็นเงื่อนไขหลักในการตรวจสอบความปลอดภัย ควรใช้ร่วมกับสิทธิ์ระดับ GRANT/REVOKE
แชร์เรื่องนี้