2011-04-05 41 views
5

開始在Ubuntu上使用postgresql開發我的第一個Ruby on Rails應用程序。我用密碼創建了一個postgresql用戶。在database.yml中,我輸入了postgresql的用戶名和密碼。Ruby on Rails | Postgresql在database.yml中忽略我的密碼

每當我運行一個rake數據庫時:即使密碼字段爲空,遷移它也會執行而不會出現錯誤,無論我更改密碼到database.yml中。如果我更改用戶名,則會收到驗證錯誤。

如何讓Ruby on Rails數據庫使用密碼?

TIA

+0

'database.yml'文件是什麼樣的? postgre中的密碼爲我工作。 – Matchu 2011-04-05 01:53:24

回答

13

您可能正在使用ident或甚至trust身份驗證。最常用的身份驗證方法的快速概要:

  • trust - 您可以登錄不管。
  • ident - 如果您的UNIX用戶名與PostgreSQL用戶名相同,則可以登錄。
  • md5 - 如果您的密碼(使用md5加密)是正確的,您可以登錄。

編輯:的PostgreSQL 9.0引入的peer認證方法。從我收集的信息中,identpeer具有相同的用途—登錄由您的操作系統用戶名—確定,但ident與偵聽端口113的ident服務器通信,而peer通過系統調用查找您的憑證。見http://www.postgresql.org/docs/9.1/static/auth-methods.html#AUTH-IDENT

找到您pg_hba.conf文件,看看是否能找到的東西,看起來像這樣:

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 

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

當您嘗試連接,PostgreSQL的經過此行由行。如果連接類型(例如local,host),數據庫,用戶(數據庫用戶,而不是系統用戶)和地址都匹配,它將使用給定的認證方法。

如果你想需要密碼才能訪問自己的PostgreSQL用戶,你可以在頂部添加一行這樣的,local all all ident前行:

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 
local mydbname myusername      md5 

在變更後重新啓動的PostgreSQL pg_hba.conf

+0

非常有幫助,謝謝。我創建了一個項目特定的數據庫用戶,並發現我需要授予'projectusername' MD5訪問默認的'postgres'數據庫以及三個Rails數據庫。這允許'rake db:create:all'(在​​Rails 3.1下)創建Rails數據庫。我寫了詳細信息[在這裏](http://www.mcbsys.com/techblog/2011/10/set-up-postgresql-for-rails-3-1/)。 – 2011-10-07 21:43:27

1

我只勉強使用PostgreSQL的,但我知道它有一個叫sameuser功能。如果系統用戶的名稱與數據庫用戶的名稱相匹配,則不需要密碼。因此,如果我使用用戶名「matchu」登錄到此計算機,並且在PostgreSQL中有一個名爲「matchu」的用戶,我可以在沒有額外身份驗證的情況下登錄到該數據庫用戶。

難道那是這裏發生了什麼?

+0

感謝您的信息 – user678604 2011-04-19 04:20:29

相關問題