সম্পর্কের জন্য অনুমতি অস্বীকৃত


329

আমি সাধারণ এসকিএল কমান্ড চালানোর চেষ্টা করেছি:

select * from site_adzone;

এবং আমি এই ত্রুটি পেয়েছি

ERROR:  permission denied for relation site_adzone

এখানে সমস্যা কি হতে পারে?

আমি অন্যান্য টেবিলগুলির জন্য নির্বাচন করার চেষ্টাও করেছি এবং একই সমস্যা পেয়েছি। আমি এটি করার চেষ্টাও করেছি:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

তবে কনসোল থেকে আমি এই প্রতিক্রিয়া পেয়েছি

WARNING:  no privileges were granted for "jerry"

আপনার কি কিছু ধারণা আছে যা ভুল হতে পারে?


অনুমতিগুলি কীভাবে আপডেট করবেন তা আমি নিশ্চিত নই যাতে আমি ডিবিতে পড়তে / লিখতে পারি
বোবান

1
আপনার প্রয়োজনীয় সুযোগগুলি প্রদান করতে হবে: postgresql.org/docs/current/static/ddl-priv.html এবং postgresql.org/docs/current/static/sql-grant.html
a_horse_with_no_name

2
তাই আপনাকে স্বাগতম! এই প্রশ্নের জন্য, আপনি dba.stackexchange.com এ আরও বেশি সহায়তা পেতে পারেন, যদিও আপনি অনেকগুলি সাঁতারের মত মন্তব্য পেতে পারেন :)
জ্যারেড বেক

10
মাফ করবেন. এটি আজকের রাত্রে অফ-টপিক হিসাবে বন্ধ দেখতে পেয়েছি এটি দ্বিতীয় প্রোগ্রামিং-সম্পর্কিত পোস্টগ্র্যাস্কল প্রশ্ন! শেষেরটিতে ,000 67,০০০ বার দেখা হয়েছে, এটি একটি 30,000 বার। আমাদের কাছে জনপ্রিয়তার একটি ধারা থাকতে হবে: বিষয়টিতে> 15,000 ভিউ = সহ যে কোনও অ-বিষয়গত প্রশ্ন।
থিওডোর আর স্মিথ

1
এই প্রশ্নটি বন্ধ বিষয় নয়! যাই হোক একটি অনুলিপি হয়, stackoverflow.com/questions/13497352/...
wheaties

উত্তর:


391

ডাটাবেসে গ্রান্ট আপনার যা প্রয়োজন তা নয়। সরাসরি টেবিলগুলিতে অনুদান দিন।

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

আপনি তার পরিবর্তে চান:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

এটি এই সমস্যাটির যত্ন নেবে।


7
পোস্টগ্রিসের মতো এটিকে সুপারভাইসর হিসাবে চালান।
ক্রিস ট্র্যাভার্স 12

19
এটি কি কোনওভাবে শর্টকাট হতে পারে? সমস্ত টেবিলগুলিতে সমস্ত ব্যক্তিগত অনুমোদন দেওয়া উচিত?
শাদুর

196
@ শাদুর স্কিমে পাবলিক জেরি টেবিলগুলিতে সমস্ত বেসরকারীকে প্রদান করুন;
রন ই

10
@ রনই কি বর্তমান ডাটাবেসে সীমাবদ্ধ?
শাদুর

7
@zmiftah আপনার যে স্কিমার দরকার তা> স্কেমার নাম অনুসারে সমস্ত ব্যক্তিগতত্বের জন্য ব্যবহারকারীকে স্কেম দিন;
পিয়ারোজি

241

সমস্ত টেবিলে অনুদানের সুবিধার জন্য রন ই উত্তর পোস্ট করা কারণ এটি অন্যের পক্ষে দরকারী।

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

21
এছাড়াও আপনি একটি জন্য অনুরূপ কমান্ড প্রয়োগ করার প্রয়োজন হতে পারে ALL SEQUENCESএবং ALL FUNCTIONS
পিস্তোস

7
যাঁরা ভাবছিলেন তাদের ALL TABLESজন্যও : মতামতগুলিও অন্তর্ভুক্ত রয়েছে, সুতরাং আলাদা কোনও ALL VIEWSআদেশ নেই :-)
আন্দ্রে গ্যাসের

74

প্রথমে ডান ডাটাবেসের সাথে সংযুক্ত করুন , তারপরে চালান:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

4
ধন্যবাদ সঠিক ডাটাবেসে সংযুক্তি আমি আগে করছিলাম না!
asps

15
ডান ডাটাবেসে সংযুক্তি একটি বিশাল দ্বন্দ্ব তৈরি করে :)\connect databasename;
ডেনিস মাটাফোনভ

3
এই. আমি "পোস্টগ্রিস" এর সাথে সংযুক্ত ছিলাম। ধন্যবাদ!
অ্যান্ড্রু জি।

2
হ্যাঁ ডিবিতে সংযোগ স্থাপনের ফলে পার্থক্য হয়েছে
ইনোস্টিয়া

44
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;

এই আনসার আমার দিন বাঁচায়!
anhtran

19

প্রথম এবং গুরুত্বপূর্ণ পদক্ষেপটি আপনার ডিবিতে সংযুক্ত:

psql -d yourDBName

2 পদক্ষেপ, সুযোগ সুবিধাগুলি

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;

18

স্কিমা ব্যবহারে বিদ্যমান সমস্ত টেবিলগুলিতে অনুমতি দেওয়ার জন্য:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

ভবিষ্যতের সারণিতে প্রয়োগ করা হবে এমন ডিফল্ট অনুমতিগুলি নির্দিষ্ট করতে:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

যেমন

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

আপনি যদি কলামগুলি ব্যবহার করেন SERIALবা BIGSERIALকলামগুলি করেন তবে আপনি সম্ভবত এটির জন্য চাইবেন, নাহলেSEQUENCES আপনার INSERTব্যর্থ হবে ( পোস্টগ্রিস 10 এর দ্বারাIDENTITY সমস্যাটি ভুগছে না, এবং SERIALপ্রকারভেদে প্রস্তাবিত হয় ), যেমন

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

আরও বিশদ এবং পুনরায় ব্যবহারযোগ্য স্ক্রিপ্টের জন্য ওয়েব অ্যাপের জন্য পোস্টগ্রিজ এসকিউএল অনুমতিগুলির আমার উত্তরটিও দেখুন।

সূত্র:

প্রদান

ডিফল্ট বেসরকারীদের পরিবর্তন করুন


9

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

alter table <TABLE> owner to <USER>;

5

সারণীর মালিক হিসাবে আপনি পিএসএইচএল-এ লগইন করেছেন তা নিশ্চিত করুন। টেবিলগুলি কী ব্যবহার করে তা সন্ধান করতে\dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

তারপরে আপনি অনুদানগুলি চালাতে পারেন


0

আপনি যেহেতু নির্বাচিত অনুমতিগুলির সন্ধান করছেন, আমি আপনাকে সমস্ত সুযোগ-সুবিধাগুলির চেয়ে কেবল নির্বাচিত মঞ্জুরি দেওয়ার পরামর্শ দিচ্ছি। আপনি এটি দ্বারা এটি করতে পারেন:

GRANT SELECT ON <table> TO <role>;

0

তোমার উচিত:

  1. পোস্টগ্রিজ ব্যবহারকারীর সাথে ডিবিভারের মাধ্যমে ডেটাবেজে সংযোগ স্থাপন করুন
  2. বাম ট্যাবে আপনার ডাটাবেস খুলুন
  3. ভূমিকা ট্যাব / ড্রপডাউন খুলুন
  4. আপনার ব্যবহারকারী নির্বাচন করুন
  5. ডান ট্যাবে 'অনুমতি ট্যাব' টিপুন
  6. আপনার স্কিমা ট্যাব টিপুন
  7. টেবিল ট্যাব / ড্রপডাউন টিপুন
  8. সমস্ত টেবিল নির্বাচন করুন
  9. সমস্ত প্রয়োজনীয় অনুমতি চেকবক্স নির্বাচন করুন (বা সমস্ত অনুদান টিপুন)
  10. সংরক্ষণ করুন টিপুন

-3

আমি একবার এই সমস্যার মুখোমুখি হয়েছিলাম। কেবলমাত্র একটি ব্যবহারকারীর ডাটাবেসকে একটি সুপারভাইজারে পরিবর্তন করুন এবং আপনার সমস্যাটি সমাধান করা হবে।

সুপারসারের সাথে ব্যবহারকারী মাইউজারকে পরিবর্তন করুন;


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