函數對照表
| 函數 | 返回值 | 說明 |
USER() | 客戶端聲明的用戶@主機 | 連接時指定的用戶名,如 'root'@'localhost' |
SYSTEM_USER() | 同 USER() | 標準 SQL 別名 |
SESSION_USER() | 同 USER() | 標準 SQL 別名 |
CURRENT_USER() | 服務器認證後的實際賬戶 | 權限檢查依據,存儲過程 DEFINER 時返回定義者 |
核心差異場景
-- 客戶端以 root 連接,但通過 proxy 用戶認證
mysql -u root -p --proxy-user=app_user
SELECT USER(); -- 'root@localhost'
SELECT CURRENT_USER(); -- 'app_user@%'
存儲過程/視圖 DEFINER 行為
CREATE DEFINER = 'admin'@'%' PROCEDURE test_proc()
BEGIN
SELECT CURRENT_USER(); -- 返回 'admin@%' (SQL SECURITY DEFINER 默認)
END;
實用建議
- 審計日誌記錄用戶操作:用
USER() 知曉發起連接的賬號
- 權限判斷、動態 SQL 執行上下文:用
CURRENT_USER()
- 三個同義詞
USER/SYSTEM_USER/SESSION_USER 任選一致即可