早在2005年6月提交的被評級為“S2(嚴重)” 的一個MySQL 缺陷懸置20年仍未被修復,引發社區對該開源數據庫管理器的無奈和絕望。
該漏洞的編號是 “bug 11472”,被描述為“外鍵更新/刪除后不會執行觸發器”。觸發器即響應事件如在特定表中插入、更新、刪除時自動運行的代碼,一般用于執行數據完整性。該漏洞表明,如果間接更新某個表,由于它與另外一張表之間存在的關系,該觸發器不執行。
該漏洞被披露后,MySQL 團隊曾表示它是“已知問題”而且“我們會在5.1版本中修復”,但實際并非如此,盡管該漏洞已在手冊中被記錄為“級聯外鍵操作不會激活觸發器”。
開發人員在評論該漏洞報告時提到,該漏洞“正在嚴重威脅威脅ACID原則/數據完整性”,之后在2015年提到“我們因嘗試在級聯刪除上執行觸發器而遭遇此問題,亟需修復方案,萬分感謝!” ACID 指的是“原子性、一致性、隔離性和持久性”。
2020年,一名年輕的開發人員提到,“這個漏洞比我的年齡還大。”
該漏洞影響深遠。2023年另外一名開發人員表示,“我們多年前就棄用了 MySQL——這個漏洞是壓垮駱駝的最后一根稻草。我們當時需要未定制賬戶平臺確保數據完整性。”
MySQL 在2010年作為 Sun Microsystem 的一部分被Oracle收購,而盡管該漏洞比收購的時間還要早,但仍可被視作Oracle忽視社區需求的證據。不過另一種說法認為,此類長期存在的已知缺陷不修復反而更安全,以防一些應用與其存在依賴關系,但在本案例中該論點站不住腳。
在Oracle 收購之時 MySQL 的一個分叉 MariaDB 也將此漏洞標記為“未解決”。
Reddit 論壇上出現了關于使用觸發器實現數據庫完整性是否是最佳實踐的辯論,有人回應稱,“應變措施是不使用 MySQL,應選個合理的關系數據庫。”而最常見的替代選項是 PostgreSQL。另外有人戲謔稱“事到如今,它算是個‘功能’了”。
DB-Engines 排行榜顯示,MySQL 仍然是位列 Oracle 之后、微軟 SQL Server 之前的全球第二大使用最廣泛的數據庫管理器。不過 MySQL 的熱度在減退,而 PostgreSQL 的熱度在攀升。該排行榜基于社區的提及頻率和崗位招聘需求而非實際的使用數據,雖不能作為絕對參考,但仍表明 MySQL 存在衰退跡象。
去年,Percona 公司的專家Peter Zaitsev在MySQL領域深耕多年,他表示,“多年來MySQL 似乎在性能工程部門遭受了多年的忽視”并提到Oracle將重要新功能設為云端 Heatwave 的專屬服務,刻意邊緣化開源版 MySQL。
原文鏈接
https://devclass.com/2025/06/24/serious-mysql-bug-celebrates-20-years-unfixed-another-reason-to-switch-to-postgresql/