มีวิธีการทราบชื่อผู้ใช้ปัจจุบันของคุณใน mysql หรือไม่?


90

ฉันต้องการทราบว่ามีวิธีสำหรับแบบสอบถาม mysql ในการส่งคืนชื่อผู้ใช้ของผู้ใช้ที่เป็นปัญหาในการสืบค้นหรือไม่

เป็นไปได้หรือไม่

คำตอบ:


80

ลองใช้CURRENT_USER()ฟังก์ชัน สิ่งนี้ส่งคืนชื่อผู้ใช้ที่ MySQL ใช้ในการตรวจสอบการเชื่อมต่อไคลเอนต์ของคุณ เป็นชื่อผู้ใช้ที่กำหนดสิทธิ์ของคุณ

ซึ่งอาจแตกต่างจากชื่อผู้ใช้ที่ไคลเอ็นต์ส่งไปยัง MySQL (ตัวอย่างเช่น MySQL อาจใช้บัญชีที่ไม่ระบุชื่อเพื่อรับรองความถูกต้องของไคลเอ็นต์แม้ว่าคุณจะส่งชื่อผู้ใช้) หากคุณต้องการชื่อผู้ใช้ที่ไคลเอนต์ส่งไปยัง MySQL เมื่อเชื่อมต่อให้ใช้USER()ฟังก์ชันแทน

ค่าระบุชื่อผู้ใช้ที่คุณระบุเมื่อเชื่อมต่อกับเซิร์ฟเวอร์และโฮสต์ไคลเอ็นต์ที่คุณเชื่อมต่อ ค่าอาจแตกต่างจาก CURRENT_USER ()

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_current-user


ขอบคุณสำหรับคำตอบหากฉันอ่านถูกต้องข้อดีของการใช้ CURRENT_USER () แทน USER () คือ CURRENT_USER () จะส่งคืนเฉพาะผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์เท่านั้นใช่หรือไม่
user1090729

โดยทั่วไปไคลเอ็นต์อาจระบุผู้ใช้เพื่อใช้ในการพิสูจน์ตัวตน - แต่ผู้ใช้รายนั้นอาจไม่มีสิทธิ์ให้สิทธิ์บนตาราง อย่างไรก็ตามการเข้าถึงอาจยังคงได้รับเนื่องจากสิทธิ์ที่ไม่ระบุตัวตนบนโต๊ะ ฟังก์ชันนี้ส่งคืนผู้ใช้ในสิทธิ์การให้สิทธิ์ที่ใช้เพื่อพิสูจน์ตัวตนผู้ใช้ (อาจไม่ระบุชื่อ) แทนที่จะเป็นผู้ใช้ที่ไคลเอ็นต์ระบุ มีตัวอย่างที่ดีในเอกสารที่นั่น
scotru

1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_USER()' at line 1
ผู้ใช้

15
คุณจำ SELECT ในแบบสอบถามของคุณได้หรือไม่นั่นคือ SELECT CURRENT_USER (); โพสต์คำถามของคุณ
scotru

1
ฉันลองทดสอบแล้วและCURRENT_USER()ไม่ถูกต้องสำหรับคำถาม "มีวิธีทราบ*ชื่อผู้ใช้ปัจจุบันของคุณ *ใน mysql หรือไม่" คำตอบคือ "USER ()" ซึ่ง "ส่งคืนผู้ใช้ MySQL ปัจจุบัน" ( dev.mysql.com/doc/refman/5.7/en/… ) คุณควรปรับปรุงคำตอบของคุณให้สมบูรณ์ยิ่งขึ้น แต่ก็สั้นเกินไป
James Wilkins

88

ลองเรียกใช้อย่างใดอย่างหนึ่ง

SELECT USER();

หรือ

SELECT CURRENT_USER();

บางครั้งอาจแตกต่างออกไปUSER ()จะส่งคืนข้อมูลโดยการเข้าสู่ระบบที่คุณพยายามตรวจสอบสิทธิ์และCURRENT_USER ()จะแสดงวิธีที่คุณได้รับอนุญาตให้ตรวจสอบสิทธิ์จริง




3

เพื่อพิมพ์ผู้ใช้ปัจจุบันที่กำลังใช้ฐานข้อมูล

select user();

หรือ

select current_user();

3
ฉันไม่ชอบคำตอบของคุณมากนักไม่เพียง แต่จะไม่เพิ่มอะไรใหม่ให้กับสิ่งที่ตอบไปก่อนหน้านี้ แต่คำตอบของคุณยังพลาดส่วนที่สำคัญที่สุดนั่นคือความแตกต่างระหว่างสองฟังก์ชันนั้น
Jonathan Parent Lévesque

2
ภายในโปรแกรมหรือมุมมองที่เก็บไว้ CURRENT_USER () จะส่งคืนบัญชีสำหรับผู้ใช้ที่กำหนดอ็อบเจ็กต์ (ตามที่กำหนดโดยค่า DEFINER) เว้นแต่จะกำหนดด้วยคุณสมบัติ SQL SECURITY INVOKER ในกรณีหลัง CURRENT_USER () จะส่งคืนผู้เรียกใช้ของวัตถุ ทริกเกอร์และเหตุการณ์ไม่มีตัวเลือกในการกำหนดคุณลักษณะความปลอดภัยของ SQL ดังนั้นสำหรับอ็อบเจ็กต์เหล่านี้ CURRENT_USER () จะส่งคืนแอคเคาต์สำหรับผู้ใช้ที่กำหนดอ็อบเจ็กต์ ในการส่งคืน Invoker ให้ใช้ USER () หรือ SESSION_USER () dev.mysql.com/doc/refman/5.5/en/string-functions.html
Jonathan Parent Lévesque

ไม่มีใครมีเวลาอ่านประวัติทั้งหมดของฟังก์ชันเหล่านั้นและไม่มีใครถามคำอธิบายของคุณเกี่ยวกับฟังก์ชั่นเหล่านั้นคำถามหลักคือจะค้นหาชื่อผู้ใช้ใน mysql ได้อย่างไรเขาไม่ได้ถามความแตกต่างของทั้งสองคำสั่ง และไม่มีสิ่งใดที่จะเพิ่มคำตอบใหม่ให้กับคำตอบที่มีอยู่ทำให้คำตอบนั้นเป็นเพียงคำตอบเดียวโดยการตอบจะช่วยเพิ่มความมั่นใจให้กับผู้ใช้ว่านี่คือคำตอบ
Prashanthhh Kumarr

2

คุณยังสามารถใช้: mysql> เลือกผู้ใช้โฮสต์จาก mysql.user;

+---------------+-------------------------------+
| user          | host                          |
+---------------+-------------------------------+
| fkernel       | %                             |
| nagios        | %                             |
| readonly      | %                             |
| replicant     | %                             |
| reporting     | %                             |
| reporting_ro  | %                             |
| nagios        | xx.xx.xx.xx                 |
| haproxy_root  | xx.xx.xx.xx
| root          | 127.0.0.1                     |
| nagios        | localhost                     |
| root          | localhost                     |
+---------------+-------------------------------+

1

คุณสามารถค้นหาชื่อผู้ใช้ปัจจุบันด้วยฟังก์ชัน CURRENT_USER () ใน MySQL

สำหรับ Ex: SELECT CURRENT_USER();

แต่CURRENT_USER()จะไม่ส่งคืนผู้ใช้ที่เข้าสู่ระบบเสมอไป ดังนั้นในกรณีที่คุณต้องการให้ผู้ใช้เข้าสู่ระบบให้ใช้SESSION_USER()แทน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.