2013-10-13 42 views

回答

43

嘗試的CURRENT_USER()功能。這將返回MySQL用於驗證客戶端連接的用戶名。這是確定您的特權的用戶名。

這可能與客戶端發送給MySQL的用戶名不同(例如,即使您發送了用戶名,MySQL可能使用匿名帳戶來驗證您的客戶端)。如果您希望連接時使用客戶端發送給MySQL的用戶名,請改用USER()函數。

該值表示您在連接到服務器時指定的用戶名以及您連接的客戶端主機。該值可能與CURRENT_USER()的值不同。

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

+0

謝謝你的回答,如果我正確地讀這篇文章,使用CURRENT_USER()代替USER()的好處是,CURRENT_USER()將只返回經過驗證的用戶? – user1090729

+0

基本上,客戶端可能會指定一個用戶進行身份驗證 - 但該特定用戶可能沒有授予表的權限。但是,由於桌面上的匿名權限,訪問權限仍然可以被授予。該函數返回用戶授予用戶認證權限(可能是匿名用戶)的權限,而不是客戶端指定的用戶。那裏的文檔有一個很好的例子。 – scotru

+0

'錯誤1064(42000):您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在第1行'CURRENT_USER()'附近使用正確的語法。 – User

9

使用此查詢:

SELECT USER(); 

或者

SELECT CURRENT_USER; 
53

嘗試運行要麼

SELECT USER(); 

SELECT CURRENT_USER(); 

它有時可以是不同的,USER()將返回通過登錄您嘗試進行身份驗證和CURRENT_USER()將返回你是如何實際可認證。

2

打印誰在使用這個數據庫

select user(); 

select current_user(); 
+1

我不喜歡你的答案,不僅不會增加任何新的東西,而且你的答案會錯過最重要的部分:這兩個函數之間的區別。 –

+2

*在存儲的程序或視圖中,除非使用SQL SECURITY INVOKER特性定義,否則CURRENT_USER()會返回定義對象的用戶的帳戶(由DEFINER值給出)。在後一種情況下,CURRENT_USER()返回對象的調用者。 觸發器和事件無法定義SQL SECURITY特性,因此對於這些對象,CURRENT_USER()會返回定義該對象的用戶的帳戶。要返回調用者,請使用USER()或SESSION_USER()。* https://dev.mysql.com/doc/refman/5.5/en/string-functions.html –

+0

沒有人有時間閱讀這些函數的所有歷史記錄,沒有人問你對這些函數的解釋,主要問題是如何在mysql中找到用戶名,他沒有問這兩個語句的區別。並且沒有什麼可以爲現有答案添加新內容,通過回答它來獲得唯一答案,從而使用戶獲得這個答案的信心。 –

1

您還可以使用當前用戶:從mysql.user MySQL的「選擇用戶,主機;

+---------------+-------------------------------+ 
| 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      | 
+---------------+-------------------------------+ 
相關問題