Mysql
刪除不再存在的數據庫的授權
我們有很多 MariaDB 伺服器,這些年來,它們的權限變得有點混亂。我想收拾他們。
我已經編寫了一些工具來很好地呈現授權/表資訊,這突出了一些使用者對不再存在的數據庫或表有很多特定的授權。在一台伺服器上,使用者在 SHOW GRANTS 中引用了 150 多個數據庫,但僅存在 12 個數據庫。
Stackoverflow 的使用者如何處理這個訂單的內務管理?
是否有任何工具可以對授權、訪問和數據庫進行基本審計,以幫助我解決這個爛攤子?
理想情況下,吐出一個 mysql REVOKE 語句列表的東西,這些語句刪除了不再存在的數據庫的授權,然後可以在粘貼為查詢之前由人工審查。
我可以看到一種按語法對它們進行分類的方法,但可能需要幾個小時才能寫出來。它可能仍然會發生,但我想知道這個輪子是否已經被發明了。
我將首先驗證以下資訊:
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
是有效的,即所有現有的數據庫,但僅此而已。然後你可以遍歷 %PRIVILEGES 表(我認為是 8 個)並從那裡創建 REVOKE 語句,例如 TABLE_PRIVILEGES:
SELECT 'REVOKE GRANT ON TABLE ' || RTRIM(TABLE_SCHEMA) || '.' || RTRIM(TABLE_NAME) || 'FROM USER ' || GRANTEE FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES WHERE TABLE_SCHEMA NOT IN (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA)
同樣,遍歷剩餘的 _PRIVILEGES 表。一切都來自我的頭腦,未經測試,但它應該給你一個開始。