পিএসকিএল: ফ্যাটাল: পিয়ার প্রমাণীকরণ ব্যবহারকারী "দেব" এর জন্য ব্যর্থ হয়েছে


198

যখন আমি একটি নতুন ব্যবহারকারী তৈরি করি তবে এটি ডাটাবেসে লগইন করতে পারে না।
আমি এটি এর মতো করি:

postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

তারপরে একটি ডাটাবেস তৈরি করুন:

postgres@Aspire:/home/XXX$ createdb -O dev test_development

এর পরে, আমি psql -U dev -W test_developmentলগইন করার চেষ্টা করি , তবে ত্রুটিটি পেয়েছি :

psql: FATAL:  Peer authentication failed for user "dev"

আমি সমস্যাটি সমাধান করার চেষ্টা করেছি কিন্তু ব্যর্থ হয়েছি।



উপরের প্রশ্নগুলির উত্তরের জন্য আপনাকে এখনই --interactiveকমান্ডটি যুক্ত করতে হবে:createuser --interactive joe
ইউজার 37991372

উত্তর:


310

চেষ্টা করুন:

psql -U user_name  -h 127.0.0.1 -d db_name

কোথায়

  • -U ডাটাবেস ব্যবহারকারীর নাম
  • -h স্থানীয় সার্ভারের হোস্টনাম / আইপি হ'ল ইউনিক্স ডোমেন সকেটগুলি এড়িয়ে চলে
  • -d সংযুক্ত হওয়ার জন্য ডাটাবেসের নাম

এটি ইউনিক্স ডোমেন সকেট সংযোগের পরিবর্তে পোস্টগ্র্রেসকিএল দ্বারা "নেটওয়ার্ক" সংযোগ হিসাবে মূল্যায়ন করা হয়, সুতরাং আপনি যেমন দেখতে পাবেন তেমন কোনও "স্থানীয়" সংযোগ হিসাবে মূল্যায়ন করা হয় না pg_hba.conf:

local   all             all                                     peer

15
আমি (9.4 Ver) প্রয়োজন: psql -U ব্যবহারকারী-নাম -h 127.0.0.1 -d ডিবি-নাম
গ্রেগর

9
কি একটি অলৌকিক সরঞ্জাম। ম্যানুয়ালটি বলে psql [option...] [dbname [username]], সুতরাং আপনি psql dbname usernameকেবল কাজ করবেন বলে মনে করেন ..
djeikyb

2
আমার জন্যও কাজ করেছেন। আমি আরও মনে করি কনফিগার ফাইল পরিবর্তন করার চেয়ে এটি অনেক বেশি পছন্দনীয় উপায়, বিশেষত যখন আপনি কী করছেন সে সম্পর্কে আপনার কোনও ধারণা নেই এবং আপনার সমস্যা সমাধানের জন্য কেবলমাত্র এসও উত্তর অনুসরণ করা।
বোরিসানো

1
এটি আমার পক্ষে কাজ করেছে, অনেক ধন্যবাদ, যদিও আমি এটি গবেষণা করছি কেন এটি সঠিক সমাধান ছিল। তবুও, অন্য একটি মেশিনে একটি কনফিগারেশনে আমি পিএসকিএল-ইউ ব্যবহারকারীর -d ডাটাবেস হিসাবে লগইন করব। সুতরাং আমি অনুমান করি যে গৃহীত সমাধানটি মামলার উপর নির্ভর করে।
লাজার রাইজিং

2
ভাল উত্তর. আমি postgres হিসাবে লগ ইন করার পর ডাটাবেসের ভিতর থেকে পেয়ে ছিল \c glossary john FATAL: Peer authentication failed for user "john"তারপর \c glossary john localhost Password for user john: SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".এটা কাজ করে।
বর্ণন

215

আপনার সংযোগ ব্যর্থ হয়েছে কারণ ডিফল্টরূপে psqlইউনিক্স সকেটের সাথে peerপ্রমাণীকরণ ব্যবহার করে সংযুক্ত হয় , যার জন্য বর্তমান ইউনিক্স ব্যবহারকারীর একই ব্যবহারকারীর নাম থাকা দরকার psql। সুতরাং আপনাকে ইউএনআইএক্স ব্যবহারকারী তৈরি করতে হবে devএবং তারপরে লগইন করতে হবে devবা sudo -u dev psql test_developmentডাটাবেস অ্যাক্সেস করার জন্য ব্যবহার করতে হবে (এবং পাসওয়ার্ডের জন্য জিজ্ঞাসা করা psqlউচিত নয় )।

তুমি কি বা, ইউনিক্স ব্যবহারকারী তৈরি হলে আপনি শুধু আপনার ডাটাবেসের সাথে সংযোগ করতে চান মত চান না পারেন, তাহলে তদর্থক প্রশ্নের, ব্যবহার করে একটি সকেট সংযোগ অত্যাচার psql --host=localhost --dbname=test_development --username=dev(@meyerson উত্তর দ্বারা সরু আউট হিসাবে) আপনার আশু সমস্যার সমাধান হবে।

তবে আপনি যদি পিয়ার পদ্ধতির পরিবর্তে ইউনিক্স সকেটের উপরে পাসওয়ার্ড প্রমাণীকরণ জোর করতে চান তবে নীচের pg_hba.conf* লাইনটি পরিবর্তন করে দেখুন :

থেকে

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          peer

প্রতি

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          md5
  • peerমানে এটি ইউনিক্স ব্যবহারকারীর পরিচয় (সত্যতা) বিশ্বাস করবে। সুতরাং একটি পাসওয়ার্ড জিজ্ঞাসা না।

  • md5এর অর্থ এটি সর্বদা একটি পাসওয়ার্ড জিজ্ঞাসা করবে, এবং হ্যাশ করার পরে এটিটি বৈধ করবে MD5

আপনি অবশ্যই কোনও নির্দিষ্ট ডেটাবেস বা ব্যবহারকারীর জন্য আরও সুনির্দিষ্ট নিয়ম তৈরি করতে পারেন, কিছু ব্যবহারকারী peerএবং অন্যদের পাসওয়ার্ডের প্রয়োজন রয়েছে।

pg_hba.confপোস্টগ্রেএসকিউএল চলছে কিনা তা পরিবর্তনের পরে আপনাকে এটিকে পুনরায় লোড করে ( pg_ctl reload) বা পুনরায় চালু করে ( sudo service postgresql restart) পুনরায় কনফিগারেশনটি পুনরায় পড়তে হবে ।

* ফাইলটি pg_hba.confসম্ভবত থাকবে/etc/postgresql/9.x/main/pg_hba.conf

সম্পাদিত: @ ক্লোয়ে থেকে মন্তব্য, @ জাভেরইএইচ, @ জোনাস আইশার, @ ফকোয়েলহো, @ জোয়ানিস, @ আফিল_এর মন্তব্যে উত্তরের অন্তর্ভুক্ত কী?


5
আপনি কীভাবে peer ওকে অনুমতি দিন md5? যখন আমি সেট করি md5, তখন আমি আর postgresব্যবহারকারীর সাথে লগইন করতে পারি না ! আমি একাধিক লাইন যুক্ত করার চেষ্টা করেছি এবং কমাগুলি দিয়ে পদ্ধতিটি পৃথক করেছিলাম, তবে সেগুলি কার্যকর হয়নি। ঠিক আছে আমি mgoldwasserউত্তর খুঁজে পেয়েছি এবং এটি কার্যকর। আমি postgresপদ্ধতির সাথে ব্যবহারকারীর জন্য মাত্র একটি লাইন যুক্ত করেছি peer!
ক্লো

3
চিন্তা করবেন না, আপনি নির্দিষ্ট ব্যবহারকারীদের (যেমন আপনার ব্যবহারকারী নাম বা পোস্টগ্রিজ) পিয়ার প্রমাণীকরণ সেট করতে পারেন। দেখে মনে হচ্ছে সুনির্দিষ্ট বিধিগুলি সাধারণ নিয়মগুলিকে ওভাররাইড করে
জাভিয়েরআইইচ

1
কিছু বিতরণের ক্ষেত্রে ফাইলটি এখানেও পাওয়া যেতে পারে:/var/lib/pgsql/9.4/data/pg_hba.conf
জোনাস আইশার

2
পোস্টগ্রেসকিএল পুনরায় চালু না করে আপনি কি এটি করতে পারবেন না? আপনি কেবল pg_user সারণিতে প্রমাণীকরণ পদ্ধতিটি নির্দিষ্ট করতে পারবেন না?
fccoelho

2
পুনরায় চালু করার পরিবর্তে আপনি পুনরায় লোড করতে পারেন। এটি pg_hba টেবিলটি পুনরায় লোড করে। আমার জন্য কাজ করেছেন।
জোয়ানিস

29

পিয়ার প্রমাণীকরণের অর্থ হ'ল পোস্টগ্রিজ অপারেটিং সিস্টেমটিকে আপনার লগইন নামের জন্য জিজ্ঞাসা করে এবং এটি প্রমাণীকরণের জন্য ব্যবহার করে। পোস্টগ্রিজে পিয়ার প্রমাণীকরণ ব্যবহার করে ব্যবহারকারী "দেব" হিসাবে লগইন করতে অপারেটিং সিস্টেমটিতে আপনাকে অবশ্যই "দেব" ব্যবহারকারী হতে হবে।

আপনি পোস্টগ্রেএসকিএল ডকুমেন্টেশনে প্রমাণীকরণ পদ্ধতিগুলির বিশদ জানতে পারেন ।

ইঙ্গিত: যদি কোনও প্রমাণীকরণ পদ্ধতি আর কাজ না করে তবে সার্ভারটি নেটওয়ার্ক থেকে সংযোগ বিচ্ছিন্ন করুন এবং "লোকালহোস্ট" এর জন্য পদ্ধতি "বিশ্বাস" ব্যবহার করুন (এবং পদ্ধতিটি "বিশ্বাস" সক্ষম করার সময় আপনার সার্ভারটি নেটওয়ার্কের মাধ্যমে পৌঁছাতে পারে না তা ডাবল পরীক্ষা করে দেখুন)।


1
আপনার উত্তরগুলির জন্য ধন্যবাদ। তবে আমি যদি devসিস্টেম ব্যবহারকারীতে পরিবর্তন করি তবে এটি এখনও কাজ করে নাXXX
hsming

2
স্টেফানের উত্তরটি সঠিক। আমি কেবলমাত্র একটি লিঙ্ক যুক্ত করেছি, যা আমার সম্পাদনা পর্যালোচনা করা হলে দস্তাবেজগুলিতে দৃশ্যমান হবে যেখানে প্রতিটি প্রমাণীকরণের পদ্ধতি ব্যাখ্যা করা হয়।
dsh

25

আপনি নির্দিষ্ট যখন:

psql -U user

এটি ইউনিক্স সকেটের মাধ্যমে সংযুক্ত হয়, যা অন্যথায় peerনির্দিষ্ট না করে ডিফল্টরূপে প্রমাণীকরণ ব্যবহার করে pg_hba.conf

আপনি নির্দিষ্ট করতে পারেন:

host    database             user             127.0.0.1/32       md5
host    database             user             ::1/128            md5

নির্দিষ্ট databaseএবং জন্য লুপব্যাক ইন্টারফেসে (আইপিভি 4 এবং আইপিভি 6 উভয়) টিসিপি / আইপি সংযোগ পেতে user

পরিবর্তনের পরে আপনাকে পোস্টগ্রিজ পুনরায় চালু করতে হবে বা এর কনফিগারেশনটি পুনরায় লোড করতে হবে। পুনরায় চালু করুন যা আধুনিক আরএইচইএল / ডেবিয়ান ভিত্তিক ডিস্ট্রোজে কাজ করা উচিত:

service postgresql restart

পুনরায় লোড নিম্নলিখিত পদ্ধতিতে কাজ করা উচিত:

pg_ctl reload

PATH কনফিগারেশনের উপর নির্ভর করে কমান্ডটি পৃথক হতে পারে - পোস্টগ্রিসটি ইনস্টল হওয়ার পদ্ধতি অনুসারে আপনাকে পরম পথ নির্দিষ্ট করতে হতে পারে, যা আলাদা হতে পারে।

তারপরে আপনি ব্যবহার করতে পারেন:

psql -h localhost -U user -d database

টিসিপি / আইপি userনির্দিষ্ট databaseকরে লগইন করতে । md5এনক্রিপ্ট করা পাসওয়ার্ডের জন্য দাঁড়িয়েছে, আপনি নির্দিষ্ট করতে পারেন যখনpassword অনুমোদনের সময় সাধারণ পাঠ্য পাসওয়ার্ডের । এই 2 টি বিকল্প যতক্ষণ না ডাটাবেস সার্ভারটি কেবল স্থানীয়ভাবে অ্যাক্সেসযোগ্য, কোনও নেটওয়ার্ক অ্যাক্সেস না হওয়া উচিত ততক্ষণ তা দুর্দান্ত হওয়া উচিত না।

গুরুত্বপূর্ণ দ্রষ্টব্য:pg_hba.conf বিষয়ে সংজ্ঞা অর্ডার - নিয়মগুলি শীর্ষ থেকে নীচে পর্যন্ত iptables এর মতো পড়া হয়, তাই আপনি সম্ভবত নিয়মের উপরে প্রস্তাবিত বিধিগুলি যুক্ত করতে চান:

host    all             all             127.0.0.1/32            ident

পুনরায় গুরুত্বপূর্ণ দ্রষ্টব্য:
ক্রমটি

23

@ ফ্ল্যাভায়ডোসোসার উত্তরটি কার্যকর হলেও, এটি সমস্ত ব্যবহারকারীর (অন্য প্রত্যেকে) পাসওয়ার্ড প্রবেশ করানো বাধ্যতামূলক করে তোলে।

কিছু সময়ের জন্য অন্য সবার জন্য পিয়ার প্রমাণীকরণ বুদ্ধিমান হয়ে যায় তবে কোনও পরিষেবা ব্যবহারকারীর জন্য ব্যতিক্রম করে। সেক্ষেত্রে আপনি pg_hba.conf এর মতো দেখতে একটি লাইন যুক্ত করতে চান:

local   all             some_batch_user                         md5

আমি আপনাকে সুপারিশ করব যে আপনি মন্তব্য করা শিরোনাম লাইনের ঠিক নীচে এই লাইনটি যুক্ত করুন:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             some_batch_user                         md5

আপনাকে PostgreSQL ব্যবহার করে পুনরায় চালু করতে হবে

sudo service postgresql restart

আপনি যদি 9.3 ব্যবহার করেন তবে আপনার pg_hba.conf সম্ভবতঃ

/etc/postgresql/9.3/main/pg_hba.conf


12

আমি এতে প্রবেশ করলে এটি আমার পক্ষে কাজ করে:

sudo -u username psql

কেবলমাত্র যদি আপনি সিস্টেমে এবং পোস্টগ্রাগিতে একটি সম্পূর্ণ নতুন ব্যবহারকারী তৈরি করেন - hsming কেবল নতুন তৈরি পোস্টগ্রিজ ব্যবহারকারীর সাথে পোস্টগ্রাজের সাথে সংযোগ স্থাপন করতে চায় dev,।
কেনেথ

8

সবচেয়ে সহজ সমাধান:

CREATE USER dev WITH PASSWORD 'dev';
CREATE DATABASE test_development;
GRANT ALL PRIVILEGES ON DATABASE test_development to dev;
ALTER ROLE dev CREATEROLE CREATEDB;

6

আমি কেবল যোগ করতে হবে -h localhost


আমার ইস্যুটি রাস্পবেরিতে পোস্টগ্রিজ ব্যবহার করছিল। আমি আমার জন্য কাজ করেছি !! ধন্যবাদ!
সজ্জিত

2

আমার ক্ষেত্রে আমি বিভিন্ন বন্দর ব্যবহার করছিলাম। ডিফল্টটি 5432 I আমি 5433 ব্যবহার করছিলাম This এটি আমার পক্ষে কাজ করেছে:

$ psql -f update_table.sql -d db_name -U db_user_name -h 127.0.0.1 -p 5433

পোস্টগ্রিসের একাধিক ইনস্টলেশন থাকলে এটি স্বয়ংক্রিয়ভাবে ঘটতে পারে।
গ্যালিগেটর

1

ভবিষ্যতে লোকেরা এটি দেখার postgresজন্য /usr/lib/postgresql/10/bin, আমার উবুন্টু সার্ভারে রয়েছে।

আমি এটিকে আমার .bashrc ফাইলে PATH এ যুক্ত করেছি, এবং এই লাইনটি শেষে যুক্ত করব

PATH=$PATH:/usr/lib/postgresql/10/bin

তারপর কমান্ড লাইনে

$> source ./.bashrc

আমি আমার বাশ পরিবেশকে সতেজ করে তুলেছি। এখন আমি যে postgres -D /whereverকোনও ডিরেক্টরি থেকে ব্যবহার করতে পারি


1

pg_dump -h লোকালহোস্ট -U পোস্টগ্রিস -F সি-বি-ভি -f মাইডিবি.ব্যাকআপ মাইডিবি


এই প্রশ্নটি কোন উত্তর দেয়? কেন -U postgresমূল হতে পারে? যাইহোক, এই সমস্ত ড্যাশ-লেটার কি?
গ্রেইবার্ড

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.