MySQL安全性指南 (1)(轉)

來源:互聯網
上載者:User
mysql|安全|安全性 MySQL安全性指南
作 者: 晏子


作為一個MySQL的系統管理員,你有責任維護你的MySQL資料庫系統的資料安全性和完整性。本文主要主要介紹如何建立一個安全的MySQL系統,從系統內部和外部網路兩個角度,為你提供一個指南。

本文主要考慮下列安全性有關的問題:

為什麼安全性很重要,你應該防範那些攻擊?
伺服器面臨的風險(內部安全性),如何處理?
串連伺服器的用戶端風險(外部安全性),如何處理?
MySQL管理員有責任保證資料庫內容的安全性,使得這些資料記錄只能被那些正確授權的使用者訪問,這涉及到資料庫系統的內部安全性和外部安全性。
內部安全性關心的是檔案系統級的問題,即,防止MySQL資料目錄(DATADIR)被在伺服器主機有帳號的人(合法或竊取的)進行攻擊。如果資料目錄內容的許可權過分授予,使得每個人均能簡單地替代對應於那些資料庫表的檔案,那麼確保控制客戶通過網路訪問的授權表設定正確,對此毫無意義。

外部安全性關心的是從外部通過網路連接伺服器的客戶的問題,即,保護MySQL伺服器免受來自通過網路對伺服器的串連的攻擊。你必須設定MySQL授權表(grant table),使得他們不允許訪問伺服器管理的資料庫內容,除非提供有效使用者名稱和口令。

下面就詳細介紹如何設定檔案系統和授權表mysql,實現MySQL的兩級安全性。


一、內部安全性-保證資料目錄訪問的安全
MySQL伺服器通過在MySQL資料庫中的授權表提供了一個靈活的許可權系統。你可以設定這些表的內容,允許或拒絕客戶對資料庫的訪問,這提供了你防止未授權的網路訪問對你資料庫攻擊的安全手段,然而如果主機上其他使用者能直接存取資料目錄內容,建立對通過網路訪問資料庫的良好安全性對你毫無協助,除非你知道你是登入MySQL伺服器運行主機的唯一使用者,否則你需要關心在這台機器上的其他使用者獲得對資料目錄的訪問的可能性。

以下是你應該保護的內容:

資料庫檔案。很明顯,你要維護伺服器管理的資料庫的私用性。資料庫擁有者通常並且應該考慮資料庫內容的安全性,即使他們不想,也應該考慮時資料庫內容公開化,而不是通過糟糕的資料目錄的安全性來暴露這些內容。
記錄檔。一般和更新日誌必須保證安全,因為他們包含查詢文本。對記錄檔有存取權限的任何人可以監視資料庫進行過的操作。
更要重點考慮的記錄檔安全性是諸如GRANT和SET PASSWORD等的查詢也被記載了,一般和更新日誌包含有敏感查詢的文本,包括口令(MySQL使用口令加密,但它在已經完成設定後才運用於以後的串連建立。設定一個口令的過程設計象GRANT或SET PASSWORD等查詢,並且這些查詢以普通文本形式記載在記錄檔中)。如果一個攻擊者猶如日檔案的讀許可權,只需在記錄檔上運行grep尋找諸如GRANT和PASSWORD等詞來發現敏感資訊。
顯然,你不想讓伺服器主機上的其他使用者有資料庫目錄檔案的寫入權限,因為他們可以重寫你的狀態檔案或資料庫表檔案,但是讀許可權也很危險。如果一個資料庫表檔案能被讀取,偷取檔案並得到MySQL本身,以普通文本顯示表的內容也很麻煩,為什嗎?因為你要做下列事情:

在伺服器主機上安裝你自己“特製”的MySQL伺服器,但是有一個不同於官方伺服器版本的連接埠、通訊端和資料目錄。
運行mysql_install_db初始化你的資料目錄,這賦予你作為MySQL root使用者訪問你的伺服器的許可權,所以你有對伺服器訪問機制的完全控制,它也建立一個test資料庫。
將對應於你想偷取得表檔案拷貝到你伺服器的資料庫目錄下的test目錄。
啟動你的伺服器。你可以隨意訪問資料庫表,SHOW TABLES FROM test顯示你有一個偷來的表的拷貝,SELECT *顯示它們任何一個的全部內容。
如果你確實很惡毒,將許可權公開給你伺服器的任何匿名使用者,這樣任何人能從任何地方串連伺服器訪問你的test資料庫。你現在將偷來的資料庫表公佈於眾了。
在考慮一下,從相反的角度,你想讓別人對你這樣嗎?當然不!你可以通過在資料庫錄下執行ls -l命令確定你的資料庫是否包含不安全的檔案和目錄。尋找有“組”和“其他使用者”使用權限設定的檔案和目錄。下面是一個不安全資料目錄的一部分列出:

 
% ls -l
total 10148
drwxrwxr-x 11 mysqladm wheel 1024 May 8 12:20 .
drwxr-xr-x 22 root wheel 512 May 8 13:31 ..
drwx------ 2 mysqladm mysqlgrp 512 Apr 16 15:57 menagerie
drwxrwxr-x 2 mysqladm wheel 512 Jan 25 20:40 mysql
drwxrwxr-x 7 mysqladm wheel 512 Aug 31 1998 sql-bench
drwxrwxr-x 2 mysqladm wheel 1536 May 6 06:11 test
drwx------ 2 mysqladm mysqlgrp 1024 May 8 18:43 tmp
....


正如你看到的,有些資料庫有正確的許可權,而其他不是。本例的情形是經過一段時間後的結果。較少限制的許可權由在使用權限設定方面比更新版本更不嚴格的較早版本伺服器設定的(注意更具限制的目錄menageria和tmp都有較近日期)。MySQL目前的版本確保這些檔案只能由運行伺服器的使用者讀取。

讓我們來修正這些許可權,使得只用伺服器使用者可訪問它們。你的主要保護工具來自於由UNIX檔案系統本身提供的設定檔案和目錄屬主和模式的工具。下面是我們要做的:

進入該目錄
% cd DATADIR

設定所有在資料目錄下的檔案屬主為由用於運行伺服器的帳號擁有(你必須以root執行這步)。在本文使用mysqladm和mysqlgrp作為該帳號的使用者名稱和組名。你可以使用下列命令之一改變屬主:
# chown mysqladm.mysqlgrp .

# find . -follow -type d -print | xargs chown mysqladm.mysqlgrp

設定你的資料目錄和資料庫目錄的模式使得他們只能由mysqladm讀取,這阻止其他使用者訪問你資料庫目錄的內容。你可以用下列命令之一以root或mysqladm身份運行。
% chmod -R go-rwx .

% find . -follow -type d -print | xargs chmod go-rwx

資料目錄內容的屬主和模式為mysqladm設定。現在你應該保證你總是以mysqladm使用者運行伺服器,因為現在這是唯一由訪問資料庫目錄許可權的使用者(除root)。
在完成這些設定後,你最終應該得到下面的資料目錄許可權:

% ls -l
total 10148
drwxrwx--- 11 mysqladm mysqlgrp 1024 May 8 12:20 .
drwxr-xr-x 22 root wheel 512 May 8 13:31 ..
drwx------ 2 mysqladm mysqlgrp 512 Apr 16 15:57 menagerie
drwx------ 2 mysqladm mysqlgrp 512 Jan 25 20:40 mysql
drwx------ 7 mysqladm mysqlgrp 512 Aug 31 1998 sql-bench
drwx------ 2 mysqladm mysqlgrp 1536 May 6 06:11 test
drwx------ 2 mysqladm mysqlgrp 1024 May 8 18:43 tmp
....



二、外部安全性-保證網路訪問的安全
MySQL的安全系統是很靈活的,它允許你以多種不同方式設定使用者權限。一般地,你可使用標準的SQL語句GRANT和REVOKE語句做,他們為你修改控制客戶訪問的授權表,然而,你可能由一個不支援這些語句的老版本的MySQL(在3.22.11之前這些語句不起作用),或者你發覺使用者權限看起來不是以你想要的方式工作。對於這種情況,瞭解MySQL授權表的結構和伺服器如何利用它們決定存取權限是有協助的,這樣的瞭解允許你通過直接修改授權表增加、刪除或修改使用者權限,它也允許你在檢查這些表時診斷許可權問題。

關於如何系統管理使用者帳號,見《MySQL的使用者管理》。而對GRANT和REVOKE語句詳細描述,見《MySQL參考手冊》。

2.1 MySQL授權表的結構和內容
通過網路連接伺服器的客戶對MySQL資料庫的訪問由授權表內容來控制。這些表位於mysql資料庫中,並在第一次安裝MySQL的過程中初始化(運行mysql_install_db指令碼)。授權表共有5個表:user、db、host、tables_priv和columns_priv。

表1 user、db和host授權表結構
存取範圍列

user db host
Host Host Host
User Db Db
Password User
資料庫/表許可權列
Alter_priv Alter_priv Alter_priv
Create_priv Create_priv Create_priv
Delete_priv Delete_priv Delete_priv
Drop_priv Drop_priv Drop_priv
Index_priv Index_priv Index_priv
Insert_priv Insert_priv Insert_priv
References_priv References_priv References_priv
Select_priv Select_priv Select_priv
Update_priv Update_pr



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。