ฟังก์ชัน 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 |
|---|---|---|---|
| 1 | login_success | admin@localhost | 2024-04-10 08:30:00 |
| 2 | delete_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()ประกอบด้วย