2016-04-25 54 views
1

我剛開始使用Ruby on Rails的。我正在構建一個Hello World應用程序,並使用PostgreSQL。我用下面的命令來創建應用程序:我的Ruby on Rails應用程序如何在沒有密碼的情況下訪問數據庫?

rails new rails-hw -d postgresql 

我創建使用createuser -s pguser數據庫用戶,我設置密碼。

我編輯的配置/ database.yml中的顯影部,使用I創建的用戶的用戶名和密碼。然而,似乎有什麼我在database.yml文件中使用的密碼並不重要,我的應用程序總是能夠訪問數據庫中的數據。爲什麼忽略密碼?

+0

事實上,你可以從'database.yml'刪除密碼。 –

回答

1

因爲你當前的Postgres安裝配置爲允許從本地主機連接。

檢查pg_hba.conf最有可能,你會發現這樣的事情:

# TYPE DATABASE USER  IP-ADDRESS IP-MASK    METHOD 
host all   all   127.0.0.1  255.255.255.255  trust 

這基本上說「允許所有Postgres的用戶和數據庫從127.0.0.1所有連接。」

更多的細節可以在文檔中找到:http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html(見例20-1)

0

看看你pg_hba.conf。它可能會包含本地用戶(從同一臺機器連接)特殊處理:

# Database administrative login by Unix domain socket 
local all    all          trust 

# TYPE DATABASE  USER   ADDRESS     METHOD 

# "local" is for Unix domain socket connections only 
local all    all          trust 
# IPv4 local connections: 
host all    all    127.0.0.1/32   trust 
# IPv6 local connections: 
host all    all    ::1/128     trust 

看到那些trust方法呢?這就是不需要密碼的原因。從documentation

當指定trust認證,PostgreSQL假設任何人誰可以連接到服務器被授權訪問他們所指定的任何數據庫的用戶名(甚至超級用戶名)數據庫。當然,數據庫和用戶列中的限制仍然適用。只有在服務器連接有足夠的操作系統級保護時才應使用此方法。

相關問題