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

ฟังก์ชัน 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
1login_successadmin@localhost2024-04-10 08:30:00
2select_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()
แชร์เรื่องนี้