Mysql

刪除不再存在的數據庫的授權

  • July 24, 2019

我們有很多 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 表。一切都來自我的頭腦,未經測試,但它應該給你一個開始。

引用自:https://dba.stackexchange.com/questions/242756