溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么理解MySQL安全

發(fā)布時(shí)間:2021-11-08 11:15:30 來源:億速云 閱讀:120 作者:iii 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容介紹了“怎么理解MySQL安全”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

MySQL安全

當(dāng)多個(gè)用戶同時(shí)訪問MySQL 服務(wù)器,尤其當(dāng)這些用戶通過Internet 進(jìn)行連接時(shí),MySQL 服務(wù)器將有安全風(fēng)險(xiǎn)。不僅MySQL 服務(wù)器處于危險(xiǎn)中,整個(gè)服務(wù)器主機(jī)也可能受到損害。有多種類型的安全攻擊:竊聽、更改、播放、拒絕服務(wù);

對(duì)于存儲(chǔ)在MySQL 數(shù)據(jù)庫中的數(shù)據(jù),必須使其保持安全,以免MySQL 用戶期望保密的數(shù)據(jù)被公開。MySQL 使用基于訪問控制列表(access control list, ACL) 的安全。對(duì)于所有連接、查詢和其他操作,MySQL 使用基于ACL 的安全。ACL 也支持MySQL 客戶機(jī)和服務(wù)器之間的SSL 加密連接。

最常見的安裝安全風(fēng)險(xiǎn)為:

u  網(wǎng)絡(luò)安全:有關(guān)客戶機(jī)帳戶的信息存儲(chǔ)在mysql 數(shù)據(jù)庫中。為每個(gè)帳戶設(shè)置的權(quán)限應(yīng)該僅提供對(duì)該帳戶需要查看或修改的數(shù)據(jù)的訪問權(quán)限。指定帳戶口令可使用戶難以使用別人的帳戶連接到服務(wù)器。例如,MySQL root 帳戶具有可執(zhí)行任何數(shù)據(jù)庫操作的完全權(quán)限,因此有必要為其指定一個(gè)不易猜到的口令。

u  操作系統(tǒng)安全:通常使用專用的登錄帳戶管理MySQL。但是,該帳戶所在的主機(jī)上可能還有其他登錄帳戶。將與MySQL 不相關(guān)的帳戶數(shù)量減至最少可以盡可能地降低此風(fēng)險(xiǎn)。

u  文件系統(tǒng)安全:目錄和文件是文件系統(tǒng)的一部分,因此您需要保護(hù)它們免受在服務(wù)器主機(jī)上具有登錄帳戶的其他用戶的直接訪問。MySQL 安裝還包括用于管理和訪問數(shù)據(jù)庫的程序和腳本。用戶需要能夠運(yùn)行其中的一部分(例如客戶機(jī)程序),但應(yīng)該無法對(duì)其進(jìn)行修改或替換。

可以認(rèn)為網(wǎng)絡(luò)安全是最高防御級(jí)別。其中包含了操作系統(tǒng)安全。后者又包含了文件系統(tǒng)安全以及更深層的用戶安全。盡管每個(gè)安全級(jí)別都有缺陷(或漏洞),但是當(dāng)它們結(jié)合使用時(shí),各個(gè)級(jí)別形成了一個(gè)幾乎堅(jiān)不可摧的堡壘。

1.1.       網(wǎng)絡(luò)安全

網(wǎng)絡(luò)安全風(fēng)險(xiǎn)預(yù)防任務(wù):

— 投資設(shè)置防火墻。

— 確保僅供授權(quán)的客戶機(jī)進(jìn)行訪問。

— 限制服務(wù)器所使用的網(wǎng)絡(luò)接口。

— 使用安全安裝腳本:mysql_secure_installation

— 遵守常規(guī)權(quán)限安全事項(xiàng)。

— 不通過Internet 傳輸明文(未加密)數(shù)據(jù)。

MySQL 服務(wù)器在客戶機(jī)/服務(wù)器環(huán)境中運(yùn)行,并提供內(nèi)在面向網(wǎng)絡(luò)的服務(wù)。確保只有授權(quán)的客戶機(jī)可以連接到服務(wù)器以訪問其數(shù)據(jù)庫是非常重要的。確保使用口令保護(hù)MySQL 帳戶并且不為其設(shè)置不必要的權(quán)限也非常重要。此外,請(qǐng)考慮限制服務(wù)器所使用的網(wǎng)絡(luò)接口。

有許多不錯(cuò)的免費(fèi)開源防火墻。MySQL 不是為了面向Internet。如果MySQL 未放置在DMZ 中,應(yīng)格外小心。事實(shí)上,如果MySQL 與面向Internet 的應(yīng)用程序在同一計(jì)算機(jī)上運(yùn)行,則可能應(yīng)該僅使用文件套接字。

未加密的數(shù)據(jù)可被任何有時(shí)間和能力攔截該數(shù)據(jù)并使用它來達(dá)到自己目的的用戶訪問。因此,您應(yīng)該使用SSL 或SSH 等加密協(xié)議。

1.2.       口令安全

口令安全風(fēng)險(xiǎn)預(yù)防任務(wù):

— 使用強(qiáng)口令保護(hù)初始MySQL 帳戶。

— 不在數(shù)據(jù)庫中存儲(chǔ)任何純文本口令。mysql 數(shù)據(jù)庫將口令存儲(chǔ)在user 表中。最好使用單向散列存儲(chǔ)這些口令。

— 不從字典中選擇口令。

如果您使用純文本口令,則在您的計(jì)算機(jī)被入侵后,入侵者可以獲取完整的口令列表并使用這些口令。請(qǐng)改用MD5()、SHA1()、SHA2() 或其他單向散列函數(shù)來存儲(chǔ)散列值。

這種謹(jǐn)慎的方法用于在服務(wù)器中存儲(chǔ)其他口令。有一些特殊程序可破譯口令。應(yīng)對(duì)這些程序的方法之一是使用由句子中每個(gè)單詞的第一個(gè)字符組成的口令(例如,“Mary had a little lamb”可以生成口令“Mhall”)。這種口令易于記憶和輸入,但不知道句子的人很難猜到。

1.3.       操作系統(tǒng)安全

操作系統(tǒng)安全與配置的復(fù)雜程度有關(guān);

將不直接與運(yùn)行MySQL 相關(guān)的服務(wù)器主機(jī)任務(wù)數(shù)減至最少。當(dāng)為主機(jī)配置的任務(wù)較少時(shí),與運(yùn)行復(fù)雜配置以支持多個(gè)服務(wù)的主機(jī)相比,前一個(gè)主機(jī)更易于確保安全。所分配的MySQL 服務(wù)器最好是主要用于MySQL 或?qū)9┢溆?,而不是用于Web 托管或郵件處理之類的其他目的,或者是為通用交互使用而托管登錄帳戶的計(jì)算機(jī)。

如果其他用戶可以登錄,則可能會(huì)存在MySQL 安裝及其管理帳戶的私密數(shù)據(jù)庫信息被公開的風(fēng)險(xiǎn)。例如,不正確的文件系統(tǒng)權(quán)限可能會(huì)導(dǎo)致數(shù)據(jù)文件被公開。用戶可以運(yùn)行ps 命令來查看有關(guān)進(jìn)程及其執(zhí)行環(huán)境的信息。

當(dāng)計(jì)算機(jī)僅用于MySQL 時(shí),除了系統(tǒng)管理帳戶和管理MySQL 自身可能需要的其他任何帳戶(例如mysql 用戶的帳戶),無需再設(shè)置登錄帳戶。

此外,如果在服務(wù)器主機(jī)上運(yùn)行的網(wǎng)絡(luò)服務(wù)較少,則需要保持打開狀態(tài)的網(wǎng)絡(luò)端口也較少。關(guān)閉端口可將主機(jī)可能遭遇的攻擊途徑減至最少。盡量減少非MySQL 服務(wù)的數(shù)量意味著更多的系統(tǒng)資源可以專用于MySQL,從而可以在性能方面獲益。

1.4.       文件系統(tǒng)安全

MySQL 安裝(目錄和文件)風(fēng)險(xiǎn)預(yù)防任務(wù):

l  更改所有權(quán)和訪問權(quán)限后,再啟動(dòng)服務(wù)器。

將多用戶系統(tǒng)的所有權(quán)設(shè)置為具有管理權(quán)限的帳戶。將與MySQL 相關(guān)的目錄和文件以及user 和group 表所有權(quán)設(shè)置為mysql,其中包括:MySQL 程序、數(shù)據(jù)庫目錄和文件、日志、狀態(tài)和配置文件;

l  不要在保護(hù)文件之前設(shè)置口令。否則,將允許未經(jīng)授權(quán)的用戶替換文件。

l  設(shè)置一個(gè)專用于MySQL 管理的帳戶。

請(qǐng)勿向任何人(MySQL root 帳戶除外)授予對(duì)mysql 數(shù)據(jù)庫中的user 表的訪問權(quán)限。將MySQL 置于防火墻后或隔離區(qū)(demilitarized zone, DMZ) 中。

僅當(dāng)服務(wù)器正在運(yùn)行時(shí),才可以設(shè)置MySQL root 帳戶的口令。因此,啟動(dòng)服務(wù)器并設(shè)置口令之前,請(qǐng)采取任何必要的措施來保護(hù)文件系統(tǒng)中與MySQL 相關(guān)的部分。如果在保護(hù)相應(yīng)文件之前設(shè)置了口令,則有權(quán)直接訪問 服務(wù)器主機(jī)上文件系統(tǒng)的用戶可能會(huì)替換這些文件。這會(huì)危害MySQL 安裝并撤消口令設(shè)置的效果。

對(duì)于Linux 之類的多用戶系統(tǒng),請(qǐng)將MySQL 安裝的所有組件的所有權(quán)設(shè)置為具有正確管理權(quán)限的專用登錄帳戶。這將保護(hù)安裝免受不負(fù)責(zé)數(shù)據(jù)庫管理的用戶的訪問。設(shè)置此帳戶的另外一個(gè)好處是,可以使用該帳戶運(yùn)行MySQL 服務(wù)器,而不是從Linux root 帳戶運(yùn)行服務(wù)器。具有root 登錄帳戶權(quán)限的服務(wù)器擁有不必要的文件系統(tǒng)訪問權(quán)限,從而成為一個(gè)安全風(fēng)險(xiǎn)。

注:本部分假定存在用戶名和組名均為mysql 的管理帳戶。不過,創(chuàng)建登錄帳戶的詳細(xì)信息因Linux 版本而不同,并且不在討論范圍之內(nèi)。請(qǐng)參閱適用于您操作系統(tǒng)的文檔。

1.5.       數(shù)據(jù)安全

用戶可通過多種方法來損壞數(shù)據(jù)。您必須采取措施以保護(hù)數(shù)據(jù)免受如SQL 注入等攻擊。

首先,請(qǐng)勿信任應(yīng)用程序用戶輸入的任何數(shù)據(jù)。用戶可以使用具有特殊意義的字符(如引號(hào)或轉(zhuǎn)義字符)獲取應(yīng)用程序代碼。如果用戶輸入類似于DROP DATABASE mysql; 的內(nèi)容,請(qǐng)確保應(yīng)用程序保持安全。

其次,保護(hù)數(shù)值和字符串?dāng)?shù)據(jù)的值。否則,用戶可以獲取對(duì)安全數(shù)據(jù)的訪問權(quán)限,然后提交可以銷毀數(shù)據(jù)或?qū)е路?wù)器負(fù)載過高的查詢。

最后,甚至需要保護(hù)公開可用的數(shù)據(jù),如Web 表單、URL 名稱、特殊字符等,因?yàn)楣魰?huì)浪費(fèi)服務(wù)器資源。

如果用戶輸入值234 時(shí),應(yīng)用程序生成一個(gè)類似于SELECT * FROM table WHERE ID=234 的查詢,則用戶可以輸入值234 OR 1=1 使應(yīng)用程序生成查詢SELECT * FROM table WHERE ID=234 OR 1=1。因此,服務(wù)器將檢索表中的每一行。這將公開每一行并導(dǎo)致服務(wù)器負(fù)載過高。為了防止這種類型的攻擊,請(qǐng)使用不會(huì)將值解釋為SQL表達(dá)式的存儲(chǔ)過程或預(yù)處理語句。

您可能認(rèn)為:如果數(shù)據(jù)庫僅包含公開可用的數(shù)據(jù),則該數(shù)據(jù)庫不需要保護(hù)。這是錯(cuò)誤的,即使允許顯示數(shù)據(jù)庫中的任何行,仍應(yīng)該防止通過注入INSERT、UPDATE、REPLACE 或DELETE 語句來進(jìn)行DdoS攻擊或修改數(shù)據(jù)的嘗試。否則,數(shù)據(jù)將對(duì)合法用戶不可用。

以下是一些用于檢測(cè)此問題的技巧:

— 在所有Web 表單中輸入單引號(hào)或雙引號(hào)(“'”和“"”)。

— 修改動(dòng)態(tài)URL,向其添加%22(“"”)、%23(“#”)和%27(“'”)。

— 在數(shù)值字段中輸入字符、空格和特殊符號(hào)而不是數(shù)字。應(yīng)用程序應(yīng)刪除這些內(nèi)容再將其傳遞給MySQL;否則,將生成錯(cuò)誤。

1.6.       安全連接

默認(rèn)情況下,MySQL 使用未加密的客戶機(jī)/服務(wù)器連接。但是未加密連接可能無法滿足在網(wǎng)絡(luò)上安全傳輸數(shù)據(jù)的要求,因?yàn)槲醇用苓B接網(wǎng)絡(luò)通信容易受到監(jiān)控和攻擊,客戶機(jī)和服務(wù)器之間傳輸?shù)臄?shù)據(jù)可能會(huì)被更改。

通過使用加密算法可抵御大多數(shù)威脅,加密算法會(huì)使所有類型的數(shù)據(jù)無法讀取,這可抵御多種類型的攻擊。如果應(yīng)用程序需要加密連接所提供的安全性,對(duì)于這些連接,必須考慮額外的計(jì)算資源。大家知道,數(shù)據(jù)加密是CPU 密集型操作,需要計(jì)算機(jī)執(zhí)行額外工作,因此可能推遲其他MySQL 任務(wù)。

1.6.1.      SSL 協(xié)議

MySQL 支持MySQL 客戶機(jī)和服務(wù)器之間的SSL(secure sockets layer,安全套接字層) 連接。SSL 連接協(xié)議具有以下特點(diǎn):

?  使用不同的加密算法確保公共網(wǎng)絡(luò)上數(shù)據(jù)的安全

?  檢測(cè)任何數(shù)據(jù)更改、丟失或重放

?  結(jié)合了使用X509 標(biāo)準(zhǔn)提供身份驗(yàn)證的算法

MySQL 可以針對(duì)單個(gè)連接啟用加密。根據(jù)各個(gè)應(yīng)用程序的需要,您可以選擇常規(guī)的未加密連接或安全的加密SSL 連接。

安全連接基于OpenSSL API,可通過MySQL C API 獲取。復(fù)制時(shí)使用C API,因此可以在master和slave之間使用安全連接。

X509 使得在Internet 上進(jìn)行身份識(shí)別成為可能。這主要用于電子商務(wù)應(yīng)用程序中?;旧?,應(yīng)該有一個(gè)受信任的證書頒發(fā)機(jī)構(gòu)(Certificate Authority, CA),該機(jī)構(gòu)將電子證書分配給任何需要它們的人。證書依賴于包含兩個(gè)加密密鑰(公鑰和私鑰)的非對(duì)稱加密算法。

證書所有者可以向另一方提供證書作為身份證明。證書包含其所有者的公鑰和其他詳細(xì)信息,由可信任的CA 簽名。使用此公鑰加密的任何數(shù)據(jù)都只能使用相應(yīng)的私鑰進(jìn)行解密,私鑰由證書所有者持有。

例如,訪問安全的(HTTPS) 電子商務(wù)站點(diǎn)時(shí),該站點(diǎn)將向您的瀏覽器提供其證書。瀏覽器將根據(jù)其受信任CA 列表驗(yàn)證該證書,并使用其中包含的公鑰創(chuàng)建加密的會(huì)話信息,該信息只能由發(fā)起服務(wù)器解密。然后,瀏覽器和服務(wù)器可以進(jìn)行安全通信。

1.6.2.      對(duì)MySQL 服務(wù)器使用SSL

對(duì)MySQL 服務(wù)器使用 SSL的要求:

?  系統(tǒng)必須支持yaSSL(已隨MySQL 提供)或OpenSSL。為便于使用安全連接,MySQL 已附帶了yaSSL。(MySQL 和yaSSL 采用相同的許可模型,但是OpenSSL 使用Apache 樣式的許可證。)

?  使用的MySQL 版本必須包含SSL 支持。

要獲取安全連接以便使用MySQL 和SSL,必須首先執(zhí)行以下操作:

?  裝入OpenSSL(如果使用的不是預(yù)編譯的MySQL)。

?  為MySQL 配置SSL 支持。要獲得OpenSSL,請(qǐng)?jiān)L問http://www.openssl.org。使用OpenSSL 構(gòu)建MySQL 需要一個(gè)共享的OpenSSL 庫;否則,將出現(xiàn)鏈接程序錯(cuò)誤。要將MySQL 源代碼分發(fā)配置為使用SSL,請(qǐng)調(diào)用CMake:

shell> cmake . -DWITH_SSL=bundled

?  該操作會(huì)將分發(fā)配置為使用附帶的yaSSL 庫。要改用系統(tǒng)SSL 庫,請(qǐng)將相應(yīng)選項(xiàng)指定為-DWITH_SSL=system。

?  確保mysql 數(shù)據(jù)庫中的user 表包含與SSL 相關(guān)的列(ssl_* 和x509_*)。如果user 表中沒有與SSL 相關(guān)的列(以ssl_* 和x509_* 開頭),則必須使用mysql_upgrade 程序?qū)ζ溥M(jìn)行升級(jí)。

?  使用--ssl 選項(xiàng)檢查服務(wù)器二進(jìn)制文件是否使用SSL 支持進(jìn)行編譯。如果服務(wù)器不支持SSL,則會(huì)出現(xiàn)錯(cuò)誤:

shell> mysqld --ssl --help

060525 14:18:52 [ERROR] mysqld: unknown option '--ssl'

最后,使用SSL 的選項(xiàng)啟動(dòng)服務(wù)器。

1.6.3.      使用SSL 啟動(dòng)MySQL 服務(wù)器

通過以下選項(xiàng),使mysqld 服務(wù)器可以使用SSL進(jìn)行連接:

?  --ssl-ca:確定要使用的證書頒發(fā)機(jī)構(gòu)(Certificate Authority, CA) 證書(加密必需)

?  --ssl-key:確定服務(wù)器公鑰

?  --ssl-cert:確定服務(wù)器私鑰

shell> mysqld --ssl-ca=ca-cert.pem --ssl-cert=server-cert.pem --ssl-key=server-key.pem

可以向客戶機(jī)發(fā)送--ssl-cert 并針對(duì)其正在使用的CA 證書進(jìn)行驗(yàn)證。

1.6.4.      SSL 加密連接

要使用SSL 支持建立與MySQL 服務(wù)器的安全連接,必須指定的客戶機(jī)選項(xiàng)取決于客戶機(jī)所使用的用戶帳戶的SSL 要求。除基于用戶名和口令的常見驗(yàn)證之外,MySQL 還可以檢查X509 證書屬性。要為MySQL 帳戶指定與SSL 相關(guān)的選項(xiàng),請(qǐng)使用GRANT 語句的REQUIRE 子句。使用GRANT 語句的REQUIRE SSL 選項(xiàng)可僅允許某個(gè)帳戶使用SSL 加密連接:

mysql>GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE SSL;

通過使用--ssl-ca 選項(xiàng)啟動(dòng)mysql 客戶機(jī)可獲得加密連接。也可以為X509 連接指定--ssl-key 和 --ssl-cert 選項(xiàng):

shell> mysql --ssl-ca=ca-cert.pem --ssl-cert=server-cert.pem --ssl-key=server-key.pem

有很多方法可限制給定帳戶的連接類型。本次只介紹三種選項(xiàng):

?  REQUIRE NONE:指示帳戶沒有SSL 或X509 要求。如果未指定與SSL 相關(guān)的REQUIRE 選項(xiàng),則這是默認(rèn)選項(xiàng)。如果用戶名和口令有效,則允許未加密的連接。但是,如果客戶機(jī)具有相應(yīng)的證書和密鑰文件,則客戶機(jī)也可以通過指定一個(gè)選項(xiàng)來要求加密連接。即,客戶機(jī)無需指定任何SSL 命令選項(xiàng),在這種情況下,連接是未加密的。

?  REQUIRE SSL:指示服務(wù)器僅允許帳戶使用SSL 加密連接。

?  REQUIRE X509:客戶機(jī)必須具有有效的證書,但具體的證書、頒發(fā)者和主題無關(guān)緊要。唯一的要求是,應(yīng)該可以使用其中一個(gè)CA 證書驗(yàn)證其簽名。

1.6.5.      檢查SSL 狀態(tài)

使用have_ssl 系統(tǒng)變量的值檢查正在運(yùn)行的mysqld 服務(wù)器是否支持SSL:

mysql> SHOW VARIABLES LIKE 'have_ssl';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| have_ssl | YES |

+---------------+-------+

使用ssl_cipher 狀態(tài)變量的值檢查當(dāng)前服務(wù)器連接是否使用了SSL:

mysql> SHOW STATUS LIKE 'ssl_cipher';

+---------------+--------------------+

| Variable_name | Value |

+---------------+--------------------+

| ssl_cipher | DHE-RSA-AES256-SHA |

+---------------+--------------------+

如果have_ssl 的值為YES,則服務(wù)器支持SSL 連接。如果值為DISABLED,則服務(wù)器支持SSL 連接,但在啟動(dòng)時(shí)未提供相應(yīng)的--ssl-* 選項(xiàng)。

對(duì)于mysql 客戶機(jī),可以使用STATUS 或\s 命令并檢查SSL 行:

mysql> \s

...

SSL: Cipher in use is DHE-RSA-AES256-SHA

...

1.6.6.      使用SSL 的優(yōu)點(diǎn)和缺點(diǎn)

優(yōu)點(diǎn):

?  提高了有需求的應(yīng)用程序的安全性

?  可以針對(duì)單個(gè)連接啟用

?  可用于復(fù)制操作

缺點(diǎn):

?  占用大量CPU 資源

?  降低了客戶機(jī)/服務(wù)器協(xié)議的速度

?  可能會(huì)推遲其他SQL 任務(wù)

1.6.7.      MySQL 安全遠(yuǎn)程連接

MySQL 支持與遠(yuǎn)程MySQL 服務(wù)器的SSH(secure shell,安全shell) 連接。這一功能要求:

?  客戶機(jī)上存在SSH 客戶機(jī)

?  通過SSH 隧道進(jìn)行從客戶機(jī)到服務(wù)器的端口轉(zhuǎn)發(fā)

?  具有SSH 客戶機(jī)的計(jì)算機(jī)上存在客戶機(jī)應(yīng)用程序

設(shè)置完成后,將有一個(gè)本地端口托管到MySQL 的SSH 連接并使用SSH 進(jìn)行加密。

“怎么理解MySQL安全”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI