ฟังก์ชัน SESSION_USER() ใน MySQL ใช้เพื่อคืนค่าชื่อผู้ใช้ (username) และโฮสต์ (host) ของผู้ใช้ที่ เชื่อมต่อเข้ามาในระบบฐานข้อมูล โดยค่าที่ได้จะอยู่ในรูปแบบ 'user_name'@'host_name' เช่น 'admin'@'localhost' ซึ่งแสดงถึง “ตัวตนของผู้เชื่อมต่อ”
ฟังก์ชันนี้แตกต่างจาก CURRENT_USER() ที่แสดง “สิทธิ์ที่ระบบใช้ในการประมวลผล” ฟังก์ชันSESSION_USER() จึงมีประโยชน์มากในการตรวจสอบว่า session นี้ login เข้ามาด้วย user ใดจริง ๆ
ประโยชน์ของฟังก์ชัน SESSION_USER()
- ตรวจสอบว่า session ปัจจุบันเริ่มต้นด้วย user ใด
- ใช้ร่วมกับระบบ multi-user เพื่อล็อกการทำงานแยกตามผู้ใช้
- ใช้ตรวจสอบ audit log, security หรือสิทธิ์เฉพาะ user
- เปรียบเทียบกับ
CURRENT_USER()เพื่อดูว่า session รันด้วยสิทธิ์ของใคร - ใช้ใน stored procedure, logging, monitoring system
รูปแบบการใช้งาน
SESSION_USER()
- คืนค่าผลลัพธ์ในรูปแบบ
'user'@'host'เช่น'dev_user'@'192.168.1.10'
ตัวอย่างการใช้งาน
SQL
SELECT SESSION_USER() AS session_login_user;
-- ผลลัพธ์: 'root'@'localhost'สมมติว่ามีตารางชื่อ activity_log ซึ่งเก็บข้อมูลดังนี้
| log_id | action | username | executed_at |
|---|---|---|---|
| 1 | login_success | admin@localhost | 2024-04-10 08:30:00 |
| 2 | select_report | [email protected] | 2024-04-10 09:10:20 |
เพิ่มข้อมูล log ที่บันทึกชื่อ user ที่เชื่อมต่อเข้ามา
SQL
INSERT INTO activity_log (action, username, executed_at)
VALUES ('view_dashboard', SESSION_USER(), NOW());หมายเหตุ
SESSION_USER()แสดงชื่อผู้ใช้ที่เชื่อมต่อกับฐานข้อมูล ไม่ใช่ชื่อผู้ใช้ที่ใช้สิทธิ์รันคำสั่ง (ต่างจากCURRENT_USER())- หากใช้ stored procedure ที่กำหนด
SQL SECURITY DEFINERฟังก์ชันSESSION_USER()อาจไม่ตรงกับสิทธิ์ที่ถูกใช้ - ค่านี้เป็นค่าคงที่ตลอดช่วงการเชื่อมต่อ session
- อย่าสับสนกับ
USER()ซึ่งให้ผลเหมือนกับSESSION_USER()