Có cách nào để biết tên người dùng hiện tại của bạn trong mysql không?


88

Tôi muốn biết liệu có cách nào để truy vấn mysql trả về tên người dùng của người dùng đưa ra truy vấn hay không.

Điều này có khả thi không?

Câu trả lời:


77

Hãy thử CURRENT_USER()chức năng. Điều này trả về tên người dùng mà MySQL đã sử dụng để xác thực kết nối máy khách của bạn. Đó là tên người dùng này xác định đặc quyền của bạn.

Điều này có thể khác với tên người dùng được khách hàng gửi đến MySQL (ví dụ: MySQL có thể sử dụng tài khoản ẩn danh để xác thực khách hàng của bạn, ngay cả khi bạn đã gửi tên người dùng). Nếu bạn muốn tên người dùng mà máy khách gửi đến MySQL khi kết nối, hãy sử dụng USER()hàm thay thế.

Giá trị cho biết tên người dùng bạn đã chỉ định khi kết nối với máy chủ và máy khách mà bạn đã kết nối từ đó. Giá trị có thể khác với giá trị của CURRENT_USER ().

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html# Chức năng_current-user


Cảm ơn câu trả lời của bạn, nếu tôi đọc đúng câu này, thì lợi thế của việc sử dụng CURRENT_USER () thay vì USER () là CURRENT_USER () sẽ chỉ trả về những người dùng đã xác thực?
user1090729

Về cơ bản, máy khách có thể chỉ định người dùng sử dụng để xác thực - nhưng người dùng cụ thể đó có thể không có quyền cấp trên bảng. Tuy nhiên, quyền truy cập vẫn có thể được cấp vì các quyền ẩn danh trên bảng. Hàm này trả về người dùng trong các quyền cấp đã được sử dụng để xác thực người dùng (có thể ẩn danh) chứ không phải người dùng được chỉ định bởi máy khách. Có một ví dụ điển hình trong tài liệu ở đó.
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
Người dùng

15
Bạn có nhớ SELECT trong truy vấn của mình không, tức là: SELECT CURRENT_USER (); Đăng truy vấn của bạn.
scotru

1
Tôi đã thử điều này để kiểm tra và CURRENT_USER()không đúng cho câu hỏi "Có cách nào để biết tên người dùng hiện tại * của bạn * trong mysql không?". Câu trả lời là "USER ()", "Trả về người dùng MySQL hiện tại" ( dev.mysql.com/doc/refman/5.7/en/… ). Bạn nên cập nhật câu trả lời của mình để hoàn thiện hơn, ngắn quá.
James Wilkins

87

Cố gắng chạy một trong hai

SELECT USER();

hoặc là

SELECT CURRENT_USER();

Đôi khi có thể khác, USER () sẽ trả về thông tin đăng nhập mà bạn đã cố gắng xác thực và CURRENT_USER () sẽ trả về cách bạn thực sự được phép xác thực.


18

Sử dụng truy vấn này:

SELECT USER();

Hoặc là

SELECT CURRENT_USER;


3

để in người dùng hiện tại đang sử dụng cơ sở dữ liệu

select user();

hoặc là

select current_user();

3
Tôi không thích câu trả lời của bạn lắm, không những nó không bổ sung thêm điều gì mới cho những gì đã trả lời trước đó, mà câu trả lời của bạn còn bỏ lỡ phần quan trọng nhất: sự khác biệt giữa hai hàm đó.
Jonathan Parent Lévesque

2
Trong một chương trình hoặc chế độ xem được lưu trữ, CURRENT_USER () trả về tài khoản cho người dùng đã xác định đối tượng (như được cung cấp bởi giá trị DEFINER của nó) trừ khi được xác định bằng đặc tính SQL SECURITY INVOKER. Trong trường hợp sau, CURRENT_USER () trả về người gọi của đối tượng. Các trình kích hoạt và sự kiện không có tùy chọn để xác định đặc tính BẢO MẬT của SQL, vì vậy đối với các đối tượng này, CURRENT_USER () trả về tài khoản cho người dùng đã xác định đối tượng. Để trả lại người gọi, hãy sử dụng USER () hoặc SESSION_USER (). dev.mysql.com/doc/refman/5.5/en/string-functions.html
Jonathan Parent Lévesque

Không ai có thời gian để đọc tất cả lịch sử của các hàm đó, và không ai hỏi bạn giải thích về các hàm đó, câu hỏi chính là làm thế nào để tìm một tên người dùng trong mysql, anh ấy đã không hỏi w sự khác biệt của hai câu lệnh đó. và không có gì để thêm mới vào trình trả lời hiện có, hãy coi nó là câu trả lời duy nhất, bằng cách trả lời nó tạo niềm tin cho người dùng rằng đây là câu trả lời.
Prashanthhh Kumarr

2

Bạn cũng có thể sử dụng: mysql> chọn người dùng, máy chủ từ 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

Bạn có thể tìm thấy tên người dùng hiện tại bằng hàm CURRENT_USER () trong MySQL.

cho Ví dụ: SELECT CURRENT_USER();

Nhưng CURRENT_USER()không phải lúc nào cũng trả về người dùng đã đăng nhập. Vì vậy, trong trường hợp bạn muốn có người dùng đã đăng nhập, hãy sử dụng SESSION_USER()thay thế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.