2012-08-14 8 views
13

के लिए कोई पासवर्ड प्रॉम्प्ट नहीं है जब मैंने उबंटू 12.04 पर PostgreSQL 9.1 स्थापित किया है, तो मैंने "पोस्टग्रेस" सुपरसुर खाते के लिए पासवर्ड सेट किया है। मैं सभी उपयोगकर्ताओं को अपने पासवर्ड दर्ज करने के लिए चाहते हैं जब यह loging यही कारण है कि मैं इतनी तरह pg_hba.conf कॉन्फ़िगर किया गया:।postgresql superuser

#Database administrative login by Unix domain socket 
local all    postgres        md5 

# TYPE DATABASE  USER   ADDRESS     METHOD 

# "local" is for Unix domain socket connections only 
local all    all          md5 

मैं उन परिवर्तन करने के बाद PostgreSQL को पुनः आरंभ। जब मैं यह psql -U testuser करता हूं तो मुझे पासवर्ड के लिए कहा जाता है, लेकिन जब मैं "पोस्टग्रेस" खाते से लॉग इन करता हूं तो psql -U postgres मुझे कोई पासवर्ड प्रॉम्प्ट नहीं मिलता है और लॉग इन होता है। यदि मैं psql -U postgres -W के साथ पासवर्ड प्रॉम्प्ट को मजबूर करता हूं तो मैं लॉग इन कर सकता हूं सही पासवर्ड टाइप करना या कुछ भी टाइप करके। गलत पासवर्ड टाइप करना अस्वीकार कर दिया जाता है।

क्या कोई मुझे बता सकता है कि यह क्यों हो रहा है?

संबंधित नोट पर: मुझे बहुत उदाहरण मिलता है जहां लोग "पोस्टग्रेस" उपयोगकर्ता के लिए प्रमाणीकरण विधि के रूप में पहचान का उपयोग करते हैं, बहस करते हैं कि "पोस्टग्रेस" उपयोगकर्ता बनने के लिए मशीन के रूट पासवर्ड की आवश्यकता होती है। मुझे लगता है कि तर्क यह है कि अगर हमलावर को रूट पहुंच मिलती है, तो वैसे भी किया जाता है। मैं पासवर्ड के साथ लॉग इन करना पसंद करूंगा, हालांकि, जो रूट पासवर्ड के समान नहीं है। मैं अलग-अलग चीजों के लिए अलग-अलग पासवर्ड रखने में prefere। क्या यह उचित है?

आउटपुट के grep '^[^#]' pg_hba.conf

local all    postgres        md5 
local all    all          md5 
host all    all    127.0.0.1/32   md5 

उत्तर

13

आपका pg_hba.conf वास्तव में यूनिक्स सॉकेट कनेक्शन के लिए पासवर्ड की आवश्यकता चाहिए, लेकिन अभी भी उसके चारों ओर तरीके हैं जिनसे आप को सत्यापित करना चाहिए रहे हैं:

  1. postgres घर पासवर्ड युक्त निर्देशिका में एक .pgpass फ़ाइल (यह भी जाँच गैर-मानक पथ के लिए PGPASSFILE पर्यावरण चर)।

  2. PGPASSWORD पर्यावरण चर सेट किया जा सकता है।

और यह भी संभावना है कि आप गलत pg_hba.conf फ़ाइल संपादित कर रहे हैं। पोस्टग्रेज़ के रूप में कनेक्ट होने पर, SHOW hba_file SQL कमांड के साथ सत्यापन के लिए सही पथ प्राप्त किया जा सकता है।

इसके अलावा, आप लॉग फ़ाइल, /var/log/postgresql/postgresql-9.1-main.log को यह पुष्टि करने के लिए जांच सकते हैं कि कॉन्फ़िगरेशन फ़ाइलों को फिर से लोड किया जाता है जब आप इसके लिए पूछते हैं, और प्रमाणीकरण के दौरान किसी भी संदिग्ध संदेश की तलाश करते हैं।

# DO NOT DISABLE! 
# If you change this first entry you will need to make sure that the 
# database superuser can access the database using some other method. 
# Noninteractive access to all databases is required during automatic 
# maintenance (custom daily cronjobs, replication, and similar tasks). 
# 
# Database administrative login by Unix domain socket 
local all    postgres        peer 

के बाद से Debian और Ubuntu एक ही postgres संकुल का उपयोग करें, यह लागू होता है:

कारण है कि postgres उपयोगकर्ता के साथ passwordless कनेक्शन आम हैं, डेबियन पीजी 9.1 pg_hba.conf के रूप में उन्हें अनुमति न देने के बारे में यह टिप्पणी की है उबंटू को भी।

+0

यह .pgpass फ़ाइल में था, धन्यवाद! आपके द्वारा उद्धृत pg_hba.conf फ़ाइल का हिस्सा मुझे थोड़ा उलझन में डाल देता है। पासवर्ड के बिना पोस्टग्रेस लॉग इन किए बिना noninteractive पहुंच देने के लिए मैं क्या कर सकता हूं? – Basil

+0

सहकर्मी प्रमाणीकरण इस के लिए खोजना चाहिए, यह मानते हुए कि आप पोस्टग्रेस खाते के तहत सर्वर में लॉग इन नहीं करते हैं। – Andrew

+1

मैंने विंडोज़ में एक ही व्यवहार का उल्लेख किया। PgAdminIII में नए कनेक्शन जोड़ने के बाद, पोस्टग्रेस से कनेक्ट करते समय मुझे psql द्वारा पासवर्ड के लिए संकेत नहीं दिया गया था। अपराधी pgpass.conf था, स्वचालित रूप से% APPDATA% \ postgresql फ़ोल्डर में PgAdminIII द्वारा बनाया गया था। धन्यवाद डैनियल। –

5

अपने अजीब व्यवहार पुन, मैं तुम्हें कि postgres उपयोगकर्ता के लिए विशिष्ट है pg_hba.conf की एक पंक्ति नहीं छूटा है लगता है। कृपया आउटपुट दिखाएं:

grep '^[^#]' pg_hba.conf 

पहचान बनाम एमडी 5 के लिए; व्यक्तिगत रूप से मैं विकास में इंटरैक्टिव उपयोग की पहचान करना पसंद करता हूं, और यह सामान्य उपयोगकर्ताओं के लिए ठीक है, लेकिन मुझे नहीं लगता कि postgres उपयोगकर्ता को sudo के माध्यम से उपयोग करना एक अच्छा विचार है। sudo -u postgres psql और psql -U postgres -W दोनों पोस्टग्रेस सुपरसुर भूमिका तक पहुंच प्रदान करते हैं और इस प्रकार डेटाबेस उपयोगकर्ता के रूप में फ़ाइल सिस्टम का उपयोग करते हैं। न तो रूट पासवर्ड की आवश्यकता है, और sudo को sudoers के माध्यम से आसानी से psql चलाने के लिए आमंत्रित करने के लिए आसानी से बाध्य किया जा सकता है। हालांकि, sudo -u postgres psqlक्लाइंट कोड postgres के रूप में भी चलाता है, इसलिए यह एक बड़ी हमले की सतह है, और हमेशा उपयोगकर्ता को sudoer सीमाओं को बाईपास करने का कोई तरीका ढूंढने का मौका मिलता है।

मैं उत्पादन में में ident का उपयोग करता हूं।

+0

लेख विधियों के बारे में स्पष्टीकरण के लिए धन्यवाद। मैंने प्रश्न में आउटपुट जोड़ा। – Basil

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

  • कोई संबंधित समस्या नहीं^_^