將概念 - 數據庫對象的使用者/組/權限從 mysql 轉移到 postgresql
這似乎比stackoverflow更適合這裡,所以這裡是:
我已經使用 mysql 一段時間了,因為在大多數便宜的虛擬主機上,它是提供的數據庫。但是,現在我已經開始認真開發 Web 應用程序,我一直在本地為我的數據庫使用 postgresql,以便在我感到舒服後在客戶端安裝上正確使用它。
我唯一還沒有掌握的(當然是基礎知識)是使用者/組/權限的概念。在 mysql 中,我創建了使用者,我可以
GRANT
讓他們獲得我希望他們能夠訪問的各種表的權限。這個概念在 Postgres 中是如何工作的?是嗎?在我的本地機器上,我一直允許使用者
apache
訪問我的表,以便我的 django 應用程序可以通過以下方式工作:echo "GRANT SELECT,INSERT,UPDATE,DELETE ON TABLE $table TO $2" echo "GRANT SELECT,INSERT,UPDATE,DELETE ON TABLE $table TO $2" | psql $1 echo "GRANT SELECT,UPDATE ON SEQUENCE ${table}_id_seq TO $2" echo "GRANT SELECT,UPDATE ON SEQUENCE ${table}_id_seq TO $2" | psql $1
(更大腳本的一部分)
這安全嗎?我很確定每個應用程序使用者聽起來是一個更明智的想法,但我不知道。
所以,我想這讓我的問題:
- 使用者/組/權限如何在 postgresql 中工作?
- 它們與mysql相比如何?
- 什麼被認為是最佳做法?
postgres 中不再有使用者和組(> 8.2?),只有
ROLE
s,角色可能無法登錄。並不是說這很重要,CREATE USER
而且CREATE GROUP
只是CREATE ROLE
.正如@ Peter Eisentraut所說,這段程式碼應該可以正常工作。
除了 Postgres 使用角色而不是使用者這一事實之外,我在這方面注意到的一些更大的差異是 Postgres 使用ident對數據庫進行使用者身份驗證的方式,這可以允許系統使用者通過系統使用者無需密碼即可訪問數據庫 - > posgres 使用者映射,如果它們是等價的,為什麼預設映射它們。有關身份驗證的更多資訊,請參閱身份驗證方法文件。
就表權限而言,據我所知,它們非常接近。但是,您可以在 postgres 中使您的權限更加細化。現在在 postgres 中,您甚至可以使用將使用者限製到特定列,
GRANT
並且在某些即將發布的版本中,它應該能夠按行限制數據庫使用者。我絕對建議通過不同的使用者/數據庫配對來限制不同的應用程序,儘管您也可以使用
SCHEMA
’s 而不是數據庫,但如果您擁有一個架構,您可以修改其中的任何內容,因此它不是一個細粒度的。任何最佳實踐都可能取決於您的應用程序,實際上您應該閱讀文件並找出最適合該應用程序的方法。