در پایگاه داده PostgreSQL، مفهوم ROLE (نقش) برای مدیریت دسترسیها و مجوزها استفاده میشود. نقشها در PostgreSQL بهعنوان ابزاری برای کنترل اینکه چه کسی میتواند به چه منابعی دسترسی داشته باشد و چه عملیاتی را انجام دهد، عمل میکنند. برخلاف برخی سیستمهای دیگر که بین "کاربر" و "گروه" تمایز قائل میشوند، PostgreSQL از یک مفهوم واحد به نام ROLE استفاده میکند که میتواند هم بهعنوان کاربر (User) و هم بهعنوان گروه (Group) عمل کند.
کاربردهای اصلی `ROLE` در PostgreSQL
- مدیریت دسترسیها: نقشها به شما اجازه میدهند تا مجوزهای خاصی (مانند `SELECT`، `INSERT`، `UPDATE`، `DELETE`) را به جداول، دیتابیسها، یا سایر اشیاء پایگاه داده اختصاص دهید. مثلاً میتوانید یک نقش ایجاد کنید که فقط اجازه خواندن دادهها را داشته باشد و نقش دیگری که اجازه تغییر دادهها را هم داشته باشد.
- وراثت (Inheritance): یک نقش میتواند از نقشهای دیگر ارثبری کند. این یعنی اگر نقش `A` به نقش `B` دسترسی داشته باشد، هر مجوزی که به `B` داده شده بهطور خودکار به `A` هم منتقل میشود (در صورتی که ویژگی `INHERIT` فعال باشد). مثال: اگر نقش `read_only` اجازه خواندن جداول را داشته باشد و نقش `user1` از `read_only` ارث ببرد، `user1` هم همان دسترسیها را خواهد داشت.
- ایجاد کاربران و گروهها: میتوانید یک نقش را بهعنوان یک کاربر (با قابلیت ورود به سیستم) یا یک گروه (بدون قابلیت ورود) تعریف کنید. برای کاربر: از ویژگی `LOGIN` استفاده میشود. برای گروه: معمولاً بدون `LOGIN` تعریف میشود و فقط برای مدیریت مجوزها به کار میرود.
- کنترل ویژگیها (Attributes): نقشها میتوانند ویژگیهایی مثل `SUPERUSER`، `CREATEDB` (ایجاد دیتابیس)، `CREATEROLE` (ایجاد نقش)، یا `LOGIN` داشته باشند. مثلاً یک نقش `admin` میتواند `SUPERUSER` باشد و کنترل کامل سیستم را داشته باشد.
- انعطافپذیری در مدیریت: میتوانید نقشها را بهصورت سلسلهمراتبی سازماندهی کنید. مثلاً نقشهای `developer`، `analyst` و `manager` را تعریف کنید و هر کدام را به نقشهای زیرمجموعه یا بالادست متصل کنید.
مثال عملی:
فرض کنید میخواهید یک نقش برای کاربرانی که فقط باید دادهها را بخوانند ایجاد کنید:
-- Create a read_only role, no login
CREATE ROLE read_only;
-- Allow the role to read all schema
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only;
-- Create a new user (role with login)
CREATE ROLE ali WITH LOGIN PASSWORD '123456';
-- Grant the role read_only to ali
GRANT read_only TO ali;
حالا کاربر `ali` میتواند به سیستم وارد شود و فقط دادهها را بخواند، بدون اینکه بتواند تغییری ایجاد کند.
دستورات مهم مرتبط با ROLE
- `CREATE ROLE`: برای ایجاد نقش جدید.
- `ALTER ROLE`: برای تغییر ویژگیهای یک نقش (مثل رمز عبور یا مجوزها).
- `DROP ROLE`: برای حذف یک نقش.
- `GRANT`: برای اعطای مجوز یا عضویت در نقش دیگر.
- `REVOKE`: برای لغو مجوزها یا عضویت.
نکته: نقشها در PostgreSQL بسیار انعطافپذیر هستند و به شما اجازه میدهند سیستم مجوزها را بهصورت دقیق و متناسب با نیازهای پروژه تنظیم کنید. همیشه بهتر است از اصل "حداقل دسترسی" (Least Privilege) پیروی کنید و فقط مجوزهای ضروری را به هر نقش اختصاص دهید.