我有一個Web應用程序的Postgresql數據庫。數據庫由系統上的特定用戶擁有,比如說foouser
。作爲所有者,此用戶對數據庫擁有完全權限。自動允許從用戶訪問postgres中的表格
服務器還有另一個用戶,比如webappuser
,它是運行應用程序服務器的用戶。我不想在Web應用程序的配置文件中指定用戶名和密碼,而是使用「對等」身份驗證。我已經得到認證正常工作,但我遇到了以下問題。
當我創建PostgreSQL中webappuser
角色,我又給了LOGIN
許可以及GRANT ALL ON DATABASE foo TO webappuser;
和數據庫GRANT ALL ON SCHEMA public TO webappuser;
內。
我遇到的問題是與表權限。與MySQL允許所有表訪問數據庫的默認情況不同(在我看來,這是一個合理的假設),Postgresql拒絕訪問所有的表,即使已經在模式和數據庫上提供了權限。爲了解決這個問題,我必須明確地授予我使用GRANT ALL ON TABLE table_name TO webappuser;
創建的所有新表,視圖,過程等的權限(以及類似的視圖等)。
結果是,每當我運行數據庫遷移時,我都必須爲創建的新表添加對數據庫的權限。問題是我無法將這個權限信息添加到遷移本身,因爲開發人員機器沒有這個額外的用戶。無論如何,這看起來確實是做錯事情的錯誤方式。
我怎樣才能允許從這個額外的用戶訪問數據庫表,而無需每次創建表,視圖,過程等時手動干預?
獎勵積分:有沒有辦法將用戶的權限限制爲僅限CRUD操作而不是完全權限,並且仍然自動完成整個任務?
怎麼做你做「數據庫遷移」?這是運行DDL腳本還是你pg_dump/pg_restore? – Patrick 2014-10-30 05:34:33
一般來說,不要授予'ALL',而是授予CRUD功能的特定特權,例如'GRANT SELECT,INSERT,UPDATE,DELETE'。 – Patrick 2014-10-30 05:37:20
@Patrick我正在使用[Laravel的內置遷移](http://laravel.com/docs/4.2/migrations)創建SQL語句。這非常類似於Rails遷移,如果有幫助的話。 – 2014-10-30 05:37:29