2009-07-29 9 views
40

I read कि डेटाटाइप हैं जो एन्क्रिप्शन करते हैं ताकि आपके डेटाबेस में पासवर्ड सुरक्षित हो जाएं।PostgreSQL में पासवर्ड के लिए डेटाटाइप क्या है?

मैं पासवर्ड संग्रहीत करने के लिए varchar पर इस समय उपयोग करता हूं। मेरे पास यह विचार था कि मुझे किसी भी तरह से पासवर्ड में SHA-512 फ़ंक्शन लागू करना चाहिए और उस डेटा को कहीं भी रखना चाहिए कि सादा पाठ पासवर्ड हटा दिया गया हो।

हालांकि, पर्ल में डेटाटाइप मुझे सुझाव देता है कि वर्चर की तुलना में पोस्टग्रेएसक्यूएल में एक बेहतर तरीका है।

PostgreSQL में पासवर्ड के लिए डेटाटाइप क्या है?

उत्तर

42

जेफ का एक अच्छा लेख You're Probably Storing Passwords Incorrectly है। यह आलेख डेटाबेस में पासवर्ड संग्रहीत करने के विभिन्न तरीकों पर चर्चा करता है, और कुछ सामान्य नुकसान जो आप चला सकते हैं। विशेष रूप से, यह एक समझौता पासवर्ड फ़ाइल के जोखिम को कम करने के लिए हैशिंग एल्गोरिदम, इंद्रधनुष तालिकाओं, और "नमक" के उपयोग के बारे में चर्चा करता है।

varchar डेटा प्रकार का उपयोग ठीक से धोए गए पासवर्ड को संग्रहीत करने के लिए बिल्कुल उपयुक्त है।

=> select account_id, email, salt, passhash from account where email = '[email protected]'; 
account_id |  email  |  salt  |     passhash     
------------+------------------+------------------+------------------------------------------ 
      1 | [email protected] | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043 
(1 row) 

इस मामले में, passhash SHA-1 नमक अपना पासवर्ड साथ concatenated की की हेक्स प्रतिनिधित्व है: उदाहरण के लिए, यहाँ एक उत्पादन डेटाबेस से मेरे वास्तविक खाता रिकॉर्ड का हिस्सा है।

+0

नमक होना चाहिए तालिका में प्रत्येक खाते के लिए अलग-अलग खाते? –

+1

हां, एक अलग नमक का उपयोग करने की आवश्यकता है। अन्यथा यह बिल्कुल नमक जैसा ही नहीं है। जेफ ने अपने लेख में इसे शामिल किया। –

+0

ग्रेट आलेख जिसका आप उल्लेख कर रहे हैं। लेखक आपके द्वारा उपयोग किए जाने से अधिक लंबा लवण सुझाता है, बहुत कम लवण का उपयोग करने के लिए आपका तर्क क्या है? – mvexel

4

"chkpass मॉड्यूल" स्थापित

इस मॉड्यूल एक डेटा प्रकार chkpass कि एन्क्रिप्टेड पासवर्ड के भंडारण के लिए डिज़ाइन किया गया है लागू करता है। आपको postgresql contrib पैकेज को स्थापित करने और स्थापित करने के लिए EXTENSION कमांड को चलाने की आवश्यकता है।

Ubuntu 12.04 में यह इस तरह जाना होगा:

sudo apt-get install postgresql-contrib 

पुनः प्रारंभ PostgreSQL सर्वर:

sudo /etc/init.d/postgresql restart 

सभी उपलब्ध विस्तार कर रहे हैं में:

/opt/PostgreSQL/9.5/share/postgresql/extension/ 

अब आप चला सकते हैं एक्सटेन्शन कमांड बनाएं।

उदाहरण:

CREATE EXTENSION chkpass; 

CREATE TABLE accounts (username varchar(100), password chkpass); 
INSERT INTO accounts(username, "password") VALUES ('user1', 'pass1'); 
INSERT INTO accounts(username, "password") VALUES ('user2', 'pass2'); 

select * from accounts where password='pass2'; 

रिटर्न

username | password 
--------------------------- 
"user2" | ":Sy8pO3795PW/k" 
+0

grep के उत्तर की तुलना में इस पैकेज का लाभ क्या है जहां नमक और हैश? –

+1

chkpass क्रिप्ट एल्गोरिदम का उपयोग करता है। हैश एक एल्गोरिदम है जिसमें 2012 में लीक किए गए पासवर्ड के कई मामले थे। नमक एक संयोजन है, हैश से पहले एक वृद्धि जो सुरक्षा को बढ़ाती है। Chkpass का उपयोग करने का लाभ पाठ की तुलना में आसानी है। –

+0

व्यवस्थापक देख सकते हैं कि वास्तविक पासवर्ड देखने की क्षमता है? मुझे लगता है कि उन्हें नहीं करना चाहिए। क्रिप्ट एल्गोरिदम क्या है? –

2

Postgres संस्करण 9.4+ इस pgcrypto एक्सटेंशन का उपयोग कर के रूप में व्याख्या की एक चालाक और securer तरीके से किया प्राप्त कर सकते हैं: http://www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html

+1

क्या आप एक्सटेंशन के लाभ और कमियों को और स्पष्ट रूप से समझा सकते हैं। अब, आपका जवाब ज्यादातर लिंक-केवल-उत्तर है। –

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