我正在建立一組 bash 腳本,這些腳本基本上在雲端伺服器上準備 apache 虛擬主機、git 儲存庫和其他內容。到目前為止一切順利,但出現了一個大問題:MySQL資料庫和使用者創建。
目前的腳本使用帶有金鑰的 ssh 來對雲端伺服器進行身份驗證,我團隊中的每個人都可以執行命令。我想保持這種方式,並以某種方式讓他們創建新的 MySQL 資料庫和用戶,而不需要以 root 或任何其他具有高權限的用戶身份登入 mysql,但我對此沒有任何解決方案。
想法#1是建立一個沒有密碼的新mysql用戶,並賦予其完全權限(如root),但使其只能使用@'localhost'
。
想法#2是將這個 MySQL 控制使用者的密碼儲存在一個檔案中,並使其僅可供其他腳本使用的目前 ssh 使用者存取。然後mysql登入將使用這個儲存的密碼來登入並建立資料庫和使用者。
我不知道哪種選擇更好,但我知道它們很危險。我徵求意見和任何更好的想法。
答案1
您希望讓您的團隊使用的 unix 使用者和 mysql 使用者擁有盡可能少的存取權限,同時仍允許他們執行您想要的操作。看來您的兩個想法都允許比必要的更多的存取權限。對於團隊 mysql 用戶來說更好的是:
- 僅具有 CREATE 存取權限或僅具有他們需要的任何存取權限(將您的團隊可以執行的操作限制在最低限度)。您可以使用 GRANT 語句授予 mysql 使用者存取權限。
- 將使用者/密碼儲存在
~/my.cnf
只有所有者讀取權限的檔案中(不再限制您的團隊,但阻止其他人在看到腳本時看到登入資訊)。
以上很容易做到,而且進步很多。
更好的想法,但需要更多的工作,是不允許團隊用戶訪問創建資料庫,而只是在某個隊列中發出設置站點的請求,這是另一個只有您控制的用戶腳本(並且只有訪問權限)需要)將定期處理以建立站點。佇列可以是一個文件,每行一個請求,一個目錄,每個文件一個請求,或一個資料庫表,每個記錄一個請求。這取決於您想要保護系統的程度。
一般來說,您應該使用沒有 root 權限的 unix 和 mysql 使用者。我為自己創建了一個工作 mysql 用戶,可以建立和刪除資料庫,並且只執行我經常使用的操作。如果我需要設定另一個使用者來授予其存取權限,我只會使用 root 或具有類似權限的使用者。在腳本中,我對使用者進行盡可能的限制,以限制出現問題時造成的損害。