Postgresql
Web 應用程序的 PG 使用者的正確設置是什麼
我們有一個網路應用程序可以檢測數據庫是否不存在並創建它。使用者喜歡它,但我認為這樣的使用者權限太多。
我建議更改應用程序的數據庫創建螢幕以提供 2 組憑據 - 一組將用於最初創建數據庫而不是永久儲存(例如“postgres”角色),另一組將由網路使用應用程序並儲存在配置文件中(例如“webapp”)。此外,“webapp”需要能夠 1)添加新的和 2)修改現有的表、過程和函式(網路應用程序會根據需要自動更新架構)
所以我的一些問題是:
- 使用 PostgreSQL 9.x 時,在上述場景中有哪些最佳實踐?
- 創建的數據庫應該歸“webapp”角色所有,還是歸“postgres”所有,我只是授予“webapp”必要的權限。如果是後者,新添加的對像是否會歸“webapp”所有,我應該避免這種情況嗎?
- 社區中的使用者目前正在使用哪些方法?
實際上,最好的方法是讓 Web 應用程序完全無權創建或修改表格。它應該只有權做它需要做的事情來執行其日常職能,而不是管理。
特別是,Web 應用程序不得以超級使用者身份執行,並且最好不擁有數據庫或表。
如果 webapp 具有用於在升級時更改表的內置管理功能等,它應該通過一組單獨的憑據來執行此操作,並允許在每次執行升級時提示您輸入這些憑據。或者讓您使用管理員憑據創建文件,執行升級,然後再次將其刪除。
如果您無法修復 webapp 以使用不同的憑據進行架構更改,那麼它也可能是數據庫和表的所有者。只是不要讓它成為超級使用者!
如果您可以修復應用程序,使其使用不同的憑據進行架構更改,則其正常非架構更改使用者不應擁有表或數據庫。它應該只有對數據庫的 CONNECT 和 TEMPORARY 權限、對模式的 USAGE 權限,以及對每個表的所需權限
GRANT
。只是不要忘記REVOKE ALL FROM public ON DATABASE mydb;
和REVOKE ALL FROM public ON SCHEMA public;
。