ฟังก์ชัน 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 |
|---|---|---|---|
| 1 | admin@localhost | 2024-04-10 09:00:00 | SELECT * FROM users |
| 2 | report_user@localhost | 2024-04-10 10:12:00 | SELECT 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