Security

MySQL 開發機器權限

  • June 29, 2009

我正在管理兩台遵循開發和生產機器模型的伺服器。

生產機器是剝離的準系統軟體,在限制性規則集和有限訪問權限下執行。然而,開發機器更加開放——開發人員幾乎可以要求安裝任何東西(除了一些例外),他們可以獲得無限數量的 MySQL 數據庫進行測試。

但是,在兩台伺服器上,開發人員都必須要求提供新的使用者名/密碼/數據庫組合,這通常在開發機器上被接受,並且只有在 Web 應用程序完成、完善、安全並準備起飛時才在生產機器上接受.

有沒有辦法在開發機器上為每個開發人員創建一個具有創建(只是創建,而不是讀取/修改/刪除)具有固定權限集的模板使用者的權限的使用者?這樣他們就可以創建自己的新的安全使用者名/密碼/數據庫集,而無需等待我接受他們的查詢。

我們的開發伺服器暴露在外面(因此開發人員可以 ssh 並在家工作)所以我不想給一個使用者很多權限,因為伺服器上託管的應用程序的實驗性質。(如果數據庫受到威脅,它可以做的最好的事情是刪除應用程序數據庫,而不是使用者有權訪問的所有數據庫)。

MySQL 沒有“模板化權限”的概念。提供了一些有用的聽起來權限類型,但這些權限類型不夠細,無法建構等效的內容。

您的數據庫創建使用者必須執行三個步驟:

  • 創建新數據庫- 通過將 CREATE 授予數據庫創建使用者來允許。
  • 創建新使用者- 通過將 CREATE USER 授予數據庫創建使用者來允許。不幸的是,CREATE USER 權限還允許使用 DROP USER、RENAME USER 和 REVOKE ALL PRIVILEGES。致命的是,這允許您執行 DROP USER ‘root’@’localhost’; 和類似的。
  • 授予讀/寫權限。權限從數據庫創建使用者流向新使用者,因此數據庫創建使用者必須對新創建的數據庫具有現有權限。這可以通過在所有以前綴(例如 dev1_ )開頭的數據庫上授予 ALL PRIVILEGES 並要求新數據庫以該前綴開頭來實現。WITH GRANT OPTION 權限允許使用者將他們的權限授予新創建的使用者。

如您所見,除了使用者創建部分之外,它**幾乎都可以正常工作。**一種可能的折衷方案是創建每個開發人員的使用者,這些使用者可以創建和使用多個測試數據庫:

grant all privileges on `dev1_%`.* to 'dev1'@'%' identified by 'password';
grant create on `dev1_%`.* to 'dev1'@'%' identified by 'password';

這將創建一個使用者“dev1”,該使用者只能創建和使用以“dev1_”開頭的數據庫。

由於 MySQL 不能單獨提供解決方案,我建議只編寫一個程序來執行數據庫和使用者名創建步驟。開發人員可以像這樣呼叫問題:

create_dev_database --comment "xyz app test database" database_name username

由於您的程序正在控制數據庫/使用者的創建,因此您可以:

  • 強制使用強密碼(沒有“密碼”密碼,如上 :))
  • 通過主機名強制訪問限制(限製到 ‘%.example.com’ 的連接,而不是允許開發人員選擇 ‘%’)
  • 記錄新數據庫的訪問詳細資訊和目的(不希望有 100 個活動/休眠數據庫並且沒有關於其目的的文件)

這樣的程序必須使用和保護您的 MySQL 根密碼。如何實現這一點取決於平台。

祝你好運!

引用自:https://serverfault.com/questions/32934