পোস্টগ্র্রেএসকিউএল-তে একটি গ্রুপের ভূমিকাতে ডিবিতে একটি নির্দিষ্ট স্কিমায় সমস্ত প্রদান করুন


98

পোস্টগ্রেএসকিউএল 9.0 ব্যবহার করে আমার "স্টাফ" নামে একটি গ্রুপ ভূমিকা রয়েছে এবং একটি বিশেষ স্কিমাতে টেবিলগুলিতে এই ভূমিকার জন্য সমস্ত (বা নির্দিষ্ট) বিশেষাধিকার প্রদান করতে চাই। নিচের কোনটিই কাজ করে না

GRANT ALL ON SCHEMA foo TO staff;
GRANT ALL ON DATABASE mydb TO staff;

"স্টাফ" এর সদস্যরা স্কিমা "foo" বা (দ্বিতীয় কমান্ডের ক্ষেত্রে) স্বতন্ত্র টেবিলগুলিতে ডাটাবেসের যে কোনও সারণীতে সুনির্দিষ্ট বা সুনির্দিষ্টভাবে যদি আপনি সমস্ত নির্দিষ্ট মঞ্জুর না করেন তবে আলাদাভাবে নির্বাচন করতে বা আপডেট করতে অক্ষম ।

আমি কী করতে পারি আমার এবং আমার ব্যবহারকারীদের জীবনকে সহজ করে তুলতে?

আপডেট করুন: এটা মূর্ত আউট সাহায্যে serverfault.com উপর একটি অনুরূপ প্রশ্ন

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;

উত্তর:


128

প্রদত্ত স্কিমাতে বিদ্যমান বিদ্যমান সারণীর জন্য বিশেষাধিকার নির্ধারণের জন্য আপনি শর্টহ্যান্ড খুঁজে পেয়েছেন । ম্যানুয়ালটি স্পষ্ট করে :

(তবে দ্রষ্টব্য যাতে দর্শন এবং বিদেশী সারণীALL TABLES অন্তর্ভুক্ত বলে মনে করা হয় )।

বোল্ড জোর আমার। serialকলামগুলি nextval()কলাম ডিফল্ট হিসাবে ক্রম অনুসারে প্রয়োগ করা হয় এবং ম্যানুয়ালটি উদ্ধৃত করে :

সিকোয়েন্সগুলির জন্য, এই অধিকারটি ব্যবহার করে currvalএবং nextvalফাংশনগুলিকে অনুমতি দেয় ।

সুতরাং যদি serialকলামগুলি থাকে তবে আপনি সিকোয়েন্সগুলিতেUSAGE (বা ALL PRIVILEGES) মঞ্জুরিও দিতে চাইবেন

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

দ্রষ্টব্য: পোস্টগ্রিস 10 বা তার পরে শনাক্তকরণের কলামগুলি অন্তর্নিহিত ক্রমগুলি ব্যবহার করে যার অতিরিক্ত সুবিধাগুলির প্রয়োজন হয় না। ( serialকলামগুলি আপগ্রেড করার বিষয়ে বিবেচনা করুন ))

নতুন জিনিস সম্পর্কে কি ?

আপনি DEFAULT PRIVILEGESব্যবহারকারী বা স্কিমার জন্যও আগ্রহী হবেন :

ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

এটি ভবিষ্যতে স্বয়ংক্রিয়ভাবে তৈরি করা সামগ্রীর জন্য সুবিধা নির্ধারণ করে - তবে প্রাক-বিদ্যমান বস্তুর জন্য নয়।

ডিফল্ট সুবিধাগুলি কেবলমাত্র লক্ষ্যযুক্ত ব্যবহারকারী ( FOR ROLE my_creating_role) দ্বারা তৈরি বস্তুগুলিতে প্রয়োগ করা হয় । যদি সেই ধারাটি বাদ দেওয়া হয়, তবে এটি বর্তমান ব্যবহারকারীকে কার্যকর করাতে ডিফল্ট হয় ALTER DEFAULT PRIVILEGES। স্পষ্ট করে বলা:

ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

আরও মনে রাখবেন যে pgAdmin III- র সমস্ত সংস্করণে এসকিউএল ফলকে একটি সূক্ষ্ম বাগ আছে এবং এটি ডিফল্ট সুবিধাগুলি প্রদর্শন করে , যদিও সেগুলি বর্তমান ভূমিকার সাথে প্রয়োগ না করে। FOR ROLEএসকিউএল স্ক্রিপ্টটি অনুলিপি করার সময় ক্লজটি নিজেই সামঞ্জস্য করতে ভুলবেন না ।


4
ঠিক তাই আপনি আপনার পরামর্শ পোস্ট করার 10 মিনিটের পরে ইরভিনকে জানেন, আমার এটি দরকার ছিল। এটির মতো আপনি জানতেন যে আমি কী করতে যাচ্ছি ... একটি নতুন টেবিল তৈরি করুন এবং এটির সঠিক ছদ্মবেশ নেই এটি সন্ধান করুন। আপনার উত্তর উদ্ধার আসে।
পাঙ্কিস


চলমান যখন ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;এটি কী ডাটাবেস জানেন? SCHEMA fooবিভিন্ন ডাটাবেসে উপস্থিত থাকতে পারে?
J86

4
@ জে 86: কেবলমাত্র বর্তমান ডাটাবেসে প্রযোজ্য - যেখানে আদেশটি কার্যকর করা হয়।
এরউইন ব্র্যান্ডসেটেটার

4
@ এরউইন ব্র্যান্ডস্টেটর আমি কী ভবিষ্যতের টেবিলগুলি / অ্যাপ্লিকেশনগুলিতে সিকোয়েন্সগুলির জন্য অ্যাক্সেস দিতে পারি (পঠন-লিখন) তবে শর্ত থাকে যে সারণীগুলি অন্য কোনও ডেডিকেটেড মাইগ্রেশন_উজার দ্বারা স্বয়ংক্রিয়ভাবে তৈরি করা হবে (ফ্লাইওয়ে স্থানান্তর অ্যাপ্লিকেশন শুরুতে চালানো হবে)?
lexeme

45

আমার উত্তরটি সার্ভারফল্ট ডট কমের অনুরূপ ।

টু কনজারভেটিভ

আপনি যদি "সমস্ত সুযোগ সুবিধা" দেওয়ার চেয়ে রক্ষণশীল হতে চান তবে আপনি এর মতো আরও কিছু চেষ্টা করতে চাইতে পারেন to

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;

সেখানে ব্যবহার publicপ্রতিটি নতুন ডাটাবেস / ক্যাটালগের জন্য তৈরি ডিফল্ট স্কিমাটির নাম বোঝায়। আপনি যদি স্কিমা তৈরি করেন তবে নিজের নামের সাথে প্রতিস্থাপন করুন।

স্কিমা অ্যাক্সেস

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

পোস্টগ্র্রেস ব্যবহার করার সময় আপনি এই প্রয়োজনীয়তাটি লক্ষ্য করবেন না। ডিফল্টরূপে প্রতিটি ডাটাবেসের একটি প্রথম স্কিমার নাম থাকে public। এবং ডিফল্টরূপে প্রতিটি ব্যবহারকারীর সেই নির্দিষ্ট স্কিমায় স্বয়ংক্রিয়ভাবে "ব্যবহার" অধিকার দেওয়া হয়েছে। অতিরিক্ত স্কিমা যোগ করার সময়, আপনাকে অবশ্যই স্পষ্টভাবে ব্যবহারের অধিকার প্রদান করতে হবে।

GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;

থেকে উদ্ধৃতাংশ Postgres ডক :

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

আরও আলোচনার জন্য প্রশ্নটি দেখুন, স্ক্যামার উপর অনুদানের ব্যবহারটি কী করে? । পোস্টগ্রিজ বিশেষজ্ঞ ক্রেগ রিঞ্জার দ্বারা উত্তরটিতে বিশেষ মনোযোগ দিন

ভবিষ্যতে বনাম বিদ্যমান অবজেক্টস

এই আদেশগুলি কেবল বিদ্যমান বস্তুগুলিকেই প্রভাবিত করে। আপনি ভবিষ্যতে যে টেবিলগুলি তৈরি করেন এবং যেমন উপরে আপনি এই লাইনগুলি পুনরায় সম্পাদন না করেন ততক্ষণ ডিফল্ট সুযোগ সুবিধা পান। ভবিষ্যতের বস্তুগুলিকে প্রভাবিত করে ডিফল্টগুলি পরিবর্তন করতে এরউইন ব্র্যান্ডসেট্টারের অন্যান্য উত্তর দেখুন ।


4
উপরোক্ত দুটি অনুদানের পাশাপাশি আরও একটি অনুদানের দরকার: স্কেমা পাবলিক টু কারো ব্যবহারকারীর উপর অনুদান ব্যবহার;
নিং লিউ

4
@ নিংলিউ অনুদানের ব্যবহার দেখানোর জন্য এবং আমাকে তা শেখানোর জন্য অনেক ধন্যবাদ। আমি উত্তরে একটি বিভাগ যুক্ত করেছি।
বাসিল বাউরক

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