mysql當前用戶user()與current_user()

来源:https://www.cnblogs.com/crxis/archive/2019/02/27/10444398.html
-Advertisement-
Play Games

同一個賬號,不同客戶端登錄,可以根據user()來記錄IP、判斷是誰在操作。 ...


Mysql在進行登陸時,會去匹配mysql庫中的user表,並賦予相應的許可權,但是怎麼知道我們當時的登陸的用戶名及相應的許可權呢?

在Mysql中,有兩個函數,一個是user(),一個是current_user(); 

 

我們來運行一下看一下他們有什麼區別:

複製代碼
mysql> select user();
+----------------------+
| user()               |
+----------------------+
| test@192.168.203.132 |
+----------------------+
1 row in set (0.00 sec)



mysql> select current_user();
+------------------+
| current_user()   |
+------------------+
| test@192.168.%.% |
+------------------+
1 row in set (0.00 sec)
複製代碼

 

user()是用來顯示當前登陸的用戶名與它對應的host,幫助文檔是這樣描述的:

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

currrent_user()是用來顯示當前登陸用戶對應在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表中的哪一個,用current_user()

複製代碼
mysql> select current_user();
+------------------+
| current_user()   |
+------------------+
| test@192.168.%.% |
+------------------+
1 row in set (0.00 sec)
複製代碼

 

第二步用show grants命令,如下:

 

複製代碼
mysql> show grants for 'test'@'192.168.%.%';
+--------------------------------------------------------------------------------------------------------------------------------+
| Grants for test@192.168.%.%                                                                                                    |
+--------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON *.* TO 'test'@'192.168.%.%' IDENTIFIED BY PASSWORD '*032197AE5731D4664921A6CCAC7CFCE6A0698693' |
+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
複製代碼

 

好了,那另一個問題是,如果有如下的用戶名,host及許可權,我在登陸時到底會是匹配到哪一個呢?

複製代碼
mysql> grant select on *.* to test@192.168.203.132 identified by '000000';
Query OK, 0 rows affected (0.00 sec)

mysql> grant select,update on *.* to 'test'@'192.168.203.%' identified by '000000';
Query OK, 0 rows affected (0.01 sec)

mysql> grant select,update,insert on *.* to 'test'@'192.168.%.%' identified by '000000';    
Query OK, 0 rows affected (0.01 sec)

mysql> grant select,update,insert,delete on *.* to 'test'@'192.%.%.%' identified by '000000';        
Query OK, 0 rows affected (0.00 sec)

mysql> grant update,insert,delete on *.* to 'test'@'%' identified by '000000';                     
Query OK, 0 rows affected (0.00 sec)


mysql> select user,host from user order by user,host;
+-------------+-----------------+
| user        | host            |
+-------------+-----------------+
| root        | localhost       |
| test        | %               |
| test        | 192.%.%.%       |
| test        | 192.168.%.%     |
| test        | 192.168.203.%   |
| test        | 192.168.203.132 |
+-------------+-----------------+
複製代碼

 

如果我用如下命令進行登陸,會匹配到user表中的哪一個?

1 [root@host2 ~]# mysql -h192.168.203.132 -utest -p

  

我們可以用上面提到的select current_user()可以清楚地查找出來

複製代碼
mysql> select current_user();
+----------------------+
| user()               |
+----------------------+
| test@192.168.203.132 |
+----------------------+
1 row in set (0.00 sec)
複製代碼

 

 

我們刪除對應的帳戶:

delete from user where user='test' and host='192.168.203.132';

再次登陸:

[root@host2 ~]# mysql -h192.168.203.132 -utest -p

此時:

複製代碼
mysql> select current_user();
+------------------+
| current_user()   |
+------------------+
| test@192.168.203.% |
+------------------+
1 row in set (0.00 sec)
複製代碼

 

繼續刪除

mysql> delete from user where user='test' and host='192.168.203.%';

再登陸:

複製代碼
mysql> select current_user();
+------------------+
| current_user()   |
+------------------+
| test@192.168.%.% |
+------------------+
1 row in set (0.00 sec)
複製代碼

 

以上每一次執行後用user()都可以得到相同的結果:

複製代碼
mysql> select user();
+----------------------+
| user() |
+----------------------+
| test@192.168.203.132 |
+----------------------+
1 row in set (0.00 sec)
複製代碼

 

所以結論是:mysql在登陸時會用最精確匹配user表中的帳戶,host來作為當前的用戶。


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

-Advertisement-
Play Games
更多相關文章
  • ##sql語句為```SELECT COUNT(id) AS tp_count FROM `tableName` WHERE `status` = 0 AND `source` = 1 AND ( `end_time`-`add_time` > 2592000 AND `end_time`-`add... ...
  • 在項目開發中需要Thinkphp5讀取多個資料庫的數據,本文詳細介紹Thinkphp5多資料庫切換 一、在database.php配置預設資料庫連接 'type' => 'mysql','hostname' => '伺服器IP地址','database' => '資料庫名','username' = ...
  • 慢查詢日誌會將查詢過程中超出你設置的時間的查詢記錄下來,以便供開發者進行分析和優化。 1. 開啟慢查詢 1.1 查看當前設置 輸出 三個參數 slow_query_log ON/OFF ,使能開關 slow_query_log_file 慢查詢日誌目錄和文件名稱 long_query_time 超過 ...
  • 安裝包鏈接:https://pan.baidu.com/s/1WsQTeEQClM88aEqIvNi2ag 提取碼:s241 rlwrap-0.37-1.el6.x86_64.rpm 和 rlwrap-0.37-1.el6.i686.rpm,安裝perl依賴後如果還提示需要安裝perl,實則需要安裝 ...
  • 一、SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 這個報警告的原因簡單來說時因為slf4j的版本和log4j的版本不匹配。 解決辦法: 1.在你的maven庫中查找你的slf4j版本,若有兩個,最後選版本低的,因為本 ...
  • 筆記記錄自林曉斌(丁奇)老師的《MySQL實戰45講》 4) --深入淺出索引(上) 一句話簡單來說,索引的出現其實就是為了提高數據查詢的效率,就像書的目錄一樣。 索引的常見模型 哈希表:哈希表是一種以Key-Value存儲數據的結構,只要輸入key,就可以找到對應的value。哈希的思路很簡單, ...
  • 1、通過information_schema.COLUMNS表 查詢該表可得到所需欄位信息 如下圖所示: 2、示例 下麵截圖是示例: SQL語句如下 3、導出Excel 點擊導出結果即可導出 ...
  • 在https://www.cnblogs.com/loverwangshan/p/10415937.html中我們有講到委托的非同步方法,Thread,ThreadPool,然後今天來講一下Task, ThreadPool相比Thread來說具備了很多優勢,但是ThreadPool卻又存在一些使用上的 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...