প্রথমত, কোয়েরি চালাতে আপনাকে ডাটাবেসের সাথে সংযোগ করতে সক্ষম হতে হবে। এটি দ্বারা অর্জন করা যেতে পারে
REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;
GRANT CONNECT
ON DATABASE database_name
TO user_name;
REVOKEপ্রয়োজনীয় কারণ
পাবলিক মূল শব্দটি ইঙ্গিত দেয় যে পরবর্তী সময়ে তৈরি করা যেতে পারে সেগুলি সহ সমস্ত ভূমিকার জন্য সুযোগগুলি দেওয়া হবে। পাবলিককে একটি স্পষ্টভাবে সংজ্ঞায়িত গোষ্ঠী হিসাবে ভাবা যেতে পারে যা সর্বদা সমস্ত ভূমিকা অন্তর্ভুক্ত করে। যে কোনও বিশেষ ভূমিকার জন্য এটি সরাসরি মঞ্জুর করা সুবিধাগুলির যোগফল, বর্তমানে যে কোনও ভূমিকায় এটির সদস্য, অনুমোদিত অধিকার এবং পাবলিককে দেওয়া অনুমোদিত বিশেষাধিকারের পরিমাণ থাকবে।
আপনি যদি সত্যই আপনার ব্যবহারকারীকে ডিএমএল বিবৃতিতে সীমাবদ্ধ রাখতে চান তবে আপনার আরও কিছু করার দরকার আছে:
REVOKE ALL
ON ALL TABLES IN SCHEMA public
FROM PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public
TO user_name;
এগুলি ধরে নেওয়া হয় যে আপনার কেবলমাত্র একটি স্কিমা থাকবে (যা ডিফল্টরূপে 'পাবলিক' নাম দেওয়া হয়েছে)।
জ্যাক ডগলাস যেমন উল্লেখ করেছেন, উপরেরটি কেবল ইতিমধ্যে বিদ্যমান সারণীগুলির জন্য বিশেষত্ব দেয়। ভবিষ্যতের টেবিলগুলির জন্য এটি অর্জন করতে আপনাকে ডিফল্ট সুযোগগুলি নির্ধারণ করতে হবে :
ALTER DEFAULT PRIVILEGES
FOR ROLE some_role -- Alternatively "FOR USER"
IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_name;
এখানে, some_roleএমন একটি ভূমিকা রয়েছে যা সারণীগুলি তৈরি করে, আর সেই সুযোগটি user_nameযিনি সুযোগ পান। এটি সংজ্ঞায়িত করে আপনাকে some_roleএটির সদস্য হিসাবে অথবা লগ ইন করতে হবে।
এবং, অবশেষে, সিকোয়েন্সগুলির জন্য আপনাকে একই কাজটি করতে হবে (এটি নির্দেশ করার জন্য প্লাইডফ্যানকে ধন্যবাদ) - এখানে এটি USAGEআপনার প্রয়োজন বিশেষত্ব ।
FOR some_roleপরে তৈরি হওয়া আমার টেবিলগুলির জন্য এটি তৈরি করতে আমি যে মূল অংশটি অনুপস্থিত ছিল তা ছিল। তবে আমার হিসাবে লগ ইন করতে হবে নাsome_role, আমি ডিফল্ট অ্যাডমিনpostgresব্যবহারকারী হিসাবে ক্যোয়ারী চালিয়ে দিলে এটিও কাজ করে ।