2013-02-17 16 views
11

मैंने पाइथन से hashlib का उपयोग करके postgres के लिए पासवर्ड जेनरेट करने का प्रयास किया।पोस्टग्रेस्क्ल उपयोगकर्ता पासवर्ड उत्पन्न करना

>>> import hashlib 
>>> hashlib.md5("psql123").hexdigest() 
2636d1ddc54901f98d011ffe050c0eb7 

लेकिन PostgreSQL md5 उपसर्ग, तो फिर

sudo -u postgres psql 
ALTER USER postgres PASSWORD 'md52636d1ddc54901f98d011ffe050c0eb7'; 

हालांकि, प्रमाणीकरण अगर मैं पासवर्ड के रूप में psql123 का उपयोग विफल हो जाएगा की आवश्यकता है।

यदि मैं passlib का उपयोग करता हूं, तो मैं ठीक हूं। http://pythonhosted.org/passlib/lib/passlib.hash.postgres_md5.html

psql123 का उपयोग कर निम्न कार्य करना ठीक है।

ALTER USER postgres PASSWORD 'md556074e7318bd4cee558faab0678a2fad'; 

मुझे समझ नहीं आता क्या passlib में चेतावनी कहना चाहता हूँ। postgres उपयोगकर्ता के लिए इस हैश का उपयोग करना ठीक है? साथ ही, जहां दस्तावेज़ में यह कहता है कि username इनपुट का हिस्सा होना चाहिए?

मुझे लगता है कि postgreshashlib से परिणाम को समझ नहीं सकता है। एलडीएपी उपयोगकर्ता के रूप में, मैं खोल में एक पासवर्ड उत्पन्न कर सकता हूं। क्या पोस्टग्रेज़ में ऐसा करने के लिए अंतर्निहित कमांड है? psycopg2 है क्या? ऐसा लगता है कि यह नहीं करता है।

उत्तर

16

Postgres 'पासवर्ड हैश बहुत आप क्या किया के करीब है, यह सिर्फ उपयोगकर्ता नाम शामिल करने के लिए इस प्रकार की जरूरत है:

pghash = "md5" + hashlib.md5(password + username).hexdigest() 

AFAIK, पोस्टग्रेज़ दस्तावेज़ वास्तव में इस हैश प्रारूप को दस्तावेज नहीं करते हैं, और ऐसा लगता है कि व्यवस्थापक शायद ही कभी इन हैंश से निपटेंगे :(जेनेरा के लिए कोई अंतर्निहित विधियां नहीं हैं इन हैंशों को टिंग करना जो मुझे पता है। यदि ALTER USER कमांड को प्रदान किया गया पासवर्ड पोस्टग्रेस हैश प्रारूप के अनुरूप नहीं है, तो यह मानता है कि पासवर्ड धोया नहीं गया है, और CREATE ROLE के एनक्रिप्टेड कीवर्ड के लिए दस्तावेज़ों के अनुसार आंतरिक रूप से इसका ख्याल रखता है। (आईएमएचओ यह एक दोषपूर्ण व्यवहार है, क्योंकि यदि हैश उपयोगकर्ता नाम पर निर्भर करता है, तो इसका मतलब है कि हैश की प्रतिलिपि नहीं बनाई जा सकती है और अलग-अलग खातों के बीच चिपकाया जा सकता है, खाते का नाम बदलकर तोड़ दिया जा सकता है, और (एंट्रॉपी के अनुसार अनुमान लगाया जा सकता है) में केवल 6 बिट्स हैं प्रभावी नमक)।

हैश के लिए पासलिब के दस्तावेज़ के शीर्ष पर चेतावनी शायद स्पष्ट हो सकती है। यह लोगों को पासलिब दस्तावेज के माध्यम से ब्राउज़ करने के लिए चेतावनी देना था कि 1) यह हैश बेहद असुरक्षित था, 2) कि उन्हें इसे अपने अनुप्रयोगों में उपयोग के लिए अपनाना नहीं चाहिए, और 3) कि यह केवल काम करने के उद्देश्य के लिए उपयुक्त था पोस्टग्रेज़ उपयोगकर्ता खाते, क्योंकि यह सबसे मजबूत (और केवल) हैश प्रारूप पोस्टग्रेस अपने खातों के लिए समर्थन करता है।

(यदि आप अपने स्वयं के एप्लिकेशन खातों के लिए हैश पासवर्ड में पोस्टग्रेज़ का उपयोग करने का प्रयास कर रहे हैं, तो मैं दृढ़ता से दूसरा क्लोडोल्डो की पीजीक्रिप्टो एक्सटेंशन के माध्यम से bcrypt का उपयोग करने की सिफारिश करता हूं)।

+0

बहुत बहुत धन्यवाद। मैं आप दोनों को ऊपर उठाता हूं लेकिन चूंकि आपने मेरी सभी चिंताओं का उत्तर दिया है, इसलिए मैं आपको जांचूंगा। लेकिन मैं आप दोनों को धन्यवाद देता हूं। नहीं, हैश सिर्फ 'पोस्टग्रेस' उपयोगकर्ता खाते के लिए है, ऐप उपयोगकर्ता खाता नहीं। इस तरह की हैश ने मुझे दो बेवकूफ मैक निर्माण की याद दिला दी है जो विस्तार/लंबाई के हमले की ओर जाता है, यानी। – CppLearner

5
alter user postgres ENCRYPTED password 'psql123'; 

अन्य उपयोगों के लिए pgcrypto मॉड्यूल का उपयोग करें।

create table "user" (name text, password_hash text); 

insert into "user" (name, password_hash) values 
('u1', crypt('psql123', gen_salt('bf'))); 

select * from "user"; 
name |      password_hash       
------+-------------------------------------------------------------- 
u1 | $2a$06$SeH4u4aRtT2Zr39er4eSiONT/0IBQHYMbQXn2RauPJKCYdNX1.58G 

select name, password_hash = crypt('psql123', password_hash) 
from "user" 
; 
name | ?column? 
------+---------- 
u1 | t 

लक्ष्य डेटाबेस में लॉग इन सुपर उपयोगकर्ता के रूप में यह स्थापित करें:

create extension pgcrypto; 
+0

अरे बहुत बहुत धन्यवाद! मैं बाद में pgcrypto बाहर की जाँच करेंगे। बहुत उपयोगी जानकारी। – CppLearner

+0

यह सिर्फ आकर्षण के साथ काम करता है।इससे बेहतर नहीं हो सकता है। – tsohr

संबंधित मुद्दे