2017-07-30 320 views
0

我想了解密碼在Postgres中應該如何操作。Postgres:MD5密碼/普通密碼

https://www.postgresql.org/docs/current/static/sql-createrole.html說,對於加密/ UNENCRYPTED

如果目前的口令字符串已經是用MD5加密的格式,那麼它存儲加密,不被

所以我的未加密的密碼是:我的密碼 。

「MyPassword輸入」 的MD5哈希48503dfd58720bd5ff35c102065a52d7

如果我做

-- See https://www.postgresql.org/docs/9.6/static/sql-alterrole.html 
ALTER ROLE "MeOhMy" 
LOGIN 
PASSWORD '48503dfd58720bd5ff35c102065a52d7' 
; 

,然後嘗試用 「MyPassword輸入」 做

sudo -u postgres psql meohmy -h 127.0.0.1 -d meohmy_development 

我的時候,當然,第一得到提示輸入我的sudo密碼,然後通過Postgres提示「密碼爲meohmy」

如果我進入MyPassword輸入我得到

FATAL: password authentication failed for user "[email protected]" 

如果我進入,相反,48503dfd58720bd5ff35c102065a52d7然後我就可以登錄。

什麼我不理解?

+0

MD5不加密,因爲散列函數不是加密的,它們是單向不可逆的方法。加密假定解密,即用正確的密鑰加密數據可以返回到它的我們未加密的狀態。 – zaph

+0

MD5不是安全或可接受的密碼驗證程序。當保存密碼驗證者只使用哈希函數是不夠的,只是添加一個鹽沒有提高安全性。相反,用隨機鹽迭代HMAC約100ms持續時間,然後用散列表保存鹽。使用諸如'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt','passlib.hash'或類似函數的函數。關鍵是要讓攻擊者花費大量時間通過強力查找密碼。 – zaph

+0

雖然你的評論絕對正確,但有兩點需要注意: 1)我僅限於Postgres給我的設施。 2)我所保護的數據並不是那麼有價值,所以花時間保護它以最高等級的安全性是不值得的。 – RalphShnelvar

回答

1

PostgreSQL的哈希密碼有md5前綴:

md548503dfd58720bd5ff35c102065a52d7 
+0

這是在哪裏記錄!!?!所有我找到的是https://stackoverflow.com/questions/14918763/generating-postgresql-user-password – RalphShnelvar

+0

@RalphShnelvar https://www.postgresql.org/docs/current/static/catalog-pg-authid.html –

-1

由@zerkms提供的答案是部分正確。它使我找到了正確的答案。

Generating postgresql user password提供的答案是適合我的答案。

+0

只是一個鏈接不足,它不能完全幫助未來的讀者,並可能會失效。 – zaph

+0

好的...對於未來的讀者,我指出的文章說: 'pghash =「md5」+ hashlib.md5(密碼+用戶名).hexdigest()' – RalphShnelvar