主頁 > 知識(shí)庫 > MySQL安全性指南 (1)(轉(zhuǎn))

MySQL安全性指南 (1)(轉(zhuǎn))

熱門標(biāo)簽:語音電話機(jī)器人營銷方案 語音電話機(jī)器人缺點(diǎn) 修改高德地圖標(biāo)注 廣州市400電話辦理 淮安自動(dòng)外呼系統(tǒng)開發(fā) 百變地圖標(biāo)注 宜賓外呼系統(tǒng)廠家 南通防封外呼系統(tǒng)運(yùn)營商 地圖標(biāo)注原件
正在看的ORACLE教程是:MySQL安全性指南 (1)(轉(zhuǎn))。 MySQL安全性指南
作 者: 晏子


作為一個(gè)MySQL的系統(tǒng)管理員,你有責(zé)任維護(hù)你的MySQL數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)安全性和完整性。本文主要主要介紹如何建立一個(gè)安全的MySQL系統(tǒng),從系統(tǒng)內(nèi)部和外部網(wǎng)絡(luò)兩個(gè)角度,為你提供一個(gè)指南。

本文主要考慮下列安全性有關(guān)的問題:

為什么安全性很重要,你應(yīng)該防范那些攻擊?
服務(wù)器面臨的風(fēng)險(xiǎn)(內(nèi)部安全性),如何處理?
連接服務(wù)器的客戶端風(fēng)險(xiǎn)(外部安全性),如何處理?
MySQL管理員有責(zé)任保證數(shù)據(jù)庫內(nèi)容的安全性,使得這些數(shù)據(jù)記錄只能被那些正確授權(quán)的用戶訪問,這涉及到數(shù)據(jù)庫系統(tǒng)的內(nèi)部安全性和外部安全性。
內(nèi)部安全性關(guān)心的是文件系統(tǒng)級(jí)的問題,即,防止MySQL數(shù)據(jù)目錄(DATADIR)被在服務(wù)器主機(jī)有賬號(hào)的人(合法或竊取的)進(jìn)行攻擊。如果數(shù)據(jù)目錄內(nèi)容的權(quán)限過分授予,使得每個(gè)人均能簡(jiǎn)單地替代對(duì)應(yīng)于那些數(shù)據(jù)庫表的文件,那么確??刂瓶蛻敉ㄟ^網(wǎng)絡(luò)訪問的授權(quán)表設(shè)置正確,對(duì)此毫無意義。

外部安全性關(guān)心的是從外部通過網(wǎng)絡(luò)連接服務(wù)器的客戶的問題,即,保護(hù)MySQL服務(wù)器免受來自通過網(wǎng)絡(luò)對(duì)服務(wù)器的連接的攻擊。你必須設(shè)置MySQL授權(quán)表(grant table),使得他們不允許訪問服務(wù)器管理的數(shù)據(jù)庫內(nèi)容,除非提供有效的用戶名和口令。

下面就詳細(xì)介紹如何設(shè)置文件系統(tǒng)和授權(quán)表mysql,實(shí)現(xiàn)MySQL的兩級(jí)安全性。


一、內(nèi)部安全性-保證數(shù)據(jù)目錄訪問的安全
MySQL服務(wù)器通過在MySQL數(shù)據(jù)庫中的授權(quán)表提供了一個(gè)靈活的權(quán)限系統(tǒng)。你可以設(shè)置這些表的內(nèi)容,允許或拒絕客戶對(duì)數(shù)據(jù)庫的訪問,這提供了你防止未授權(quán)的網(wǎng)絡(luò)訪問對(duì)你數(shù)據(jù)庫攻擊的安全手段,然而如果主機(jī)上其他用戶能直接訪問數(shù)據(jù)目錄內(nèi)容,建立對(duì)通過網(wǎng)絡(luò)訪問數(shù)據(jù)庫的良好安全性對(duì)你毫無幫助,除非你知道你是登錄MySQL服務(wù)器運(yùn)行主機(jī)的唯一用戶,否則你需要關(guān)心在這臺(tái)機(jī)器上的其他用戶獲得對(duì)數(shù)據(jù)目錄的訪問的可能性。

以下是你應(yīng)該保護(hù)的內(nèi)容:

數(shù)據(jù)庫文件。很明顯,你要維護(hù)服務(wù)器管理的數(shù)據(jù)庫的私用性。數(shù)據(jù)庫擁有者通常并且應(yīng)該考慮數(shù)據(jù)庫內(nèi)容的安全性,即使他們不想,也應(yīng)該考慮時(shí)數(shù)據(jù)庫內(nèi)容公開化,而不是通過糟糕的數(shù)據(jù)目錄的安全性來暴露這些內(nèi)容。
日志文件。一般和更新日志必須保證安全,因?yàn)樗麄儼樵兾谋?。?duì)日志文件有訪問權(quán)限的任何人可以監(jiān)視數(shù)據(jù)庫進(jìn)行過的操作。
更要重點(diǎn)考慮的日志文件安全性是諸如GRANT和SET PASSWORD等的查詢也被記載了,一般和更新日志包含有敏感查詢的文本,包括口令(MySQL使用口令加密,但它在已經(jīng)完成設(shè)置后才運(yùn)用于以后的連接建立。設(shè)置一個(gè)口令的過程設(shè)計(jì)象GRANT或SET PASSWORD等查詢,并且這些查詢以普通文本形式記載在日志文件中)。如果一個(gè)攻擊者猶如日文件的讀權(quán)限,只需在日志文件上運(yùn)行g(shù)rep尋找諸如GRANT和PASSWORD等詞來發(fā)現(xiàn)敏感信息。
顯然,你不想讓服務(wù)器主機(jī)上的其他用戶有數(shù)據(jù)庫目錄文件的寫權(quán)限,因?yàn)樗麄兛梢灾貙懩愕臓顟B(tài)文件或數(shù)據(jù)庫表文件,但是讀權(quán)限也很危險(xiǎn)。如果一個(gè)數(shù)據(jù)庫表文件能被讀取,偷取文件并得到MySQL本身,以普通文本顯示表的內(nèi)容也很麻煩,為什么?因?yàn)槟阋鱿铝惺虑椋?br>
在服務(wù)器主機(jī)上安裝你自己“特制”的MySQL服務(wù)器,但是有一個(gè)不同于官方服務(wù)器版本的端口、套接字和數(shù)據(jù)目錄。
運(yùn)行mysql_install_db初始化你的數(shù)據(jù)目錄,這賦予你作為MySQL root用戶訪問你的服務(wù)器的權(quán)限,所以你有對(duì)服務(wù)器訪問機(jī)制的完全控制,它也建立一個(gè)test數(shù)據(jù)庫。
將對(duì)應(yīng)于你想偷取得表文件拷貝到你服務(wù)器的數(shù)據(jù)庫目錄下的test目錄。
啟動(dòng)你的服務(wù)器。你可以隨意訪問數(shù)據(jù)庫表,SHOW TABLES FROM test顯示你有一個(gè)偷來的表的拷貝,SELECT *顯示它們?nèi)魏我粋€(gè)的全部?jī)?nèi)容。
如果你確實(shí)很惡毒,將權(quán)限公開給你服務(wù)器的任何匿名用戶,這樣任何人能從任何地方連接服務(wù)器訪問你的test數(shù)據(jù)庫。你現(xiàn)在將偷來的數(shù)據(jù)庫表公布于眾了。
在考慮一下,從相反的角度,你想讓別人對(duì)你這樣嗎?當(dāng)然不!你可以通過在數(shù)據(jù)庫錄下執(zhí)行l(wèi)s -l命令確定你的數(shù)據(jù)庫是否包含不安全的文件和目錄。查找有“組”和“其他用戶”權(quán)限設(shè)置的文件和目錄。下面是一個(gè)不安全數(shù)據(jù)目錄的一部分列出:

 
% 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
....


正如你看到的,有些數(shù)據(jù)庫有正確的權(quán)限,而其他不是。本例的情形是經(jīng)過一段時(shí)間后的結(jié)果。較少限制的權(quán)限由在權(quán)限設(shè)置方面比更新版本更不嚴(yán)格的較早版本服務(wù)器設(shè)置的(注意更具限制的目錄menageria和tmp都有較近日期)。MySQL當(dāng)前版本確保這些文件只能由運(yùn)行服務(wù)器的用戶讀取。

讓我們來修正這些權(quán)限,使得只用服務(wù)器用戶可訪問它們。你的主要保護(hù)工具來自于由UNIX文件系統(tǒng)本身提供的設(shè)置文件和目錄屬主和模式的工具。下面是我們要做的:

進(jìn)入該目錄
% cd DATADIR

設(shè)置所有在數(shù)據(jù)目錄下的文件屬主為由用于運(yùn)行服務(wù)器的賬號(hào)擁有(你必須以root執(zhí)行這步)。在本文使用mysqladm和mysqlgrp作為該賬號(hào)的用戶名和組名。你可以使用下列命令之一改變屬主:
# chown mysqladm.mysqlgrp .

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

設(shè)置你的數(shù)據(jù)目錄和數(shù)據(jù)庫目錄的模式使得他們只能由mysqladm讀取,這阻止其他用戶訪問你數(shù)據(jù)庫目錄的內(nèi)容。你可以用下列命令之一以root或mysqladm身份運(yùn)行。
% chmod -R go-rwx  .

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

數(shù)據(jù)目錄內(nèi)容的屬主和模式為mysqladm設(shè)置?,F(xiàn)在你應(yīng)該保證你總是以mysqladm用戶運(yùn)行服務(wù)器,因?yàn)楝F(xiàn)在這是唯一由訪問數(shù)據(jù)庫目錄權(quán)限的用戶(除root)。
在完成這些設(shè)置后,你最終應(yīng)該得到下面的數(shù)據(jù)目錄權(quán)限:

% 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

[1] [2] 下一頁

正在看的ORACLE教程是:MySQL安全性指南 (1)(轉(zhuǎn))。 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
....



二、外部安全性-保證網(wǎng)絡(luò)訪問的安全
MySQL的安全系統(tǒng)是很靈活的,它允許你以多種不同方式設(shè)置用戶權(quán)限。一般地,你可使用標(biāo)準(zhǔn)的SQL語句GRANT和REVOKE語句做,他們?yōu)槟阈薷目刂瓶蛻粼L問的授權(quán)表,然而,你可能由一個(gè)不支持這些語句的老版本的MySQL(在3.22.11之前這些語句不起作用),或者你發(fā)覺用戶權(quán)限看起來不是以你想要的方式工作。對(duì)于這種情況,了解MySQL授權(quán)表的結(jié)構(gòu)和服務(wù)器如何利用它們決定訪問權(quán)限是有幫助的,這樣的了解允許你通過直接修改授權(quán)表增加、刪除或修改用戶權(quán)限,它也允許你在檢查這些表時(shí)診斷權(quán)限問題。

關(guān)于如何管理用戶賬號(hào),見《MySQL的用戶管理》。而對(duì)GRANT和REVOKE語句詳細(xì)描述,見《MySQL參考手冊(cè)》。

2.1 MySQL授權(quán)表的結(jié)構(gòu)和內(nèi)容
通過網(wǎng)絡(luò)連接服務(wù)器的客戶對(duì)MySQL數(shù)據(jù)庫的訪問由授權(quán)表內(nèi)容來控制。這些表位于mysql數(shù)據(jù)庫中,并在第一次安裝MySQL的過程中初始化(運(yùn)行mysql_install_db腳本)。授權(quán)表共有5個(gè)表:user、db、host、tables_priv和columns_priv。

表1 user、db和host授權(quán)表結(jié)構(gòu)
訪問范圍列

user db host
Host Host Host
User Db Db
Password User  
數(shù)據(jù)庫/表權(quán)限列
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_priv Update_priv
File_priv Grant_priv Grant_priv
Grant_priv   
Process_priv   
Reload_priv   
Shutdown_priv   
 
表2 tables_priv和columns_priv屬權(quán)表結(jié)構(gòu)

訪問范圍列
tables_priv  columns_priv
Host  Host
Db  Db
User  User
Table_name  Table_name
Column_name   
權(quán)限列
Table_priv  Column_priv

授權(quán)表的內(nèi)容有如下用途:

user表
user表列出可以連接服務(wù)器的用戶及其口令,并且它指定他們有哪種全局(超級(jí)用戶)權(quán)限。在user表啟用的任何權(quán)限均是全局權(quán)限,并適用于所有數(shù)據(jù)庫。例如,如果你啟用了DELETE權(quán)限,在這里列出的用戶可以從任何表中刪除記錄,所以在你這樣做之前要認(rèn)真考慮。
db表
db表列出數(shù)據(jù)庫,而用戶有權(quán)限訪問它們。在這里指定的權(quán)限適用于一個(gè)數(shù)據(jù)庫中的所有表。
host表
host表與db表結(jié)合使用在一個(gè)較好層次上控制特定主機(jī)對(duì)數(shù)據(jù)庫的訪問權(quán)限,這可能比單獨(dú)使用db好些。這個(gè)表不受GRANT和REVOKE語句的影響,所以,你可能發(fā)覺你根本不是用它。
tables_priv表
tables_priv表指定表級(jí)權(quán)限,在這里指定的一個(gè)權(quán)限適用于一個(gè)表的所有列。
columns_priv表
columns_priv表指定列級(jí)權(quán)限。這里指定的權(quán)限適用于一個(gè)表的特定列。
在“不用GRANT設(shè)置用戶”一節(jié)里,我們?cè)儆懻揋RANT語句如何對(duì)修改這些表起作用,和你怎樣能通過直接修改授權(quán)表達(dá)到同樣的效果。

tables_priv和columns_priv表在MySQL 3.22.11版引進(jìn)(與GRANT語句同時(shí))。如果你有較早版本的MySQL,你的mysql數(shù)據(jù)庫將只有user、db和host表。如果你從老版本升級(jí)到3.22.11或更新,而沒有tables_priv和columns_priv表,運(yùn)行mysql_fix_privileges_tables腳本創(chuàng)建它們。

MySQL沒有rows_priv表,因?yàn)樗惶峁┯涗浖?jí)權(quán)限,例如,你不能限制用戶于表中包含特定列值的行。如果你確實(shí)需要這種能力,你必須用應(yīng)用編程來提供。如果你想執(zhí)行建議的記錄級(jí)鎖定,你可用GET_LOCK()函數(shù)做到。

授權(quán)表包含兩種列:決定一個(gè)權(quán)限何時(shí)運(yùn)用的范圍列和決定授予哪種權(quán)限的權(quán)限列。

2.1.1 授權(quán)表范圍列
授權(quán)表范圍列指定表中的權(quán)限何時(shí)運(yùn)用。每個(gè)授權(quán)表?xiàng)l目包含User和Host列來指定權(quán)限何時(shí)運(yùn)用于一個(gè)給定用戶從給定主機(jī)的連接。其他表包含附加的范圍列,如db表包含一個(gè)Db列指出權(quán)限運(yùn)用于哪個(gè)數(shù)據(jù)庫。類似地,tables_priv和columns_priv表包含范圍字段,縮小范圍到一個(gè)數(shù)據(jù)庫中的特定表或一個(gè)表的特定列。

2.1.2 授權(quán)表權(quán)限列
授權(quán)表還包含權(quán)限列,他們指出在范圍列中指定的用戶擁有何種權(quán)限。由MySQL支持的權(quán)限如下表所示。該表使用GRANT語句的權(quán)限名稱。對(duì)于絕大多數(shù)在user、db和host表中的權(quán)限列的名稱與GRANT語句中有明顯的聯(lián)系。如Select_priv對(duì)應(yīng)于SELECT權(quán)限。

上一頁  [1] [2] 

標(biāo)簽:南平 池州 南平 股票投資 襄陽 嘉峪關(guān) 聊城 通化

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL安全性指南 (1)(轉(zhuǎn))》,本文關(guān)鍵詞  MySQL,安全性,指南,轉(zhuǎn),MySQL,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL安全性指南 (1)(轉(zhuǎn))》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL安全性指南 (1)(轉(zhuǎn))的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章