ฟังก์ชัน SYSTEM_USER() ใน MySQL ใช้เพื่อคืนค่าชื่อผู้ใช้และโฮสต์ที่เชื่อมต่อกับฐานข้อมูล (user@host) เช่นเดียวกับ USER() และ SESSION_USER()
ฟังก์ชันนี้จะแสดงผู้ใช้ที่เข้าสู่ระบบจริง ๆ (login user) ไม่ใช่ผู้ที่มีสิทธิ์รันคำสั่งแบบ DEFINER เหมือน CURRENT_USER() โดยค่าที่ได้จะคงที่ตลอดช่วงเวลาการเชื่อมต่อ (session)
ประโยชน์ของฟังก์ชัน SYSTEM_USER()
- ใช้ตรวจสอบว่า session ปัจจุบันเชื่อมต่อเข้าระบบด้วย user อะไร
- เหมาะกับการสร้างระบบ audit log หรือ security log
- ใช้ตรวจสอบความแตกต่างระหว่าง user ที่ login กับ user ที่ใช้สิทธิ์จริง (กรณีมีการเปลี่ยนสิทธิ์)
- ใช้ร่วมกับคำสั่ง
INSERT,SELECT,WHERE, หรือใน trigger ได้ - แสดง user จริงในระดับ connection session ได้อย่างถูกต้อง
รูปแบบการใช้งาน
SYSTEM_USER()
- ผลลัพธ์จะอยู่ในรูปแบบ
'user_name'@'host'เช่น'admin'@'localhost'
ตัวอย่างการใช้งาน
SQL
SELECT SYSTEM_USER() AS login_user;
-- ผลลัพธ์: 'root'@'localhost'สมมติว่ามีตารางชื่อ login_log ซึ่งเก็บข้อมูลดังนี้
| log_id | login_user | login_time |
|---|---|---|
| 1 | admin@localhost | 2024-04-10 09:00:00 |
| 2 | [email protected] | 2024-04-10 10:05:00 |
บันทึกผู้ใช้ที่เชื่อมต่อระบบเข้ามา
SQL
INSERT INTO login_log (login_user, login_time)
VALUES (SYSTEM_USER(), NOW());หมายเหตุ
SYSTEM_USER()เป็น alias ของUSER()และSESSION_USER()ให้ค่าผลลัพธ์เหมือนกันทุกประการ- อย่าสับสนกับ
CURRENT_USER()ซึ่งคืนค่าผู้ที่มีสิทธิ์รันคำสั่งในปัจจุบัน (อาจต่างจากผู้ login) - ไม่แนะนำให้ใช้
SYSTEM_USER()ในการควบคุมสิทธิ์แบบละเอียด (ควรใช้CURRENT_USER()ร่วมด้วย) - ค่า
user@hostที่ได้อาจเปลี่ยนไปตามโฮสต์ต้นทางที่เชื่อมต่อ เช่นจาก localhost หรือ IP จริง