2015-04-02 28 views
0

我是新來的postgres,我試圖找出如何在運行web應用程序時最好地保護我的數據庫。Postgresql中用戶權限的最佳實踐?

在MySQL中,我傾向於使用管理用戶來創建數據庫,創建表,修改模式,刪除表等等:對於在某些應用程序持續使用數據庫時絕不應該發生的所有活動。然後,我有第二個用戶(每個應用程序一個)具有(僅)應用程序需要的權限,如插入,更新等。這可以避免應用程序錯誤/黑客具有災難性後果。

現在我想弄清楚如何在postgres中做類似的事情。似乎postgres數據庫有一個「所有者」,不像MySQL的。如果我使用上述方案,管理員用戶是否擁有所有應用程序的所有數據庫?或者這裏有什麼最佳實踐?

此外:我只是發現授予「所有表」的權限似乎意味着「當前定義的所有表」,並且不包括將來的表。與MySQL不同,「on foo。*」表示所有當前和將來的表。那是對的嗎?有沒有辦法在授權聲明中包含未來的表格,還是每次都重新執行?

+1

MySQL數據庫相當於一個Postgres模式 – 2015-04-02 19:23:21

回答

1

最好保持簡單。如果您的雙層設置適合您,我建議保留它,而不是在創建數據庫所有權的額外角色時引入額外的管理開銷。如果您需要添加更多不同級別的權限,則可以重新考慮。

2

一個管理員用戶是OS用戶postgres,他有權訪問pg_hba.conf。這是一個/系統帳戶。千萬不要亂它。

當然,一個dba必須有他自己的登錄名,使用選項superuser創建它。

對於您的Web應用程序,您創建一個Web應用程序登錄,並將該Web應用程序作爲數據庫所有者創建一個數據庫。

這通常是必需的,因爲大多數Web應用程序都希望創建和更改其表格,而不是像數據中心設置中那樣將此工作委託給管理員。

這樣你就有了不同數據庫之間的訪問分離。

順便說一下,postgresql文檔非常好,只需閱讀它,例如about PG database roles,the database ownerclient authentication這是一個PG專業。