mysql 網路安全性 MySQL安全性指南(1)

2021-10-17 22:26:48 字數 3947 閱讀 4893

作為乙個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參考手冊》。

mysql 網路安全性 MySQL安全性指南(3)

2.4 不用grant設定使用者 當你發出一條grant語句時,你指定乙個使用者名稱和主機名,可能還有口令。對該使用者生成乙個user表記錄,並且這些值記錄在user host和password列中。如果你在grant語句中指定全域性許可權,這些許可權記錄在記錄的許可權列中。其中要留神的是grant...

mysql安全性試驗 Mysql安全性測試

一 沒有進行預處理的sql語句 1.連線資料庫 conn mysql connect 127.0.0.1 3306 root 518666 if conn die could not connect mysql error 2.選擇資料庫 mysql select db mysql safe con...

mysql 安全性語言實驗 MySQL安全性語言

實驗2 安全性語言 安全性實驗包含兩個實驗專案,其中1個為必修,1個為選修。自主訪問控制實驗為設計型實驗專案,審計實驗為驗證型實驗專案,選做乙個即可。實驗2.1自主訪問控制實驗 1 實驗目的 掌握自主訪問控制許可權的定義和維護方法。2 實驗內容和要求 定義使用者 角色,分配許可權給使用者 角色,許可...