2013-01-02 75 views
0

在python我可以用下面的代碼連接PostgreSQL數據庫:用py-PostgreSQL用於加密的密碼

db = postgresql.open(「pq://$user:[email protected]$host:$port/$dbname」) 

但在上述行我必須輸入明文密碼,然後py-postgresql會出現亂碼它來比較將散列值存儲在PostgreSQL數據庫中。如果我想自己使用由MD5散列的密碼,這意味着我不希望py-postgresql爲我做散列。我該怎麼做?我試圖修改py-postgresql的源代碼,但我找不到散列在哪裏發生。然後我發現在py-postgresql的設置中我可以啓用SSL模式。有人能給我一個關於如何設置它的簡單例子嗎?

親切的問候。

+1

散列發生在服務器本身內部,並將散列與存儲的散列進行比較。因此密碼在離開應用程序併到達服務器之前不會被散列。這是合乎邏輯的,就好像你可以發送散列代替那麼這意味着它會接受散列,因此所有的密碼都以純文本形式存儲(本質上),就好像它們被下載一樣,它們可以用來訪問服務器。 –

+0

你想通過只在代碼中存儲散列來完成什麼?如果哈希是您需要進行身份驗證的全部內容,那麼它就是[純文本equilavent](http://srp.stanford.edu/issues.html),可以讀取它的人對您的數據庫擁有與某人一樣多的訪問權限誰可以讀取密碼。 –

回答

0

DB-API的工作方式是提供純文本密碼。此外,py-postgresql不做密碼哈希/驗證,服務器將它作爲連接握手的一部分(請參閱pg_hba.conf瞭解它如何/爲什麼這樣做)。

如果您正在考慮確保密碼的傳輸,請使用SSL連接協議而不是明文密碼。 SSL模式也將加密服務器和客戶端之間傳輸的所有數據。

+0

非常感謝您的回答,我將看看Py-postgresql的SSL模型。 – user1067671