ত্রুটি: পঠনযোগ্য ব্যবহারকারী হিসাবে একটি নির্বাচন করার চেষ্টা করার সময় পোস্টগ্রিসে সম্পর্কের টেবিল নামের জন্য অনুমতি অস্বীকার করা হয়েছিল


89
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

পঠনযোগ্য ব্যবহারকারী সংযোগ করতে পারবেন, সারণীগুলি দেখতে পারবেন কিন্তু যখন এটি একটি সাধারণ নির্বাচন করার চেষ্টা করে তখন তা পায়:

ERROR: permission denied for relation mytable
SQL state: 42501

পোস্টগ্র্রেএসকিউএল 9.1 এ এটি হচ্ছে

আমি কি ভুল করেছি?


4
"রিলেশন মাইটেবল" সম্পর্কে কিছু বিশদ সরবরাহ করতে পারেন? স্কিমা, এটি কি "আসল" টেবিল (বা একটি দর্শন / ফাংশন), ট্রিগার ...
ইগোর রোমানচেনকো

উত্তর:


162

এখানে পোস্টগার্রেএসকিউএল 9+ এর সম্পূর্ণ সমাধানটি আপডেট করা হয়েছে updated

CREATE USER readonly  WITH ENCRYPTED PASSWORD 'readonly';
GRANT USAGE ON SCHEMA public to readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;

-- repeat code below for each database:

GRANT CONNECT ON DATABASE foo to readonly;
\c foo
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; --- this grants privileges on new tables generated in new database "foo"
GRANT USAGE ON SCHEMA public to readonly; 
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

বিভিন্ন গুরুত্বপূর্ণ দিকের জন্য https://jamie.curle.io/creating-a-read-only-user-in-postgres/ ধন্যবাদ

যদি কেউ সংক্ষিপ্ত কোড এবং সর্বাধিক বিদ্যমান বিদ্যমান ডাটাবেসগুলির জন্য এটি সম্পাদন করতে সক্ষম এমন একটি, অতিরিক্ত কুডো খুঁজে পান।


6
এর মধ্যে কি মতামত অন্তর্ভুক্ত?
ফ্র্যাঙ্ক কনারি

9
আপনি GRANT ALLকেবলমাত্র পাঠ্য ব্যবহারকারীকেই ডিফল্টরূপে অনুমতি দিচ্ছেন ?
স্লাভা ফমিন II

4
আমি ঠিক যেমন এটি সংজ্ঞায়িত করেছি তাই দিয়েছি, তবুও সাম ত্রুটি
আনিস গোপীনাথ

ব্যবহার করে অনুমোদিত অধিকারগুলি নিশ্চিত করতে পারে \ddp। কেবলমাত্র পঠনযোগ্য অ্যাক্সেসের =r/মতো দেখানো উচিত granting_user=r/readonly_user
গ্রেগ ব্রে

এটি প্রশ্ন থেকে ভারব্যাটিম এসকিউএল। আমি দেখতে পাচ্ছি না কীভাবে এটি একটি সমাধান সরবরাহ করে।
r351574nc3

12

যোগ করার চেষ্টা করুন

GRANT USAGE ON SCHEMA public to readonly;

আপনি সম্ভবত সচেতন ছিলেন না যে স্কিমাতে অবজেক্টগুলি ব্যবহার করার জন্য কারও কাছে একটি স্কিমাতে প্রয়োজনীয় অনুমতি থাকা দরকার।


কিছু অদ্ভুত ঘটছে, আমি ব্যবহার সার্ভারে এই কমান্ড সঞ্চালন করুন psqlযেমন postgresব্যবহারকারী এবং আমি একটি সঠিক প্রতিক্রিয়া পেতে না, GRANT। তবুও, আমি যখন টেবিলগুলিতে এসিএলের দিকে তাকাই তখন আমি কেবলমাত্র দুটি আরও অ্যাকাউন্ট দেখি, একটি হ'ল ডাটাবেসের মালিক jirauserএবং অন্য একটি নামমাত্র পাঠ্য অ্যাকাউন্ট qauser। তবে আমার readonlyসেখানে উপস্থিত হয় না। পোস্টগ্রিসটি 9.1 সংস্করণ এবং আমি এমনকি সার্ভারটি পুনরায় চালু করেছি, এখনও কিছু হয় না।
sorin

4
পিএসকিএল কনসোলে \ du এর আউটপুট কী / ছিল? আপনি কি এখনও এই আউটপুট দিতে পারেন বা এটি ইতিমধ্যে ঠিক করা আপনার উত্তর মত?
sufleR

আউটপুটটি সঠিক (গ্রান্ট) হওয়ায় আসলে কী হয়েছিল তা আমি জানি না। গতকাল এটি কার্যকর হয়নি, তবে আজ এটি চলার পরে আবার কাজ করে, সমস্ত 3 টি আদেশ commands
sorin

4
দ্রষ্টব্য: এটির প্রত্যাশিত সংলগ্নতা কেবল 'গ্রেট'। আপনি যদি সতর্কতা দেখেন: "জনসাধারণ" এর জন্য কোনও সুযোগ সুবিধা দেওয়া হয়নি তবে এটি কার্যকর হয়নি। ব্যবহারকারী কেবল পঠনযোগ্য তাদের অতিরিক্ত অনুমতি দিতে পারে না। 'গ্রান্ট' অনুমতি সহ কেবলমাত্র কোনও ব্যবহারকারীই এটি করতে পারে যাতে আপনার সম্ভবত সুপারভাইজার হিসাবে লগ ইন করতে হবে।
পিটারভেরমন্ট

হাই, যখন আমি স্কেমে জনসাধারণের সকল টেবিলে পোস্টগ্র্যাগ করার জন্য নির্বাচন করার জন্য চেষ্টা করি; এটি প্রতিক্রিয়া জানায়: ত্রুটি: সম্পর্কের ডাটাবেস পরিবর্তনলকের জন্য অনুমতি অস্বীকৃত। তুমি কি জান আমি কি ভুল করছি? ধন্যবাদ (এটি GAppEngine Posgres9.6 এ জনসাধারণের ঠিকানা ব্যবহার করে এবং টার্মিনালটি অ্যাক্সেস করার মাধ্যমে ঘটে)
মাইকে

-5

এটি আমার পক্ষে কাজ করেছে:

আপনি যে বর্তমান ভূমিকাটি লগ ইন করেছেন তা ব্যবহার করে যাচাই করুন: নির্বাচন করুন CURRENT_USER, SESSION_USER;

দ্রষ্টব্য : এটি অবশ্যই স্কিমার মালিকের সাথে মেলে।

স্কিমা | নাম | প্রকার | মালিক
-------- + -------- + ------- + ----------

মালিক যদি পৃথক হয় তবে প্রশাসকের ভূমিকা থেকে বর্তমান ব্যবহারকারীর ভূমিকার জন্য সমস্ত অনুদান প্রদান করুন:

'ROLE_OWNER' থেকে 'CURRENT ROLENAME' এ অনুদান দিন;

তারপরে কোয়েরিটি কার্যকর করার চেষ্টা করুন, এটি এখন সমস্ত সম্পর্কের অ্যাক্সেস হিসাবে আউটপুট দেবে।


4
কেবলমাত্র পঠনযোগ্য নামক একটি ব্যবহারকারীকে মালিক পরিবর্তন করা সঠিকভাবে ঠিক হওয়ার মতো শোনাচ্ছে।
আন্না

আপনার মামলার উপর নির্ভর করে ভুল টেবিলের মালিক প্রকৃত পক্ষে কারণ হতে পারে (এটি আমার শত্রু ছিল)। পোস্টগ্রি মধ্যে ownershiip টেবিল পরিবর্তনের সঠিক ভাবে: দেখুন stackoverflow.com/a/13535184
tanius

-6

নিশ্চিত হয়ে নিন যে আপনার ব্যবহারকারীর ভূমিকার সাথে বৈশিষ্ট্য রয়েছে। উদাহরণ স্বরূপ:

postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 flux      |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

নিম্নলিখিত কমান্ড সম্পাদন করার পরে:

postgres=# ALTER ROLE flux WITH Superuser;
ALTER ROLE
postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 flux      | Superuser                                      | {}
postgres  | Superuser, Create role, Create DB, Replication | {}

এটি সমস্যা স্থির করে।

ভূমিকা এবং স্টাফ জন্য এখানে টিউটোরিয়াল দেখুন: https://www.digitalocean.com/commune/tutorials/how-to-use-roles-and-manage-grant-perifications-in-postgresql-on-a-vps--2


18
না! "সিলেক্ট" করার জন্য "রিডনলি" নামক কোনও ব্যবহারকারীকে সুপারউজারের ভূমিকা দেওয়া সঠিক সমাধান নয়।
আনা

@ অন্না এখানে যা ঘটছে তা নয়। এই থ্রেডটি কেবল পঠনযোগ্য অ্যাক্সেস দেওয়ার বিষয়ে নয়। এই থ্রেডটি অন্য ব্যবহারকারীকে কেবল পঠনযোগ্য অ্যাক্সেস দেওয়ার জন্য কোনও ব্যবহারকারীকে অ্যাক্সেস দেওয়ার বিষয়ে। আইএমএইচও, এটি সঠিক। যদি আপনার ব্যবহারকারী সুপারউজার না হন তবে আপনি কেবল পঠনযোগ্য ব্যবহারকারী তৈরি করতে পারবেন না। যে ত্রুটিটি চালিত হচ্ছে তা হ'ল কেবলমাত্র পঠনযোগ্য ব্যবহারকারী তৈরি করতে সক্ষম হওয়াERROR: permission denied for relation mytable
r351574nc3

-7

আপনার পরবর্তী প্রশ্নটি কার্যকর করা উচিত:

GRANT ALL ON TABLE mytable TO myuser;

অথবা যদি আপনার ত্রুটি কোনও দৃশ্যে থাকে তবে টেবিলটির অনুমতি নেই, সুতরাং আপনার পরবর্তী প্রশ্নটি কার্যকর করা উচিত:

GRANT ALL ON TABLE tbm_grupo TO myuser;

4
ব্যবহারকারীকে "পঠনযোগ্য" বলা হয়। এটি সন্দেহজনক যে ব্যবহারকারীকে সমস্ত অনুমতি দেওয়াটাই লক্ষ্য। তিনি শুধু একটি নির্বাচন করতে চান।
আনা

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