MySQL中USER()和CURRENT_USER()的區別

来源:https://www.cnblogs.com/greatsql/archive/2022/11/08/16870169.html
-Advertisement-
Play Games

GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者:YeJinrong/葉金榮 意外發現USER()和CURRENT_USER()的一點不同。 某次在用 ALTER USER 想要修改賬戶密碼時,發 ...


  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。
  • GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。
  • 作者:YeJinrong/葉金榮

意外發現USER()和CURRENT_USER()的一點不同。

某次在用 ALTER USER 想要修改賬戶密碼時,發現執行下麵的SQL會報語法錯誤:

mysql> ALTER USER USER() IDENTIFIED WITH ...
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 'with mysql_native_password by ''' at line 1

一開始百思不得其解,如果把 USER() 手動替換成對應的賬戶的話,則可以正常執行:

mysql> ALTER USER test@'%' IDENTIFIED WITH ...
Query OK, 0 rows affected (0.10 sec)

如果再改成 CURRENT_USER() 也是可以執行的:

mysql> ALTER USER CURRENT_USER() IDENTIFIED WITH ...
Query OK, 0 rows affected (0.10 sec)

看來是修改密碼時不能調用 USER() 函數,但可以用 CURRENT_USER() 函數,那麼這兩個函數的區別是什麼呢?

我們來看下文檔中的解釋:

  • CURRENT_USER, CURRENT_USER()

Returns the user name and host name combination for
the MySQL account that the server used to authenticate
the current client. This account determines your access
privileges. The return value is a string in the utf8
character set.

  • USER()

Returns the current MySQL user name and host name as
a string in the utf8 character set.

簡言之,CURRENT_USER() 返回的是當前用戶所對應的授權賬戶,而 USER() 返回的是當前連接用戶。這麼說可能還有點疑惑,看下麵的案例吧:

# 有一個授權賬戶是 yejr@'%'
mysql> SELECT HOST,USER FROM mysql.user WHERE user='yejr';
+------+------+
| host | user |
+------+------+
| %    | yejr |
+------+------+
    
# 採用tcp/ip方式連接
$ mysql -h127.0.0.1 -uyejr -pxx -P3306
...
    
# 調用 USER()
mysql> SELECT USER();
+----------------+
| USER()         |
+----------------+
| [email protected] |
+----------------+
    
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| yejr@%         |
+----------------+
    
# 換個方式連接
$ mysql -S/tmp/mysql.sock -uyejr -pxx
...
SELECT USER();
+----------------+
| USER()         |
+----------------+
| yejr@localhost |
+----------------+

這下看明白了吧,也就是說,同一個授權賬戶,可能會從不同主機/不同方式連接到MySQL Server端,這時 CURRENT_USER() 返回的是對應的授權賬戶,而 USER() 返回的就是包含該賬戶當前連接的客戶端地址,從不同主機連接過來後得到的結果也不同。

這樣就可以解釋一開始的問題了,為什麼不能在修改密碼時調用 USER() 函數,而只能用 CURRENT_USER() 函數了。

Enjoy GreatSQL

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在電腦世界里只有二進位。唯有人類才會對數據進行類型與價值判斷。例如,認為某些文件是文本文件、是WORD/EXCEL文件或者是圖片。對於加密演算法來說也是一樣的,加解密演算法處理的只是位元組流,根本不關心所謂的文件類型。 ...
  • 大家好,我是沙漠盡頭的狼。 .NET是免費,跨平臺,開源,用於構建所有應用的開發人員平臺。 本文演示如何在WPF中使用Blazor開發漂亮的UI,為客戶端開發註入新活力。 註 要使WPF支持Blazor,.NET版本必須是 6.0 或更高版本,本文所有示例使用的.NET 7.0,版本要求見鏈接,截圖 ...
  • 各位好啊,我是會編程的蝸牛,作為java開發者,我們平常肯定會接觸Linux操作系統,其實除了一般的部署應用外,它還可以幫助我們生成密碼。解決我們平常自己想各種複雜密碼的煩惱,以後我會講一講如何安全地保存我們的密碼。 ...
  • 安裝Docker Docker 分為 CE 和 EE 兩大版本。CE 即社區版(免費,支持周期 7 個月),EE 即企業版,強調安全,付費使用,支持周期 24 個月。 Docker CE 分為 stable test 和 nightly 三個更新頻道。 官方網站上有各種環境下的 安裝指南,這裡主要介 ...
  • 一、Installing RabbitMQ-3.10.2 on CentOS 7.9 1 地址 https://www.rabbitmq.com https://github.com/rabbitmq/rabbitmq-server https://github.com/rabbitmq/rabbi ...
  • 蘋果電腦哪款系統活動監控器好用呢?iStat Menus for mac是一款Mac OS電腦硬體信息監控軟體,提供的信息包括 CPU 使用情形、記憶體用量、硬碟使用情形、網路傳輸、機器溫度、風扇轉速等等。在新版本中,您還可以自由的對iStat Menus顯示的信息進行設置,將您關註的系統信息放在頂部 ...
  • redis集群搭建 一、安裝redis 源碼安裝: 1.下載源碼包: wget http://download.redis.io/releases/redis-6.0.7.tar.gz 2.解壓到指定目錄下: tar xf redis-6.0.7.tar.gz -C /usr/local/ 二、編譯 ...
  • 背景 建議至少提交兩份測試報告(從一、二選擇兩個測試case) 一、任選一(建議結合業務選擇,簡單線上業務選tpcb,複雜線上業務選tpcc,偏分析業務選tpch) tpcc tpcb tpch 二、任選一(建議結合業務場景選擇) 並行計算,選擇 RDS PG 12 進行測試 GIS,選擇 RDS ...
一周排行
    -Advertisement-
    Play Games
  • 不廢話,直接代碼 private Stack<Action> actionStack = new Stack<Action>(); private void SetCellValues() { var worksheet = Globals.ThisAddIn.Application.ActiveS ...
  • OpenAPI 規範是用於描述 HTTP API 的標準。該標準允許開發人員定義 API 的形狀,這些 API 可以插入到客戶端生成器、伺服器生成器、測試工具、文檔等中。儘管該標準具有普遍性和普遍性,但 ASP.NET Core 在框架內預設不提供對 OpenAPI 的支持。 當前 ASP.NET ...
  • @DateTimeFormat 和 @JsonFormat 是 Spring 和 Jackson 中用於處理日期時間格式的註解,它們有不同的作用: @DateTimeFormat @DateTimeFormat 是 Spring 框架提供的註解,用於指定字元串如何轉換為日期時間類型,以及如何格式化日 ...
  • 一、背景說明 1.1 效果演示 用python開發的爬蟲採集軟體,可自動抓取抖音評論數據,並且含二級評論! 為什麼有了源碼還開發界面軟體呢?方便不懂編程代碼的小白用戶使用,無需安裝python、無需懂代碼,雙擊打開即用! 軟體界面截圖: 爬取結果截圖: 以上。 1.2 演示視頻 軟體運行演示視頻:見 ...
  • SpringBoot筆記 SpringBoot文檔 官網: https://spring.io/projects/spring-boot 學習文檔: https://docs.spring.io/spring-boot/docs/current/reference/html/ 線上API: http ...
  • 作為後端工程師,多數情況都是給別人提供介面,寫的好不好使你得重視起來。 最近我手頭一些活,需要和外部公司對接,我們需要提供一個介面文檔,這樣可以節省雙方時間、也可以防止後續扯皮。這是就要考驗我的介面是否規範化。 1. 介面名稱清晰、明確 顧名思義,介面是做什麼的,是否準確、清晰?讓使用這一眼就能知道 ...
  • 本文介紹基於Python語言,遍歷文件夾並從中找到文件名稱符合我們需求的多個.txt格式文本文件,並從上述每一個文本文件中,找到我們需要的指定數據,最後得到所有文本文件中我們需要的數據的合集的方法~ ...
  • Java JUC&多線程 基礎完整版 目錄Java JUC&多線程 基礎完整版1、 多線程的第一種啟動方式之繼承Thread類2、多線程的第二種啟動方式之實現Runnable介面3、多線程的第三種實現方式之實現Callable介面4、多線的常用成員方法5、線程的優先順序6、守護線程7、線程的讓出8、線 ...
  • 實時識別關鍵詞是一種能夠將搜索結果提升至新的高度的API介面。它可以幫助我們更有效地分析文本,並提取出關鍵詞,以便進行進一步的處理和分析。 該介面是挖數據平臺提供的,有三種模式:精確模式、全模式和搜索引擎模式。不同的模式在分詞的方式上有所不同,適用於不同的場景。 首先是精確模式。這種模式會儘量將句子 ...
  • 1 為啥要折騰搭建一個專屬圖床? 技術大佬寫博客都用 md 格式,要在多平臺發佈,圖片就得有外鏈 後續如博客遷移,國內博客網站如掘金,簡書,語雀等都做了防盜鏈,圖片無法遷移 2 為啥選擇CloudFlare R2 跳轉:https://dash.cloudflare.com/ 有白嫖額度 免費 CD ...