Introduction
PostgreSQL is a powerful, enterprise-grade database that has an advanced system for managing users and access levels. In PostgreSQL, there is no such thing as a “User” in the traditional sense; everything is a single entity. Role which can have the behavior of a user or a group.
Proper use of roles and permissions increases security, better manages databases, and prevents unwanted access—especially when running PostgreSQL on a VPS.
1. Prerequisites for working with Roles and Permissions
To get started, you must have the following:
A Linux VPS (like Ubuntu 20.04 or 22.04)
PostgreSQL installed
Root or sudo user access
Basic introduction to the command line
Log in to the postgres account:
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 و REVOKE کنترل کامل روی جدولها، اسکیماها، دیتابیسها و عملکردها را فراهم میکنند.
مدیریت صحیح Role ها در PostgreSQL مخصوصاً روی VPS بسیار اهمیت دارد، زیرا امنیت و پایداری کل سیستم دیتابیس شما به آن وابسته است.









