PostgreSQL ডেটাবেসে Role এবং Privileges ম্যানেজমেন্ট একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়, যা ডেটাবেসে নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল নিশ্চিত করে। Role গুলি ব্যবহারকারীদের অ্যাক্সেস এবং অনুমতি নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয়, এবং Privileges নির্ধারণ করে কোন রিসোর্স বা অপারেশনগুলি ব্যবহারকারী (Role) করতে পারবে।
1. Roles in PostgreSQL
PostgreSQL তে Role হলো একটি সত্তা (entity) যা বিভিন্ন অনুমতি (permissions) এবং অ্যাক্সেস নিয়ন্ত্রণ করতে ব্যবহৃত হয়। Role হতে পারে ব্যবহারকারী (User) বা গ্রুপ (Group), যা টেবিল, কলাম, ডেটাবেস বা অন্যান্য অবজেক্টে বিভিন্ন অ্যাক্সেস নিয়ন্ত্রণ করে।
a. Role তৈরি করা (Creating a Role)
PostgreSQL তে নতুন একটি Role তৈরি করতে CREATE ROLE কমান্ড ব্যবহার করা হয়। একটি Role নামকরণ এবং বিভিন্ন ধরনের অনুমতি নির্ধারণ করা হয়:
CREATE ROLE admin WITH LOGIN PASSWORD 'securepassword';
এটি একটি admin নামক Role তৈরি করবে, যার একটি পাসওয়ার্ড থাকবে এবং সে লগইন করতে পারবে।
b. Role-কে Superuser হিসেবে তৈরি করা (Creating a Superuser Role)
একটি Superuser Role এমন একটি Role যা সমস্ত অনুমতি এবং অ্যাক্সেস অধিকার রাখে। এটি ডেটাবেসের সমস্ত কাজ করতে পারে।
CREATE ROLE super_admin WITH LOGIN SUPERUSER PASSWORD 'superpassword';
এটি একটি super_admin নামক Role তৈরি করবে, যা Superuser অনুমতি প্রদান করবে।
c. Role-এর মধ্যে একটি গ্রুপ তৈরি করা (Creating a Role as a Group)
PostgreSQL এ Role গুলি গ্রুপ হিসেবে ব্যবহার করা যেতে পারে। আপনি একাধিক Role কে একটি গ্রুপে যুক্ত করতে পারেন এবং তারপর সেই গ্রুপের উপর সাধারণ অনুমতি প্রদান করতে পারেন।
CREATE ROLE group_admin;
GRANT group_admin TO admin;
এটি group_admin নামক একটি Role তৈরি করবে এবং admin Role-কে এই গ্রুপে যুক্ত করবে।
2. Privileges in PostgreSQL
Privileges বা অনুমতি হল ডেটাবেসের এক্সেস কন্ট্রোলের অংশ। এগুলি Role-কে নির্দিষ্ট কাজ করার অনুমতি দেয়, যেমন টেবিল বা ডেটাবেসে সন্নিবেশ করা, আপডেট করা, অথবা ডেটা মুছে ফেলা।
a. Privilege Types
PostgreSQL তে বিভিন্ন ধরনের Privileges রয়েছে, যা টেবিল, ডেটাবেস বা অন্য অবজেক্টের জন্য নির্ধারণ করা হয়। কিছু সাধারণ Privileges হল:
- SELECT: টেবিল বা ভিউ থেকে ডেটা পড়ার অনুমতি।
- INSERT: টেবিলে নতুন রেকর্ড সন্নিবেশ করার অনুমতি।
- UPDATE: টেবিলের বিদ্যমান রেকর্ড আপডেট করার অনুমতি।
- DELETE: টেবিল থেকে রেকর্ড মুছে ফেলার অনুমতি।
- ALL PRIVILEGES: সমস্ত অনুমতি (SELECT, INSERT, UPDATE, DELETE)।
- USAGE: স্কিমা বা সিকোয়েন্সের ওপর অ্যাক্সেস।
b. Granting Privileges (Privileges প্রদান করা)
GRANT কমান্ড ব্যবহার করে একটি Role কে নির্দিষ্ট Privileges প্রদান করা হয়।
GRANT SELECT, INSERT ON students TO admin;
এটি admin Role কে students টেবিলের উপর SELECT এবং INSERT Privileges প্রদান করবে।
c. Revoking Privileges (Privileges প্রত্যাহার করা)
REVOKE কমান্ড ব্যবহার করে Role থেকে নির্দিষ্ট Privileges প্রত্যাহার করা হয়।
REVOKE INSERT ON students FROM admin;
এটি admin Role থেকে students টেবিলের উপর INSERT Privilege প্রত্যাহার করবে।
3. Assigning Roles to Users
PostgreSQL তে একটি Role (বা গ্রুপ) অন্য Role (বা ইউজার) এর কাছে অ্যাসাইন করা যায়, যাতে তারা সেই Role এর মাধ্যমে নির্দিষ্ট Privileges পায়।
GRANT group_admin TO user1;
এটি user1 কে group_admin গ্রুপে যুক্ত করবে, এবং group_admin এর সমস্ত Privileges পাবেন।
4. Role এর Attributes (Attributes of Roles)
PostgreSQL তে Roles-এর কিছু গুরুত্বপূর্ণ অ্যাট্রিবিউট রয়েছে, যা Role কনফিগারেশনে সহায়তা করে:
- LOGIN: এই Role কে ডেটাবেসে লগইন করার অনুমতি দেয়।
- SUPERUSER: এই Role কে ডেটাবেসের সবকিছুতে পূর্ণ অ্যাক্সেস প্রদান করে।
- CREATEDB: এই Role কে নতুন ডেটাবেস তৈরি করার অনুমতি দেয়।
- CREATEROLE: এই Role কে নতুন Role তৈরি করার অনুমতি দেয়।
- INHERIT: এই Role এর অধীনে থাকা অন্যান্য Role-এও তাদের অনুমতি থাকবে।
- NOINHERIT: এই Role এর অধীনে থাকা Role-এ তাদের অনুমতি থাকবে না।
Role তৈরি করার সময় অ্যাট্রিবিউট দেওয়া:
CREATE ROLE developer WITH LOGIN CREATEDB INHERIT PASSWORD 'password';
এটি একটি developer Role তৈরি করবে যার কাছে ডেটাবেস তৈরি করার অনুমতি রয়েছে এবং এটি অন্যান্য Role থেকে অনুমতি পাবে।
5. Example of Role and Privileges Management
ধরা যাক, আমরা দুটি Role তৈরি করতে চাই:
- admin: সমস্ত Privileges সহ একটি সুপার ব্যবহারকারী।
- user: শুধুমাত্র SELECT করার অনুমতি সহ।
-- admin Role তৈরি করা
CREATE ROLE admin WITH LOGIN SUPERUSER PASSWORD 'adminpassword';
-- user Role তৈরি করা
CREATE ROLE user WITH LOGIN PASSWORD 'userpassword';
-- user Role কে students টেবিলের উপর SELECT Privilege প্রদান করা
GRANT SELECT ON students TO user;
-- admin Role কে সমস্ত Privileges প্রদান করা
GRANT ALL PRIVILEGES ON students TO admin;
এখানে, admin Role সম্পূর্ণ পারমিশন পাবে, এবং user শুধু students টেবিল থেকে ডেটা দেখতে পারবে।
6. Managing Database Ownership
PostgreSQL এ আপনি OWNERSHIP পরিবর্তন করতে পারেন, যা নির্দিষ্ট টেবিল বা ডেটাবেসের মালিকানা পরিবর্তন করে।
Example: Changing Ownership
ALTER TABLE students OWNER TO admin;
এটি students টেবিলের মালিকানা admin Role-কে প্রদান করবে।
7. Checking Role Privileges
PostgreSQL তে pg_roles এবং pg_catalog ভিউ ব্যবহার করে আপনি একটি Role এর Privileges পরীক্ষা করতে পারেন।
SELECT * FROM pg_roles;
এটি সব Role এর তথ্য দেখাবে, এবং তাদের অ্যাট্রিবিউটগুলি (যেমন LOGIN, SUPERUSER, CREATEDB ইত্যাদি)।
সারাংশ
- Role গুলি PostgreSQL এ ব্যবহারকারীর অ্যাক্সেস এবং অনুমতি কন্ট্রোল করার জন্য ব্যবহৃত হয়।
- Privileges নির্ধারণ করে একটি Role কোন কাজ করতে পারবে (যেমন SELECT, INSERT, UPDATE, DELETE ইত্যাদি)।
- GRANT এবং REVOKE কমান্ডের মাধ্যমে Role গুলিকে নির্দিষ্ট Privileges প্রদান বা প্রত্যাহার করা হয়।
- Roles কে Login, Superuser, Create DB, Create Role ইত্যাদি বিভিন্ন অ্যাট্রিবিউট দিয়ে কনফিগার করা যেতে পারে।
- Role-based Access Control (RBAC) ব্যবহারের মাধ্যমে PostgreSQL ডেটাবেসের নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোল কার্যকরভাবে পরিচালনা করা যায়।
PostgreSQL তে Role এবং Privilege ম্যানেজমেন্ট একটি শক্তিশালী পদ্ধতি, যা ডেটাবেস অ্যাক্সেস এবং নিরাপত্তা নিয়ন্ত্রণের জন্য অপরিহার্য।
Read more