中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL root用戶登錄的幾個小問題(r12筆記第67天)

發布時間:2020-08-11 00:03:32 來源:ITPUB博客 閱讀:381 作者:jeanron100 欄目:MySQL數據庫
MySQL root用戶登錄的幾個小問題(r12筆記第67天)

  今天和同事聊了聊技術的事情,聊到BAT里面的一些高大上的系統和設計,相比總是會有些差距,不過像那樣體量的公司知識沉淀很深,所以能夠做好我們力所能及的事情,把它細化做好,也是一種進步和改進。

   如果你老是覺得自己的環境受限,有各種KPI或者是成本的考量,做事情從下往上去推動很難,這些都是實際的困難,很多公司都是存在這樣的問題的。在資源受限方面,我尤其糾結,舉個有意思的小例子,如果我收到一條報警,提示數據庫表空間不足了,那就添加一個數據文件唄,結果數據庫層面的空間問題解決了,而馬上會收到一個系統空間不足的報警,碰到這種情況,你自己體會,心情肯定是很復雜的。

   今天碰到的一個案例比較特別,是關于MySQL登錄的,數據庫環境是5.6版本。

> select version();
+-----------------+
| version()       |
+-----------------+
| 5.6.23-72.1-log |
+-----------------+
1 row in set (0.01 sec)今天同事問我一個問題,想讓我看看某個數據庫用戶的權限問題,我登錄到服務器端之后,一切都很順利。

# mysql
Logging to file '/home/mysql/query.log'
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 52625
Server version: 5.6.23-72.1-log Percona Server (GPL), Release 72.1, Revision 0503478一切都很正常,然后我準備看看連接到數據庫的線程情況。

> show processlist;
ERROR 1227 (42000): Access denied; you need (at least one of) the PROCESS privilege(s) for this operation竟然拋出了這個奇怪的錯誤,如果想查看數據字典中的信息,也被禁止了。

> select user,host from mysql.user;
ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'user'   這個時候就很糾結了,我堂堂的root用戶竟然登錄不了MySQL了,別說給同事排除故障,自己都登錄不了了。

帶著疑問,我查看了error log,竟然沒有發現什么相關的異常信息。

   這個問題該怎么繼續往下走,如果要做改動,影響到現有的測試用戶就不好了,盡管是測試環境,重啟服務之類的還是要和開發同學充分溝通之后才能動手,況且我是幫忙查看這個環境,更不能隨便改動了。

  對于這個問題讓我有些焦慮的時候,我想到之前還真給自己留了一道后門,那就是之前幫他們處理問題的時候,我在自己的服務器端設定了一個用戶,來測試數據庫的連接情況,沒想到這樣一個無心之舉就成了分析這個問題的最后一把鑰匙。

   很快,我從安全認證的中控客戶端登錄到了這臺MySQL服務器,連接數有100多個。一邊感嘆自己的英明,一邊速速分析問題。

這個數據庫中有10個左右的數據庫用戶,大體是這樣的內容,做了修改。

> select user,host from mysql.user;
+----------------+-----------------------------+
| user           | host                        |
+----------------+-----------------------------+
| cloud_test     | %                           |
| cloudcs_app    | %                           |
| root           | %                           |
| cloud_test     | 10.127.138.107              |
| root           | 10.127.138.107              |
|                | localhost                   |
| jeanron        | test_user%                  |
+----------------+-----------------------------+查看show process的信息,看到是用戶是root

| 52629 | root           | localhost       
+-------+----------------+------------查看root@localhost的權限,竟然沒有。

> show grants for root@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'root' on host 'localhost'這個時候我們停一下,在這個場景中,系統mysql命令直接連接進來的是root@localhost嗎?從錯誤日志來看不是,而從線程信息來看是,所以我們需要進一步分析一下,問題在哪里。

雖然服務端直接mysql命令登錄后,查看不了線程情況,查看不了數據字典,但是show grants這個命令是可以的。

> show grants;
+------------------------
| Grants for @localhost                                                   
+------------------------
| GRANT USAGE ON *.* TO ''@'localhost'可以看出來,登錄的用戶是''@'localhost',而不是root@'localhost',這個環境中沒有配置root@'localhost'用戶。

然后再次查看mysql.user的情況,就會發現下面的配置比較特別。root使用了寬泛的域名方式,允許不同的IP來訪問,而另外有一條記錄是指定的IP。

| root           | %                           |
| root           | 10.127.138.107              |
|                | localhost                   |這個能夠說明什么呢,也就是說使用root@localhost的效果和root@'%'是類似的。而這個''@localhost目前是默認的連接方式,需要說的是,在這個配置下是優先的。


我們初始化一個mysql環境后,一般mysql.user的內容是這樣的,比如一個5.7的環境。

mysql> select user,host from mysql.user;
+-----------+-----------+
| user      | host      |
+-----------+-----------+
| mysql.sys | localhost |
| root      | localhost |
+-----------+-----------+
2 rows in set (0.00 sec)默認的連接方式是root@'localhost'

而在上面的場景中,沒有root@'localhost'的配置,就優先使用了''@'localhost'這個用戶。

為什么會有這個問題呢,和開發同學溝通之后,定位分析,發現原來之前這個服務器的IP發生過變化。后來開發同學自己也做了一些修改和配置,就是現在的情況了。

  對于這種情況怎么修復呢,我的想法是刪除匿名用戶,服務端不啟用密碼,即root@'localhost',而客戶端連接則使用域名解析的方式,但是對開發同學不開放root權限,所以我們刪除root@'%' 用戶。

刪除匿名用戶''@'localhost'

> drop user ''@localhost;
刪除最高權限的root用戶,不對外提供任意的權限訪問。

drop user root@'%';修改那個IP發生變化的服務器配置,修改為localhost

> update mysql.user set host='localhost' where user='root' and host='10.127.138.107';設置密碼為空,最后使用flush privileges即可。

  這樣一來,我們的預期效果就達到了,使用mysql登錄即可。

> show grants;
+----------------------------
| Grants for root@localhost
    

MySQL root用戶登錄的幾個小問題(r12筆記第67天)








向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昆山市| 马山县| 静安区| 岗巴县| 温泉县| 惠水县| 福贡县| 嵊泗县| 中阳县| 平果县| 长阳| 开江县| 镇赉县| 白城市| 平罗县| 中牟县| 萨嘎县| 庄河市| 确山县| 习水县| 时尚| 高阳县| 林口县| 灌阳县| 沁阳市| 仁化县| 尤溪县| 万安县| 呼和浩特市| 莎车县| 洛川县| 揭阳市| 铅山县| 沧源| 大埔县| 永定县| 博客| 揭东县| 浮山县| 白水县| 嘉定区|