Einführung
PostgreSQL یک دیتابیس قدرتمند و Enterprise-Grade است که سیستم پیشرفتهای برای مدیریت کاربران و سطح دسترسیها دارد. در PostgreSQL چیزی تحت عنوان “User” به شکل سنتی وجود ندارد؛ همه چیز یک Role است که میتواند رفتار یک کاربر یا یک گروه را داشته باشد.
استفاده صحیح از نقشها و دسترسیها باعث افزایش امنیت، مدیریت بهتر دیتابیسها و جلوگیری از دسترسیهای ناخواسته میشود—بهخصوص زمانی که PostgreSQL روی یک VPS اجرا میشود..
۱. پیشنیازهای کار با Roles و Permissions
برای شروع کار باید موارد زیر فراهم باشد:
یک VPS لینوکسی (مثل Ubuntu 20.04 یا 22.04)
نصب بودن PostgreSQL
دسترسی کاربر ریشه یا sudo
آشنایی اولیه با خط فرمان
ورود به حساب postgres:
sudo -i -u postgres
psql۲. مشاهده نقشها در PostgreSQL
برای مشاهده تمام نقشهای موجود:
\duنمونه خروجی:
Role name | Attributes | Member of
-----------+----------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replicate | {}۳. ایجاد نقش (Role) جدید
روش اول: ساخت نقش از داخل psql
CREATE ROLE user_demo;این نقش هنوز اجازه ورود ندارد (Login Permission ندارد).
روش دوم: ساخت نقش با امکانات مشخص
مثال: نقش قابل ورود با رمزعبور:
CREATE ROLE user_demo WITH LOGIN PASSWORD 'StrongPass123';
روش سوم: ساخت نقش از طریق CLI
createuser --interactiveدر این روش از شما سؤال میشود:
آیا سوپر یوزر باشد؟
آیا اجازه ساخت دیتابیس داشته باشد؟
آیا اجازه ساخت Role داشته باشد؟
۴. حذف نقش در PostgreSQL
پاک کردن نقش:
DROP ROLE user_demo;برای جلوگیری از خطا در صورت نبودن نقش:
DROP ROLE IF EXISTS user_demo;۵. تنظیمات هنگام ساخت Role
PostgreSQL اجازه میدهد هنگام ساخت Role ویژگیهای مهم را تعیین کنید:
CREATE ROLE app_user
WITH LOGIN
CREATEDB
NOCREATEROLE
PASSWORD 'ExamplePass';مهمترین Attribute ها:
| ویژگی | توضیح |
|---|---|
| LOGIN | اجازه ورود به دیتابیس |
| CREATEDB | اجازه ساخت دیتابیس |
| CREATEROLE | اجازه ساخت نقش |
| INHERIT | ارثبری مجوز از نقش مادر |
| SUPERUSER | دسترسی کامل |
| PASSWORD | رمز عبور |
| VALID UNTIL | تنظیم تاریخ انقضا |
۶. تغییر تنظیمات Role با ALTER ROLE
اگر خواستید بعداً دسترسیهای یک نقش را تغییر دهید:
اضافه کردن امکان Login:
ALTER ROLE app_user WITH LOGIN;حذف امکان Login:
ALTER ROLE app_user WITH NOLOGIN;تغییر رمز:
ALTER ROLE app_user WITH PASSWORD 'NewPassword!';۷. ورود به PostgreSQL با یک نقش دیگر
۱) ابتدا رمز نقش را تنظیم کنید:
۲) خروج از psql:
۳) ورود به عنوان نقش جدید:
۸. ایجاد جدول جهت تست مجوزها
۹. اعطای مجوز (GRANT) در PostgreSQL
دادن یک مجوز خاص:
اجازه INSERT:
دادن ALL Privileges:
دادن دسترسی به همه کاربران (Public):
۱۰. مشاهده مجوزهای هر جدول
۱۱. پسگرفتن مجوزها (REVOKE)
پس گرفتن مجوز Insert از نقش خاص:
پس گرفتن تمام مجوزها:
حذف مجوز عمومی:
۱۲. نقش گروهی (Group Role) در PostgreSQL
نقش گروهی یعنی یک Role که سایر Role ها عضو آن هستند—مثل گروههای لینوکسی.
۱) ساخت Role گروه:
۲) افزودن کاربران به گروه:
۳) بررسی عضویت:
۴) استفاده از نقش گروه:
از این لحظه تمام مجوزهایی که dev_team دارد فعال میشود.
۵) ارثبری خودکار با INHERIT
۱۳. انتقال مالکیت اشیا قبل از حذف Role
اگر میخواهید یک نقش را حذف کنید ولی جدول یا دیتابیس متعلق به آن است:
تغییر مالک جدول:
سپس حذف نقش:
۱۴. نکات امنیتی مهم هنگام استفاده از Roles در VPS
هر سرویس (Backend، Cronjob، Worker) باید Role جداگانه داشته باشد.
به عنوان یک نکته امنیتی از نقشهای با دسترسی کم استفاده کنید.
در معماری پایگاه داده به هیچ اپلیکیشنی نقش
superuserندهید.رمز نقشها باید قوی و expire-دار باشد.
برای مثال همیشه از گروهها برای مدیریت دسترسی استفاده کنید.
جمعبندی
به صورت عملی در PostgreSQL همه چیز بر پایه Role است. شما میتوانید کاربران، گروهها، نقشهای سیستمی و نقشهای اپلیکیشنی را با یک مدل مدیریتی واحد بسازید. همچنین ابزارهای GRANT Und REVOKE کنترل کامل روی جدولها، اسکیماها، دیتابیسها و عملکردها را فراهم میکنند.
مدیریت صحیح Role ها در PostgreSQL مخصوصاً روی VPS بسیار اهمیت دارد، زیرا امنیت و پایداری کل سیستم دیتابیس شما به آن وابسته است.









