180 likes | 395 Views
MySQL 資料庫安全管理. ▊Outlines. MySQL 的安全機制 MySQL 權限系統 保護使用者帳戸 系統安全管理. ▊MySQL 的安全機制. 我們要登錄 MySQL 資料庫時,需要輸入帳號和密碼。但是 MySQL 資料庫和作業系統的帳號和密碼不一定要相同。 MySQL 會將權限設定在 MySQL 資料庫的五個資料表中。 MySQL 資料庫底下有六個主要的資料表格: columns_priv 資料表、 db 資料表、 func 資料表、 host 資料表、 tables_priv 資料表和 user 資料表。 其中和權限有關的資料表有五個:
E N D
▊Outlines • MySQL的安全機制 • MySQL權限系統 • 保護使用者帳戸 • 系統安全管理
▊MySQL的安全機制 • 我們要登錄MySQL資料庫時,需要輸入帳號和密碼。但是MySQL資料庫和作業系統的帳號和密碼不一定要相同。 • MySQL會將權限設定在MySQL資料庫的五個資料表中。 • MySQL資料庫底下有六個主要的資料表格:columns_priv資料表、db資料表、func資料表、host資料表、tables_priv資料表和user資料表。 • 其中和權限有關的資料表有五個: • columns_priv:和特定欄位的權限有關 • db:對資料庫的權限設定有關 • host:對特定連線主機和使用者組合的權限有關 • tables_priv:對資料表的權限設定有關 • user:和全域性的權限有關。
MySQL權限系統 • MySQL在權限系統上可分為兩個階段: • 檢查使用者是否擁有登入到MySQL資料庫系統的權限(驗証階段) • 透過授權資料表來判斷是否擁有足夠的特定查詢指令權限(授權階段)
第一階段:驗証階段 • 檢查使用者是否擁有登入到MySQL資料庫系統的權限 • 當我們要連接到MySQL資料庫伺服器時,我們輸入使用者名稱(username)、連線主機(host)和密碼(password)。這時,MySQL會檢查使用者資料表 (user table)來看看我們是否可以連線, 如果不符合即不會連結到該伺服器。
我們使用describe user來顯示我們user資料表的欄位內容。 • 有使用者的名稱User、密碼Password和主機Host,也有我們SQL敘述的權限,而權限的類型Type是屬於Enum(‘n’,’y’),’有’或’沒有’。 • 在user資料表中不允許使用者名稱出現萬用字元’%’。 • 一般使用者通常沒有全域性的權限。
在user資料表的記錄,記載著某一個使用者是否有全域性的權限。在user資料表的記錄,記載著某一個使用者是否有全域性的權限。 • 右表為欄位名稱所對應的權限內容,就部份內容說明如下: • Alter_priv權限允許使用者修改資料表的內容 • Create_priv則設定使用者是否可以新建資料庫和資料表 • Delete_priv權限設定使用者是否可以執行刪除資料(DELETE)敘述
第二階段:授權階段 • 透過授權資料表來判斷是否擁有足夠的特定查詢指令權限。 • 當使用者進入MySQL資料庫後,db、host、tables_priv、columns_priv資料表會設定使用者的各項權限。 • 在進行特定指令之前,MySQL會依據授權資料表來判定該使用者是否擁有足的權限。
我們使用describe db來顯示我們db資料表的欄位內容。 • 有使用者的名稱User、資料庫Db和主機Host,也有我們SQL敘述的權限,而權限的類型Type是屬於Enum(‘n’,’y’),’有’或’沒有’。 • 在db資料表中不允許使用者名稱出現萬用字元’%’。
我們使用describe host來顯示我們Host資料表的欄位內容。 • 在這裏有資料庫Db和主機Host,也有我們SQL敘述的權限,而權限的類型Type是屬於Enum(‘n’,’y’),’有’或’沒有’。 • MySQL將db和host資料表配合使用來控制存取資料庫的權限。
我們使用describe tables_priv來顯示我們資料表tables_priv的欄位內容。 • 在這裏有資料庫Db、使用者User和主機Host。
我們使用describe columns_priv來顯示我們columns_priv資料表的欄位內容。
我們可以使用show grants敘述來查看使用者目前的權限。 • root是超級使用者,一般我們都授與全部(ALL)的權限(PRIVILEGES)給他,localhost是我們主機的名稱。
lulu是一般使用者,localhost是我們主機的名稱。lulu的權限有select、insert、update、delete,而辨別lulu的密碼為已經加密過的’19b68057189b027f’。lulu是一般使用者,localhost是我們主機的名稱。lulu的權限有select、insert、update、delete,而辨別lulu的密碼為已經加密過的’19b68057189b027f’。
保護使用者帳戸 • 設定root密碼 • 否則任何人只要使用root 這個超級使用者代號,皆能進入該系統。 • 刪除匿名帳戸 • 不論在Windows或Linux作業系統,MySQL在安裝後,皆會產生匿名帳號,為求安全起見,可利用下列方式來刪除匿名帳號: Delete from user where user=“”; Delete from db where user=“”; • 危險的權限 (設定管理者層級的權限給其他人時) • Process: 允許使用者使用指令 “Show processlist” ,這樣將會揭露所有的查詢執行程序 ,等於是讓使用者資料曝光。 • With Grant Option: 若給予其他使用者此權限,即准許使用者彼此分享權限,可能會導致DBA 辛辛苦苦建立的權限架構崩潰。 • File: 可讓使用者藉由指令 “Load data infile”從伺服器載入檔案(密碼檔或資料庫檔等)。
▊系統安全管理 • For Database Server: • MySQL資料庫使用存取控制列表(ACL)的方式來管理權限。 • 資料庫伺服器會維護一組儲存使用者權限的資料表,這組資料表所記載的權限可以針對資料庫、資料表或欄位來對不同的使用者作授權。 • For System: • MySQL會以常駐程式的方式來提供服務,因此我們的作業系統和網路服務的安全機制也需同時考量。 • 若無法控制作業系統內的檔案存取,而耗費時間去規劃MySQL的使用者權限設定,到頭來會白忙一場。所以需注意作業系統相關的檔案與目錄的存取權限。 • 另外,可以使用防火牆來隔絕不安全的區域。
其它注意事項: • 考慮使用SSL (Secure Sockets Layer) 連線 • 在網路上要傳送重要訊息時(ex: 資金訊息、交易訊息、信用卡資料…等),為避免駭客竊聽MySQL與用戸端之間的封包,可以使用SSL安全通訊協定來加密。 • 採用RC4, MD5及RSA等加密演算法。 • 在網上買東西,當進入輸入信用卡號碼的網頁時,若該網頁的URL是以https://開頭,那個s就是SSL的意思。 • 注意主機安全 • 資料庫是一個企業的命脈,因此資料庫主機也必須做好保全的工作 (ex: 備份)。 • 要防止電源被切斷、主機被竊…等事項。