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

ฟังก์ชัน USER() ใน MySQL ใช้เพื่อแสดงชื่อผู้ใช้ (username) และโฮสต์ (host) ที่เชื่อมต่อกับเซิร์ฟเวอร์ MySQL ใน session ปัจจุบัน

ฟังก์ชันนี้จะแสดงตัวตนของผู้ใช้ที่ login เข้ามาจริง ๆ โดยไม่คำนึงถึงว่า session นั้นกำลังรันคำสั่งด้วยสิทธิ์ของใคร (DEFINER)

เหมาะสำหรับการตรวจสอบว่า connection นี้เริ่มต้นด้วย user ใด ซึ่งจะเหมือนกับ SESSION_USER() และ SYSTEM_USER()

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

  • ตรวจสอบชื่อผู้ใช้ที่เชื่อมต่อกับเซิร์ฟเวอร์ MySQL
  • ใช้ในระบบ log, debug หรือ security ที่ต้องการบันทึกผู้ login
  • ช่วยระบุ session หรือ transaction ว่าเกิดจาก user คนไหน
  • ใช้เปรียบเทียบกับ CURRENT_USER() เพื่อดูว่า session ใช้สิทธิ์ของใคร
  • ใช้ในคำสั่ง SELECT, INSERT, TRIGGER, VIEW หรือ STORED PROCEDURE

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

USER()
  • คืนค่าผลลัพธ์ในรูปแบบ 'user_name'@'host' เช่น 'dev_user'@'localhost'

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

SQL
SELECT USER() AS login_user;
-- ผลลัพธ์: 'root'@'localhost'

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

log_id activity user_login action_time
1login_successadmin@localhost2024-04-10 08:30:00
2delete_customer[email protected]2024-04-10 09:45:00

บันทึกผู้ใช้ที่ทำกิจกรรม

SQL
INSERT INTO audit_logs (activity, user_login, action_time)
VALUES ('export_report', USER(), NOW());

หมายเหตุ

  • USER() แสดงชื่อผู้ใช้ที่ login เข้ามาเท่านั้น ไม่ใช่ผู้ที่มีสิทธิ์รันคำสั่งแบบ DEFINER
  • ค่า user@host นี้จะคงที่ตลอดการเชื่อมต่อ และไม่เปลี่ยนแม้จะใช้สิทธิ์ของ user คนอื่นผ่าน DEFINER
  • USER() = SESSION_USER() = SYSTEM_USER()
  • ไม่ควรใช้ USER() เพียงอย่างเดียวเพื่อควบคุมสิทธิ์หรือความปลอดภัย ควรใช้ CURRENT_USER() ประกอบด้วย
แชร์เรื่องนี้