পোস্টগ্রেস্কল: ডেটাবেসের সমস্ত ব্যক্তিগত অনুমোদন কী করে?


60

আমি একটি নতুন পোস্টগ্রিজ ব্যবহারকারীকে (মালিক নয়) একটি প্রদত্ত ডাটাবেসের সমস্ত টেবিলের সমস্ত সুযোগ-সুবিধা দেওয়ার চেষ্টা করছি। মনে হয় যে GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;এটি না। কমান্ড সাফল্যের সাথে চালানোর পরে (পোস্টগ্রিজ ব্যবহারকারী হিসাবে), আমি নিম্নলিখিতটি নতুন_উজার হিসাবে পেয়েছি:

$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR:  permission denied for relation a_table_in_my_db

দুটি প্রশ্ন:

1) উপরের কমান্ডটি কী করবে, তারপরে, আমার_ডিবিতে সমস্ত টেবিলে সমস্ত অনুমতি না দিলে?

২) কোনও ব্যবহারকারীকে সমস্ত টেবিলের সমস্ত অনুমতি দেওয়ার সঠিক উপায় কী? (ভবিষ্যতে তৈরি সমস্ত টেবিল সহ)

উত্তর:


80

আপনার প্রশ্নের উত্তরগুলি অনলাইনে পোস্টগ্রেএসকিউএল 8.4 ডক্স থেকে আসে ।

  1. GRANT ALL PRIVILEGES ON DATABASEমঞ্জুর CREATE, CONNECTএবং TEMPORARYএকটি ভূমিকা একটি ডাটাবেস উপর বিশেষাধিকার (ব্যবহারকারীরা সঠিকভাবে হিসেবে উল্লেখ করা হয় ভূমিকা )। এই অধিকারগুলির মধ্যে কোনওটিই কোনও টেবিল থেকে ডেটা পড়ার জন্য কোনও ভূমিকার অনুমতি দেয় না; SELECTটেবিলে সুযোগ সুবিধার জন্য এটি প্রয়োজন।

  2. আমি নিশ্চিত নই যে কোনও ভূমিকাতে সমস্ত টেবিলে সমস্ত সুযোগ-সুবিধাগুলি দেওয়ার একটি "যথাযথ" উপায় আছে is প্রদত্ত ভূমিকার কোনও টেবিলে সমস্ত সুযোগ রয়েছে তা নিশ্চিত করার সর্বোত্তম উপায় হ'ল ভূমিকাটি সারণীর মালিকানাধীন কিনা তা নিশ্চিত করা । ডিফল্টরূপে, প্রতিটি সৃজিত প্রতিটি বস্তু ভূমিকার মালিকানাধীন যা এটি তৈরি করেছে, সুতরাং আপনি যদি কোনও ভূমিকা কোনও টেবিলে সমস্ত সুযোগসুবিধা পেতে চান তবে এটি তৈরি করতে সেই ভূমিকাটি ব্যবহার করুন।

    PostgreSQL 9.0 নীচের বাক্য গঠনটি প্রবর্তন করে যা আপনি যা চান প্রায় :

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

    ঘষাঘটিত হ'ল আপনি যদি ডিফল্ট "পাবলিক" স্কিমার বাইরে স্কিমে টেবিল তৈরি করেন তবে এটি GRANTতাদের জন্য প্রযোজ্য হবে না। আপনি যদি সর্বজনীন স্কিমা ব্যবহার না করেন তবে আপনাকে GRANTআলাদাভাবে আলাদাভাবে সেই স্কিমার সুবিধা পেতে হবে।


1
একটি ডাটাবেসের একাধিক মালিক থাকতে পারে? যদি তা হয় তবে অন্য মালিককে কীভাবে যুক্ত করবেন?
আরজেড

না, আমি মনে করি না যে একটি ডাটাবেসে একাধিক মালিক থাকতে পারে, আপনি তাদের মালিকের সমস্ত
লেখাগুলি দিতে পারেন

15
ভুলে যাবেন না যে আপনাকে সিকোয়েন্সগুলিতে একই করতে হবে: GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user;বা আপনি কোনও রেকর্ড সন্নিবেশ করতে পারবেন না।

এমনকি যদি এটি কাজ না করে তবে চেষ্টা করে দেখুন: = স্কাইমা পাবলিকের সমস্ত টেবিলে সমস্ত ব্যক্তিগত বিজ্ঞাপন আপনার ব্যবহারকারীকে প্রদান করুন;
কৌস্তুব

10

ডাটাবেস মালিক হিসাবে কাজ করতে একাধিক লগইন সেট আপ করা সম্ভব:

  • মালিক হিসাবে কাজ করতে একটি "নোলোগিন" ভূমিকা তৈরি করুন: create role dbowner nologin
  • আপনার ডাটাবেসের মালিককে এটিতে পরিবর্তন করুন: alter database mydb owner dbowner
  • আপনার সমস্ত লগইনগুলি এই নতুন ভূমিকার জন্য প্রদান করুন: grant dbowner to user1, user2

এখন, যদি ব্যবহারকারী 1 বা ব্যবহারকারী 2 লগইন হয় তবে তাদের "মাইডিবি" তে সমস্ত অনুমানের দরকার নেই।

তবে আমি এই সমাধানটি সাবধানতার সাথে বিবেচনা করব। আপনার ওয়েব অ্যাপ্লিকেশনটি যখন এই স্কিমার আপডেট হয় তখন অতিরিক্ত অনুদান তৈরির ব্যথা এড়াতে এই লগিনগুলির মধ্যে একটি ব্যবহার করা লোভনীয় তবে আপনি এইভাবে সুরক্ষার একটি খুব দরকারী ফর্ম সরিয়ে ফেলছেন। আপনি যদি সত্যিই একাধিক "অ্যাডমিন" চান তবে উপরের সমাধানটি ব্যবহার করুন, তবে আপনার "সাধারণ ব্যবহার" অ্যাপ্লিকেশনটির জন্য লগইন করার জন্য উপরের "স্কিমাতে সমস্ত টেবিলে সমস্ত সুযোগ প্রদান করুন ..." প্যাটার্নটির সাথে আঁকুন।


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