台灣最大程式設計社群網站
線上人數
1293
 
會員總數:245894
討論主題:189491
歡迎您免費加入會員
討論區列表 >> MySQL >> MySQL取得用戶端 IP 位址,而不是 Hostname
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
MySQL取得用戶端 IP 位址,而不是 Hostname
價值 : 98 QP  點閱數:170 回應數:2
樓主

bon
門外漢
0 23
590 43
發送站內信

各位先進好

我想要取得連線用戶端的 IP 位址,但透過「select host from information_schema.processlist WHERE ID=connection_id()」取得的 host 可能會是 localhost、DESKTOP_ABC、John's PC 等等。但我需要的是 192.168.1.100 這種IP位址資訊,請問該如何取得?

搜尋相關Tags的文章: [ MySQL ] , [ client ip ] , [ hostname ] ,
本篇文章發表於2020-06-11 10:38
1樓
作者回應

bon
檢舉此回應
補充說明:
我的目標是當一個使用者允許從兩組不同的 IP 位址連入時,判斷該使用者是以哪一組 IP 登入並執行不同的動作。
Ex: user@192.168.1.%、user@10.0.0.%

目前已找到可行解是執行「SELECT CURRENT_USER()」即可知道對方連線所使用的 User。
本篇文章回覆於2020-06-11 13:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
說真的,第一次看到有人將mysql當程序運行用。
倒是有點讓人覺得配服

認真來說,mysql並沒辦法像後端程式一樣,能取得標頭及來源的ip。
你上面的手法,都是利用mysql本身的一些記錄來取得資料的。
也就是去取目前mysql的進程資料。

你可以用如下的語法
SELECT substring_index(host, ':',1) AS host_name,state,count(*) FROM information_schema.processlist GROUP BY state,host_name

可是,這些出來的資料是只代表目前有的連線。不代表當前的連線。
基本上來說還是 SELECT CURRENT_USER() 是最接近你的理想的。

就理論上來說。如果你要讓不同ip做不同的事。

你就該在新增user時就區分好。不要用 user@192.168.1.% 這樣的萬用符號。
這是你唯一能在mysql做到的事。

要不然還是乖乖的在後端語言來處理。(如果有的話)
本篇文章回覆於2020-06-11 16:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.