पढ़ते रहिये, सर्वश्रेष्ठ विकल्प अंतिम आते हैं . लेकिन पहले कुछ बातें स्पष्ट कर दें।
केवल पासवर्ड अनुरोध को मौन करें
यदि आपकी समस्या केवल पासवर्ड संकेत है, तो आप इसे चुप करा सकते हैं। मैं यहां मैनुअल को उद्धृत करता हूं:
<ब्लॉककोट>
-w
--no-password
कभी भी पासवर्ड प्रॉम्प्ट जारी न करें। यदि सर्वर को पासवर्ड प्रमाणीकरण की आवश्यकता है और पासवर्ड अन्य माध्यमों से उपलब्ध नहीं है जैसे .pgpass
फ़ाइल, कनेक्शन का प्रयास विफल हो जाएगा। यह विकल्प बैच जॉब और स्क्रिप्ट में उपयोगी हो सकता है जहां पासवर्ड दर्ज करने के लिए कोई उपयोगकर्ता मौजूद नहीं है। (...)
शायद आपको पासवर्ड की आवश्यकता नहीं है
आम तौर पर यह अनावश्यक है। डिफ़ॉल्ट डेटाबेस सुपरयुसर postgres
आमतौर पर उसी नाम के सिस्टम उपयोगकर्ता से मेल खाता है। चल रहा है psql
यदि प्रमाणीकरण विधि peer
. है तो इस खाते से पासवर्ड की आवश्यकता नहीं है या ident
आपके pg_hba.conf
. में सेट हैं फ़ाइल। आपके पास शायद इस तरह की एक पंक्ति है:
local all postgres peer
और आमतौर पर भी:
local all all peer
इसका अर्थ है, प्रत्येक स्थानीय उपयोगकर्ता एक सभी . में लॉग इन कर सकता है डेटाबेस पासवर्ड के बिना एक ही नाम के डेटाबेस उपयोगकर्ता के रूप में।
हालाँकि , यहाँ एक आम गलत धारणा है। फिर से उद्धरण:
यह विधि केवल स्थानीय कनेक्शन . पर समर्थित है ।
बोल्ड जोर मेरा।
आप localhost
से जुड़ रहे हैं , जो "स्थानीय कनेक्शन" नहीं है , भले ही इसमें "स्थानीय" शब्द हो। यह 127.0.0.1 के लिए एक टीसीपी/आईपी कनेक्शन है। लोकलहोस्ट पर विकिपीडिया:
आधुनिक कंप्यूटर सिस्टम पर, localhost
एक होस्टनाम के रूप में 127.0.0.0/8
. में anIPv4 पते में अनुवाद किया जाता है (लूपबैक) नेट ब्लॉक, आमतौर पर 127.0.0.1
, या ::1
IPv6 में।
स्थानीय कनेक्शन के लिए आसान समाधान
पैरामीटर को छोड़ दें -h
psql
. से मंगलाचरण। psql
. पर मैनुअल का हवाला देते हुए एक बार फिर:
यदि आप होस्ट नाम को छोड़ देते हैं, तो psql एक यूनिक्स-डोमेन सॉकेट के माध्यम से कनेक्ट हो जाएगा स्थानीय होस्ट पर किसी सर्वर पर, या TCP/IP के माध्यम से localhost
उन मशीनों पर जिनमें यूनिक्स-डोमेन सॉकेट नहीं हैं।
विंडोज
... में यूनिक्स-डोमेन सॉकेट नहीं है, pg_hba.conf
local
. से शुरू होने वाली पंक्तियाँ विंडोज़ पर लागू नहीं हैं। विंडोज़ पर आप localhost
के माध्यम से कनेक्ट होते हैं डिफ़ॉल्ट रूप से, जो हमें शुरुआत में वापस लाता है।
यदि आपकी सुरक्षा आवश्यकताएं शिथिल हैं, तो आप localhost
. के माध्यम से सभी कनेक्शनों पर भरोसा कर सकते हैं :
host all all 127.0.0.1/32 trust
मैं केवल दूरस्थ कनेक्शन के साथ डिबगिंग के लिए ऐसा करूंगा। कुछ और सुरक्षा के लिए आप विंडोज़ पर एसएसपीआई प्रमाणीकरण का उपयोग कर सकते हैं। इस लाइन को pg_hba.conf
. में जोड़ें "स्थानीय" कनेक्शन के लिए:
host all all 127.0.0.1/32 sspi
यदि आपको वास्तव में पासवर्ड की आवश्यकता है
आप कर सकते थे एक पर्यावरण चर सेट करें , लेकिन यह निराश है , विशेष रूप से विंडोज के लिए। मैनुअल:
<ब्लॉककोट>
PGPASSWORD
पासवर्ड कनेक्शनपैरामीटर के समान व्यवहार करता है। सुरक्षा कारणों से इस पर्यावरण चर के उपयोग की अनुशंसा नहीं की जाती है, क्योंकि कुछ ऑपरेटिंग सिस्टम गैर-रूट उपयोगकर्ताओं को पीएस के माध्यम से प्रक्रिया पर्यावरण चर देखने की अनुमति देते हैं; इसके बजाय ~/.pgpass
. का उपयोग करने पर विचार करें फ़ाइल (धारा 32.15 देखें)।
psql
. पर मैनुअल :
एक conninfo
स्ट्रिंग कनेक्शन पैरामीटर निर्दिष्ट करने का एक विकल्प है:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
या एक URI , जिसका उपयोग डेटाबेस नाम के बजाय किया जाता है:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
पासवर्ड फ़ाइल
लेकिन आमतौर पर .pgpass
. सेट करना बेहतर होता है फ़ाइल स्क्रिप्ट फ़ाइलों में पासवर्ड डालने के बजाय।
मैनुअल में संक्षिप्त अध्याय को ध्यान से पढ़ें। विशेष रूप से, ध्यान दें कि यहाँ...
localhost
. का होस्ट नाम दोनों टीसीपी से मेल खाता है (होस्ट नाम localhost
) और यूनिक्स डोमेन सॉकेट (pghost
खाली या डिफ़ॉल्ट सॉकेट निर्देशिका) स्थानीय मशीन से आने वाले कनेक्शन।
सटीक पथ सिस्टम पर निर्भर करता है। यह फ़ाइल भूमिका और पोर्ट (DB क्लस्टर) के कई संयोजनों के लिए पासवर्ड संग्रहीत कर सकती है:
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
विंडोज़ . पर मशीनें फ़ाइल को इसमें ढूंढती हैं:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
आमतौर पर इसका समाधान होता है:C:\Documents and Settings\My_Windows_User_Name\Application Data\
।