2015-10-06 86 views
0

首先我是來自MySQL的PostgreSQL的新手。我剛剛從Fedora存儲庫安裝了PostgreSQL,並根據fedora wiki頁面創建postgres用戶,方法是使用postgres用戶並使用psql shell創建其角色。無法從php腳本訪問新安裝的PostgreSQL

# su - postgres 
$ psql 
> \password 

然後,我創建了通過nginx的,這將創建一個測試數據庫,並填充它提供一個測試腳本。我試圖通過使用postgres用戶及其密碼通過同行認證登錄腳本,使用以下pdo dsn:

新的PDO('pgsql:user = postgres password = ******* ***');

然而,隨着SELinux的掙扎後,連接失敗說的對等身份驗證失敗,所以我看着PostgreSQL的日誌,發現:

交付的用戶名(Postgres的)和athenticated用戶名(阿帕奇) 不匹配。

因此,我可以推斷,擁有該正試圖訪問數據庫的過程中,用戶是真實被認證的用戶,所以我想我必須創建在數據庫apache用戶相應的角色。但爲什麼這樣做呢?這是一種安全措施嗎?有沒有辦法使用postgres角色或我綁定到apache角色?

回答

0

請勿將postgres用戶用於應用程序。這是一個管理角色。這就像運行一個網絡服務器root。爲您的應用程序創建權限較低的用戶。除非您打算使用更細粒度的安全性,否則您可能還需要CREATE DATABASE ... WITH OWNER myappuser;爲應用程序授予數據庫所有權。

創建一個用戶以供您的應用程序使用。設置一個隨機生成的密碼,並記錄該密碼,以便您的應用程序可以使用它。

創建一個數據庫供應用程序使用,應用程序用戶作爲數據庫的所有者。 (這不是理想的,但它的簡單方法。要了解更多信息,請閱讀安全性和權限PostgreSQL的手冊的章節。)

修改pg_hba.conf添加對使用md5身份驗證數據庫中的用戶的入口,在至少對於感興趣的數據庫而言。確保輸入是以上默認peer條目。

然後重新加載PostgreSQL的配置 - SELECT pg_reload_conf()

您的應用現在可以使用密碼連接到PostgreSQL,但您仍然可以在命令行上通過psql進行簡單的peer身份驗證。

+0

好吧,我還有幾個問題:是否有比md5更安全的方法?使用apache用戶/角色安全嗎(因爲它是被認證的)?創建另一個UNIX用戶然後在DBMS中創建其角色是否安全? – arielnmz

+0

@arielnmz對於本地環回md5很好。對於非回送,我強烈建議使用SSL。目前正在進行中的工作,希望能夠支持9.6,支持基於HMAC的基於多種算法的協商身份驗證。我建議爲每個應用程序創建一個新的PostgreSQL用戶並給它一個不同的密碼。不需要創建一個unix用戶,也不需要這樣做;這隻適用於'peer'認證。 –

+0

謝謝,還有一個問題:同行認證是否安全?最理想的是哪一種最好的方法? – arielnmz