首頁  >  文章  >  php教程  >  Mysql資料庫的安全性問題釋疑

Mysql資料庫的安全性問題釋疑

高洛峰
高洛峰原創
2016-12-02 14:02:191458瀏覽

 資料庫系統的安全性包括許多面向。由於許多情況下,資料庫伺服器容許客戶機從網路上連接,因此客戶機連接的安全性對MySQL資料庫安全性有很重要的影響。

  不在客戶機的命令列上提供密碼

  使用mysql、mysqladmin等客戶機用一個用戶身份與MySQL伺服器連接時,需要為連接提供密碼。

  1、可以在命令列上提供密碼

  shell>mysql –u root –pmypass

  注意,-p選項與密碼之間不可有空格,否則會提示你輸入密碼,並報錯。問,你可以按住Ctrl+Alt+Del鍵,NT上你可以開啟工作管理員。

  你發現了什麼,你發現密碼清清楚楚的顯示在你的面前。所以,你無論何時也不要這麼做。

  所以你需要讓客戶機提示你的密碼:

  shell>mysql –u root –p

  你也可以使用選項文件提供密碼,但是注意為了安全,不能在選項文件中存儲密碼。你可以只提供password選項,讓客戶機提示你輸入密碼。

  使用SSH加密客戶機連接

  這是一個關於怎樣用SSH 得到一個安全的連接遠端MySQL伺服器的注意事項(David Carlson)。

  在你的windows機器上安裝SSH客戶 - 我使用了一個來自的免費SSH客戶。其他實用的連結:

  

  .

  啟動SSH。設定主機名字 = 你的MySql伺服器名稱或IP位址,設定userid=你的使用者名稱登入你的伺服器。

  點選「local forwords」。設定 local port: 3306, host: localhost, remote port: 3306

  保存一切,否則下次你將必須再做一次。

  用SSH登入你的伺服器。

  啟動一些ODBC應用程式(例如Access)。

  創造一個新檔案並且用ODBC驅動程式連結到mySQL,就像你通常做的一樣,除了對伺服器用使用者「localhost」。

  搞定。它對一個直接的因特網連接工作得很好。

  不要使用Unix的root使用者執行MySQL守護程式

  不要作為Unix的root使用者執行MySQL守護程式。 mysqld能以任何用戶運行,你也可以創造一個新的Unix用戶mysql讓一切更安全。如果你作為其它Unix用戶運行mysqld,你不需要改變在user表中的root用戶名,因為MySQL用戶名與Unix 用戶名沒關係。

  你可以作為其它Unix用戶編輯mysql.server啟動腳本mysqld。或使用選項檔案。有關如何用非root使用者啟動MySQL伺服器的細節,請參閱第二章。

  資料庫目錄的安全性

  MySQL伺服器提供了一個透過mysql資料庫中的授權表,實現了一個十分靈活的權限系統,保證了從網路存取資料的安全性。但是,如果伺服器主機上的其它使用者擁有對伺服器目錄的直接存取權,那麼你的伺服器的資料仍舊是不安全的。

  一般你可能用一個非特權的Unix使用者執行守護程序。檢查那個執行mysqld的Unix用戶是唯一的在資料庫目錄下有讀/寫權限的用戶。

  可能的安全漏洞

  顯然,你不會讓伺服器主機上的其它用戶擁有對資料庫目錄檔案的寫入存取權,但是,僅僅是讀取存取權也非常危險。

  由於象GRANT和SET PASSWORD這樣的查詢都被記錄到日誌中去了,常規和更新日誌檔案包含了有關密碼的敏感查詢文字。如果一個攻具有對這些日誌的讀取存取權,那麼他只要在日誌檔案中尋找GRANT或PASSWORD這樣的敏感單字,就很容易找到密碼的明文。

  對於表文件的讀取訪問也是很危險的,竊取文件並使MySQL以及以純文本的形式顯示表的內容是微不足道的事。可以按列步驟進行:

  1、安裝一個新的MySQL分發,可以是在另一台主機上,也可以就在當前的伺服器主機上安裝,使用與正式伺服器不同的連接埠、套接字和數據文件。

  2、將竊取的表格的對應文件拷貝到新服務資料庫目錄中的test目錄下

  3、然後就可以啟動作案伺服器,可以隨意存取所竊取表的內容。

  在Unix設定合適的資料庫目錄權限

  如果要消除這些安全漏洞,就要安排資料庫目錄及其中所有檔案和目錄的所有權,是的只有啟動伺服器的專用帳戶才可以存取它們。操作步驟如下:

  1、切換到root用戶

  $su

  2、設定資料庫目錄及其中所有檔案目錄的擁有權為執行該伺服器的帳號所有,在本書中一直將這個帳號假定為mysql,把所有的群組設為root群組

  %chown –R mysql:root DATADIR

  3、修改資料庫目錄及其中所有檔案目錄的權限為只有擁有者可以讀取與寫入

  %chmod –R go-rwx DATADIR

 NT在NT系統中設定適當的資料庫目錄中。的資料庫目錄的安全性可能比較簡單:

  讀者可能想到,把所有目錄檔案改為只有某個帳號administrator例如可讀寫。但是,這樣會有一個問題,就是這能在administrator帳號中用手動啟動獨立的伺服器,如果讓mysql系統服務自動啟動的方法也不可行,解決方法是讓資料庫目錄也可被administrators群組使用者讀寫,這樣MySQL伺服器就可以用系統服務的方法自動啟動了,也可以在任何帳號中用net start mysql啟動。

  另一個問題是,如果你在非administrators群組用戶中或從網路都無法建立資料庫連接,因為沒有資料庫目錄的讀取的權利,如果要正常使用,還需要 寫的權利。解決方法是讓SYSTEM群組使用者能夠隊資料庫目錄讀寫。

  由於許可證和費用的原因,通常建議你在Linux伺服器上使用MySQL,在Windows平台之用來測試或資料輸入工作。但是,如果你要在Windows上使用的話,可以注意本小節的一些內容。

  影響安全的mysqld選項

  下列mysqld選項影響安全:

  --secure

  由gethostbyname()系統調用傳回的主機名稱檢查,確保他們回到原始的主機名稱。這對某些外人透過模仿其它主機獲得存取權限變得更難。這個選項也增加一些聰明的主機名稱檢查。在MySQL3.21裡,選擇預設是關掉的,因為它有時它花很長時間執行反向解析。 MySQL 3.22快取主機名稱並預設地啟用了這個選項。

  --skip-grant-tables

  這個選項導致伺服器完全不使用權限系統。這給每個人完全存取所有的資料庫的權力!(透過執行mysqladmin reload,你能告訴一個正在運行的伺服器再次開始使用授權表。)

  --skip-name-resolve

  主機名稱不被解析。所有在授權表的Host的列值必須是IP數字或localhost。

  --skip-networking

  在網路上不允許TCP/IP連線。所有到mysqld的連線必須經由Unix套接字進行。這個選項對使用MIT-pthreads的系統是不合適的,因為MIT-pthreads套件不支援Unix套接字。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn