從删庫到跑路:漫談MySQL權限安全,成為阿裏P7移動架構師到底有多難

熬夜布禿頭啊 2021-09-20 02:08:05 阅读数:244

跑路 mysql 安全 p7 到底有

轉載請聲明出處!

從删庫到跑路,我想作為程序員的你肯定聽過無數次這樣的話語,這話已經成為程序員搭話的一句玩笑話。

但僅僅只是一句玩笑嗎?絕不,從小deer 十多年在程序員的江湖中混搭就發現過無數次這樣的情况:

某某一天,初級程序員張某本想在測試庫删除測試訂單數據,結果誤打開正式庫,結果delete 訂單錶,而且數據沒做備份,後果呢? 呵呵噠~

某某一天,初級開發本想在測試庫用戶錶删除兩字段,結果也是誤打開正式庫,删除了正式庫的字段,結果還好,部門經理被老板一頓臭罵。

某某一天,新入職的實習生,想把數據庫的數據導出一份學習,沒錯,他導出了正式庫的數據,而且用來寫論文發,導致客戶的信息等隱私信息被透露。

……

這事情不要發生太多。而最終的肇事者就是讓人鄙夷的初級程序員,實習生,新手?

這鍋真該新手背嗎? 另外這些新手背得起嗎? 哪怕把這些新手開除了公司已經帶了得損失誰負責呢?

真正該對這負責的技術經理,架構師,你沒有把數據庫的權限控制好。

那麼來接下來的時間來談談mysql這個數據庫的權限?把這些掌握好面試也好,以後在工作中也好,你可以少走很多彎路。

1. 那麼多數據庫為什麼來談mysql

嗯,這是個好問題,如果你公司有錢倒騰oracle,出問題能找oracle 公司的dba背鍋,那就放弃mysql吧,mysql太low。

比如你所在公司是中國電力,在10年的時間僅僅在oralce的使用上就支出就是390幾個億,平均一年30,40個億,嗯,能有錢解决的都不是事。

問題,絕大多數公司沒錢,起碼沒這麼有錢。

另外還有很多公司有錢也要用mysql,還是舉例來說:

從删庫到跑路:漫談MySQL權限安全,成為阿裏P7移動架構師到底有多難_後端

全世界訪問量最大的20家公司,他們有錢吧? 僅僅兩家不是使用的mysql,分別是live.com和bing,為啥? 因為它是微軟,它得支持自己的MsSql。

另外再看張圖:

從删庫到跑路:漫談MySQL權限安全,成為阿裏P7移動架構師到底有多難_Java_02

他們也全都是使用mysql,所以,我也講mysql。

2. 最簡單的MySql權限

最簡單也是最高效的,如果解决新手們删庫跑路的問題其實也是很簡單的,對於正式庫只給一個增删改查的權限,或者只給一個查詢權限(是不是就解决了删庫的可能性?)

以下內容如果看官是大牛,請稍安勿躁,我講內容的方式是從簡單到入門,從入門到進階,從進階到實戰,從實戰到。。。(包你滿意)

使用Root用戶,執行:

grant SELECT on mall.* TO 'dev'@'192.168.0.%' IDENTIFIED BY '123' WITH GRANT OPTION;

  • 1.

很簡單的一句sql,創建了一個dev的用戶,密碼為123,僅僅運行在網段為192.168.0.*的網段進行查詢操作。

再執行一條命令:

show grants for 'dev'@'192.168.0.%'

  • 1.

從删庫到跑路:漫談MySQL權限安全,成為阿裏P7移動架構師到底有多難_後端_03

不錯,可以鏈接,也可以執行select,這個時候還想删庫?做夢吧~

3. 深入研究下MySQL權限

3.1. 用戶標識是什麼

上面一句簡單的SQL堪稱完美的解决了程序員新手的删庫跑路的問題,高興吧,你學到了新姿勢,但是如果想面試給面試管留下好映像,上面的知識好像還不够,有必要好好深入研究下MySql的權限了。

這裏有個小的知識點需要先具備,在mysql中的權限不是單純的賦予給用戶的,而是賦予給”用戶+IP”的。

比如dev用戶是否能登陸,用什麼密碼登陸,並且能訪問什麼數據庫等都需要加上IP,這樣才算一個完整的用戶標識,換句話說  ‘dev’@‘192.168.0.168’ ‘dev’@'127.0.0.1’ ’dev’@‘localhost’ 這3個是完全不同的用戶標識(哪怕你本機的ip就是192.168.0.168)。

3.2. 用戶權限所涉及的錶

有了用戶標識的概念接下來就可以看權限涉及的錶了,這也是面試的時候加分項哦。

有幾張錶你可以好好的記記的,mysql.user,mysql.db,mysql.table_priv,mysql_column_priv。

你可以熟悉其中的user錶,甚至手動的改過裏面的數據(不合規範哦!)

那這些錶有什麼用,和權限又有什麼關系呢?

l User的一行記錄代錶一個用戶標識;

l db的一行記錄代錶對數據庫的權限;

l table_priv的一行記錄代錶對錶的權限;

l column_priv的一行記錄代錶對某一列的權限。

很詫异吧,mysql其實權限並不是特別low,權限的粒度甚至到了某一列上,舉例來說,有個錶account錶:

從删庫到跑路:漫談MySQL權限安全,成為阿裏P7移動架構師到底有多難_程序員_04

對於前面創建的dev用戶我不想讓他訪問balance列,但是id和name列是可以訪問的,這樣的需求在工作中不是沒有。

總結

大型分布式系統猶如一個生命,系統中各個服務猶如骨骼,其中的數據猶如血液,而Kafka猶如經絡,串聯整個系統。這份Kafka源碼筆記通過大量的設計圖展示、代碼分析、示例分享,把Kafka的實現脈絡展示在讀者面前,幫助讀者更好地研讀Kafka代碼。

 CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視頻】

麻煩幫忙轉發一下這篇文章+關注我

從删庫到跑路:漫談MySQL權限安全,成為阿裏P7移動架構師到底有多難_程序員_05

版权声明:本文为[熬夜布禿頭啊]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210920020805408j.html