database - Postgresql: पासवर्ड के साथ स्क्रिप्टिंग psql निष्पादन




postgresql-9.0 (8)

PGPASSWORD पर्यावरण चर का उपयोग करने के बारे में सुरक्षा चिंताओं को देखते हुए, मुझे लगता है कि सबसे अच्छा समग्र समाधान इस प्रकार है:

  1. आप जिस पासवर्ड का उपयोग करना चाहते हैं उसके साथ अपनी खुद की अस्थायी पीजीपास फ़ाइल लिखें।
  2. उस फ़ाइल का उपयोग करने के लिए psql को बताने के लिए PGPASSFILE पर्यावरण चर का उपयोग करें।
  3. अस्थायी pgpass फ़ाइल निकालें

यहां नोट के कुछ बिंदु हैं। चरण 1 उपयोगकर्ता की ~ / .pgpass फ़ाइल के साथ मिलकर बचने के लिए है जो मौजूद हो सकता है। आपको यह भी सुनिश्चित करना होगा कि फ़ाइल में 0600 या उससे कम की अनुमति है।

कुछ ने निम्नानुसार शॉर्टकट को बैश करने का सुझाव दिया है:

PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb

यह वास्तविक फ़ाइल में डेटा लिखने की आवश्यकता से बचने के लिए <() वाक्यविन्यास का उपयोग करता है। लेकिन यह काम नहीं करता है क्योंकि psql जांचता है कि कौन सी फाइल का उपयोग किया जा रहा है और इस तरह की त्रुटि फेंक देगा:

WARNING: password file "/dev/fd/63" is not a plain file

मैं psql को कैसे कॉल कर सकता हूं ताकि यह पासवर्ड के लिए संकेत न दे ?

यह वही है जो मेरे पास है:

psql -Umyuser < myscript.sql

हालांकि, मुझे वह पासवर्ड नहीं मिला जो पासवर्ड पास करता है, और इसलिए psql हमेशा इसके लिए संकेत देता है।


PostgreSQL को प्रमाणीकृत करने के कई तरीके हैं। आप https://www.postgresql.org/docs/current/static/client-authentication.html पर पासवर्ड प्रमाणीकरण के विकल्पों की जांच करना चाह सकते हैं।

अपने प्रश्न का उत्तर देने के लिए, पासवर्ड-आधारित प्रमाणीकरण के लिए पासवर्ड प्रदान करने के कुछ तरीके हैं। स्पष्ट तरीका पासवर्ड प्रॉम्प्ट के माध्यम से है। इसके बजाय, आप पासवर्ड को पीजीपास फ़ाइल में या PGPASSWORD पर्यावरण परिवर्तक के माध्यम से प्रदान कर सकते हैं। इन्हें देखें:

कमांड लाइन तर्क के रूप में पासवर्ड प्रदान करने का कोई विकल्प नहीं है क्योंकि वह जानकारी अक्सर सभी उपयोगकर्ताओं के लिए उपलब्ध होती है, और इसलिए असुरक्षित होती है। हालांकि, लिनक्स / यूनिक्स वातावरण में आप इस तरह के एक कमांड के लिए एक पर्यावरण चर प्रदान कर सकते हैं:

PGPASSWORD=yourpass psql ...

आप अपनी स्क्रिप्ट की शुरुआत में यह कमांड लाइन जोड़ सकते हैं:

set PGPASSWORD=[your password]


उन लोगों के लिए शक्तिशालीबाय के जवाब पर बिल्डिंग जो * निक्स शैल स्क्रिप्टिंग के साथ सहज नहीं हैं, यहां एक कार्यशील स्क्रिप्ट है:

#!/bin/sh
PGPASSFILE=/tmp/pgpasswd$$
echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE
chmod 600 $PGPASSFILE
export PGPASSFILE
psql mydb
rm $PGPASSFILE

पंक्ति 2 पर /tmp/pgpasswd$$ में डबल डॉलर चिह्न ( $$ ) फ़ाइल नाम पर प्रक्रिया आईडी संख्या जोड़ता है, ताकि इस स्क्रिप्ट को साइड इफेक्ट्स के बिना एक साथ, एक साथ भी चलाया जा सके।

पंक्ति 4 पर chmod कमांड के उपयोग पर ध्यान दें - जैसे कि " सादा फ़ाइल नहीं " त्रुटि की तरह, जो शक्तिशाली बाइट वर्णित है, अगर यह नहीं किया जाता है तो " अनुमतियां " त्रुटि भी होती है।

लाइन 6 पर, यदि आप डिफ़ॉल्ट ( localhost : 5432 ) का उपयोग करते हैं और केवल एक डेटाबेस उपयोगकर्ता हैं, तो आपको -h myserver , -p myport , या -U jdoe ध्वज का उपयोग नहीं करना होगा। एकाधिक उपयोगकर्ताओं के लिए, (लेकिन डिफ़ॉल्ट कनेक्शन) उस पंक्ति को बदल दें

psql mydb jdoe

स्क्रिप्ट को निष्पादन योग्य बनाने के लिए मत भूलना

chmod +x runpsql ( या जिसे आपने स्क्रिप्ट फ़ाइल कहा है )


कमांड में उपयोग करें: psql -h localhost -p 5432 -U उपयोगकर्ता -w


यदि आप एकाधिक होस्ट / डेटाबेस कनेक्शन रखने का इरादा रखते हैं, तो ~ / .pgpass फ़ाइल जाने का तरीका है।

कदम:

  1. ~ / .pgpass फ़ाइल बनाएं। निम्न प्रारूप होस्टनाम में अपनी जानकारी इनपुट करें: पोर्ट: डेटाबेस: उपयोगकर्ता नाम: पासवर्ड
  2. अपने फ़ील्ड मानों के चारों ओर स्ट्रिंग कोट्स न जोड़ें। आप अपने पोर्ट / डेटाबेस फ़ील्ड के लिए * वाइल्डकार्ड के रूप में भी उपयोग कर सकते हैं।
  3. अपनी बैश प्रोफाइल में उपनाम बनाएं जो आपके लिए आपके psql कमांड को चलाता है। उदाहरण के लिए: alias postygresy='psql --host hostname database_name -U username' मान उन लोगों से मेल खाना चाहिए जिन्हें आपने ~ / .pgpass फ़ाइल में इनपुट किया था।
  4. स्रोत आपके बश प्रोफाइल।
  5. कमांड लाइन से अपने उपनाम टाइप करें।

ध्यान दें कि यदि आपके पास एक निर्यात PGPASSWORD = '' चर सेट है, तो फ़ाइल पर प्राथमिकता लेनी होगी। अपनी फ़ाइल की अनुमतियों को बदलना भी बुद्धिमानी है ताकि सामग्री अन्य उपयोगकर्ताओं से अस्पष्ट हो। यह chmod 600 ~/.pgpass साथ हासिल किया जा सकता है


यह बस PGPASSWORD का उपयोग करके किया जा सकता है। मैं psql 9.5.10 का उपयोग कर रहा हूँ। आपके मामले में समाधान होगा

PGPASSWORD=password psql -U myuser < myscript.sql





postgresql-9.0