如何配置 MySQL 以接受 mysql.users 中的自定義列?
我在 Debian Jessie (x86_64) 上執行 MySQL Ver 14.14 Distrib 5.5.57。在我的 mysql.users 表中,我為數據庫所有者 ID 添加了一個自定義列——這是供我的伺服器管理系統使用的。在此過程中,當我嘗試修改使用者的權限時,MySQL 開始抱怨:
ERROR 1547 (HY000): Column count of mysql.user is wrong. Expected 42, found 43. The table is probably corrupted
前 42 列完全符合 MySQL 的預期。它抱怨的第 43 條是我添加的專欄。我如何告訴 MySQL 有 43 列是“好的”?
是的,我在每次升級到 MySQL 時都執行了適當的升級腳本,包括一個額外的時間“只是為了確保”:
mysql_upgrade --force -uroot -p
提前感謝您的任何幫助!
你絕對,積極地,不能那樣做。為什麼 ???
回來,我寫了不能以root身份授予權限
Apr 12, 2012
的答案我仔細解釋了從 MySQL 4.x 到 5.6 的授權列是如何存在的。我已經解釋過很多次了(見我的其他人)。
表中的列
mysql.user
必須位於它們發布的準確位置以及準確的列名。在 上,我在嘗試向使用者授予權限後
Oct 10, 2014
回答MySQL 服務停止,我在其中舉例說明瞭如何破解修復以符合下一個版本。mysql.user
我強烈建議您今天刪除您的自定義列!!!否則,您將永遠無法收回所有贈款。請在另一個數據庫中管理您的數據庫使用者標識。
根據您的評論
我不得不承認我對這個答案感到驚訝。開源的意義不就是每個人都可以隨心所欲地破解程式碼嗎?如果您的觀點是“如果您這樣做,那麼某某將破裂……”或類似的東西-那會更有意義。也許我誤解了你的意思——告訴每個人“絕對,肯定,不能那樣做”聽起來像是 EULA 下的專有軟體訂單——旨在阻止未經批准的創新。無論如何,我很感謝你抽出時間來回答。
我決定本著您的評論精神發布一個不同的答案。
由於 MySQL 是開源的,是的,很有可能插入您自己的列。但是,我必須陳述事實,以便您看到這樣的承諾的現實。
正如我在其他答案中提到的,列順序與
mysql.user
.負責管理授權的實際原始碼稱為sql/sql_acl.cc。你可以自由地環顧四周。
讓我擔心的是這本書
將深入研究 InnoDB 內部結構和 binlog 格式以及所涉及的原始碼等內容,但對授權非常沉默(僅在第 6 頁和第 11 頁提及原始碼文件名)。
該連結中的原始碼適用於 MySQL 5.5。您可以獲取最新版本的 MySQL 5.5 的原始碼並使用它。我祝你在你的努力。我希望您永遠不要嘗試升級到 5.6、5.7 或 8.0,因為您將不得不為這些版本重複您的編碼冒險。