跳至

MySQL 強化總覽

安全性並非功能,而是設計的重要部分,與國際化或無障礙設計並無不同。良好的安全性設計會讓每侵入系統地每個步驟變得困難,而在資料庫世界中,這通常稱為「強化」資料庫。 

其中的某些步驟包括即時更新軟體、限制可存取系統的位置、強化密碼,以及定期稽核存取權等許多功能。雖然這些秘訣廣泛適用,但我們將探討如何使用這些技術,讓 MySQL 適用的 Cloud SQL 資料庫執行個體盡可能難以受到入侵。

強化 MySQL 執行個體

盡量減少存取點

不可否認,有些攻擊者只要幾分鐘,就能輕易掃描整個網際網路,並在幾秒內破解密碼。有時候,需要讓資料庫能夠透過公開 IP 網路存取,但這會導致資料庫容易出現安全漏洞的風險。降低公開 IP 風險的一種方法,就是限制資料庫存取一組有限的 IP 位址。

不過,較佳的做法是只允許在虛擬私有雲 (VPC) 中存取,並只允許在防禦主機內部進行連線。在 Google Cloud 中,這個解決方案稱為私人 IP。如果您的 MySQL 執行個體只能在 VPC 中存取,則攻擊者必須先試圖破壞虛擬私有雲,然後再嘗試入侵您的執行個體。

更新資料庫

每個 MySQL 子版本都有版本資訊,幾乎可以包含有關安全性更新的部分。如果執行個體未進行多個版本的更新,則資料庫就會缺乏這些安全性修正的版本。

除了隨著時間修正安全性問題外,MySQL 也會定期導入多項全新安全性功能。舉例來說,MySQL 8.0 導入了數個可強化 MySQL 結構定義和使用者的方法,例如角色、失敗登入追蹤和隨機密碼產生等。

強制執行傳輸層安全標準 (TLS)

假設您在咖啡廳工作,而且想要執行一些查詢,所以您是透過商店的免費 Wi-Fi 網路連線至 MySQL。如果您並未使用 TLS (傳輸層安全標準),無異於透過 TCP (網際網路主要通訊協定之一的傳輸控制通訊協定) 公開洩漏使用者名稱和密碼。在您的 MySQL 執行個體上強制執行傳輸層安全標準 (TLS),就您可以放心使用,不必擔心其他人在網路中窺探。

強化應用程式

SQL 插入

這通常不是資料庫,而是應用程式容易遭受攻擊。許多應用程式都受到 SQL 插入的攻擊,而攻擊者會插入惡意輸入內容,讓您的應用程式誤認為是有效的 SQL 陳述式。如要防止這些攻擊,最好的方法就是在建立 SQL 陳述式時使用預先準備好的陳述式,而不要將使用者輸入內容與 SQL 陳述式串連。

存放區中的密鑰

開發人員無意間將自己的使用者名稱和密碼推送至原始碼存放區,因此有無數資料庫遭到破壞。請改用 Google Cloud 的 Secret Manager 這類工具來管理所有密鑰,包括資料庫密碼。

記錄密碼

最後,請使用記錄架構的篩選工具,從應用程式記錄中篩選資料庫的密碼。例如 Log4j 篩選器Rails ParameterFilter,但多數記錄架構應該有對等的設定。否則,您必須確保應用程式記錄安全無虞,以確保資料庫安全。

強化密碼

建議您使用密碼驗證來確保資料庫中的所有密碼都夠複雜。為應用程式密碼設定長一點、複雜且經常輪替的密碼。密鑰管理員尤其實用,可讓您不必記住複雜且經常變動的密碼。

如果有人 (而非應用程式) 使用資料庫使用者,請遵守 NIST 標準,並將長度設為優先。密碼到期日和過於複雜的密碼要求經常會導致使用者將記憶體委派給純文字檔案和便利貼,進而破壞這些規則的完整用途。

更理想的做法是為非應用程式使用者採用身分與存取權管理驗證。IAM 驗證會將連線建立作業委派給 Google Cloud 的 IAM 產品。也就是說,只有 IAM 使用者 (而非 IAM 使用者和資料庫使用者) 就能降低風險。

最後,MySQL 會預設為您的資料庫密碼進行雜湊,而非修飾。也就是說,相同密碼的使用者會使用相同的驗證字串,系統會利用彩虹表格攻擊,將強度很弱的密碼破解瑣碎化。請注意,下列兩個 MySQL 使用者如何使用相同的 authentication_string

authentication_string 的輸出內容

請考慮將 default_authentication_plugin 旗標設為 caching_sha2_password。這樣做可確保使用相同密碼的兩位使用者有不同的雜湊。請注意,在下列範例中,這兩個使用者有不同的 authentication_string 值。

authentication_string 指令輸出

確保使用者安全無虞

限制存取權不代表將存取權與外部隔離;這也意味著定期稽核內部員工的存取權。

稽核應用程式:如果應用程式只從帳單、產品和客戶資料表讀取資料,是否需要存取其他內容?攻擊者如果可以使用資料庫的根層級存取權,就會對資料庫造成重大損害。因此,請先考量執行個體的所有需求,然後列出所需權限,然後為各個權限分別建立資料庫使用者。如果攻擊者利用了您其中一位資料庫使用者侵犯您的資料庫,您可以限制損害範圍。

稽核使用者:有多少位資料庫使用者需要您的執行個體的管理員權限?這些使用者中有多少人仍在貴機構內,或者已附加至閒置專案,或使用者本身為閒置狀態?存取權杖可能會外洩,而對多數系統來說,內部威脅是長期發生的疑慮。請盡可能減少使用者數量,以便協助執行個體防範這類問題。

稽核 ‘admin’:請考慮移除或重新命名使用者,例如 ‘root’ 或 ‘admin’。這些目標很容易受到攻擊,但如果目標不存在,您的系統就變得越來越難入侵。這稱為隱晦式安全,雖然不該是第一道防線,但它可以在您的 MySQL 資料庫中增加一道安全機制。

啟用二進位檔記錄功能

定期資料備份與可驗證的資料復原計畫對於健康的資料庫管理至關重要。不過,即使有定期備份,您還是有可能遺失上次備份之後寫入的所有資料。MySQL 生態系統的其中一項優勢是時間點復原 (PITR),能讓您復原任何時間點的資料。如要啟用 PITR,請在 MySQL 適用的 Cloud SQL 執行個體中啟用二進位檔記錄。

稽核記錄

完成上述所有操作後,即準備就緒並受到妥善的保護。換句話說,如果未持續提高警覺執行資料庫稽核,您將無法完成任何安全性設計。MySQL 適用的 Cloud SQL 稽核外掛程式可協助您在發生違規事件時追蹤異常行為。

這些變更如何影響您的執行個體

如上所述,您將會使資料庫的漏洞變得越來越不容易遭受攻擊。攻擊者必須入侵您的應用程式,並希望應用程式的資料庫使用者具備足夠的權限用於攻擊,或者他們必須入侵您的虛擬私有雲、找出現有的使用者名稱、破解密碼,並希望使用者有足夠的權限可以用來發動攻擊。在此期間,您可以查看 MySQL 資料庫記錄檔或稽核記錄,藉此監控資料庫中的任何一般行為並據此做出回應。

這就是融入安全考量的設計。攻擊者將持續嘗試破解機器的方法。因此,請務必採用多層防護機制來設計系統,以確保資料庫安全無虞。

Google Cloud 提供代管的 MySQL 資料庫,可滿足您的業務需求,包括淘汰地端部署資料中心、執行軟體式服務 (SaaS) 應用程式,以及遷移核心業務系統等。