vollständiges Tutorial zu Rollen und Berechtigungen in PostgreSQL
vollständiges Tutorial zu Rollen und Berechtigungen in PostgreSQL

Vollständiges Tutorial zu Rollen und Berechtigungen in PostgreSQL

In diesem Artikel erfahren Sie auf umfassende und praxisnahe Weise, wie Sie Rollen erstellen, Berechtigungen erteilen, Berechtigungen verwalten, Gruppenrollen erstellen und den Zugriff auf PostgreSQL steuern.
0 Aktien
0
0
0
0

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 با یک نقش دیگر

۱) ابتدا رمز نقش را تنظیم کنید:

\password app_user

۲) خروج از psql:

\q

۳) ورود به عنوان نقش جدید:

psql -U app_user -d postgres -h 127.0.0.1 -W

۸. ایجاد جدول جهت تست مجوزها

CREATE TABLE employees ( id serial PRIMARY KEY, name varchar(50), created_at timestamp DEFAULT NOW() );

۹. اعطای مجوز (GRANT) در PostgreSQL

دادن یک مجوز خاص:

GRANT SELECT ON employees TO app_user;

اجازه INSERT:

GRANT INSERT ON employees TO app_user;

دادن ALL Privileges:

GRANT ALL ON employees TO app_user;

دادن دسترسی به همه کاربران (Public):

GRANT SELECT ON employees TO PUBLIC;

۱۰. مشاهده مجوزهای هر جدول

\z employees

۱۱. پس‌گرفتن مجوزها (REVOKE)

پس گرفتن مجوز Insert از نقش خاص:

REVOKE INSERT ON employees FROM app_user;

پس گرفتن تمام مجوزها:

REVOKE ALL ON employees FROM app_user;

حذف مجوز عمومی:

REVOKE SELECT ON employees FROM PUBLIC;

۱۲. نقش گروهی (Group Role) در PostgreSQL

نقش گروهی یعنی یک Role که سایر Role ها عضو آن هستند—مثل گروه‌های لینوکسی.

۱) ساخت Role گروه:

CREATE ROLE dev_team;

۲) افزودن کاربران به گروه:

GRANT dev_team TO app_user; GRANT dev_team TO backend_user;

۳) بررسی عضویت:

\du

۴) استفاده از نقش گروه:

SET ROLE dev_team;

از این لحظه تمام مجوزهایی که dev_team دارد فعال می‌شود.

۵) ارث‌بری خودکار با INHERIT

ALTER ROLE app_user WITH INHERIT;

۱۳. انتقال مالکیت اشیا قبل از حذف Role

اگر می‌خواهید یک نقش را حذف کنید ولی جدول یا دیتابیس متعلق به آن است:

تغییر مالک جدول:

ALTER TABLE employees OWNER TO postgres;

سپس حذف نقش:

DROP ROLE dev_team;

۱۴. نکات امنیتی مهم هنگام استفاده از Roles در VPS

  • هر سرویس (Backend، Cronjob، Worker) باید Role جداگانه داشته باشد.

  • به عنوان یک نکته امنیتی از نقش‌های با دسترسی کم استفاده کنید.

  • در معماری پایگاه داده به هیچ اپلیکیشنی نقش superuser ندهید.

  • رمز نقش‌ها باید قوی و expire-دار باشد.

  • برای مثال همیشه از گروه‌ها برای مدیریت دسترسی استفاده کنید.


جمع‌بندی

به صورت عملی در PostgreSQL همه چیز بر پایه Role است. شما می‌توانید کاربران، گروه‌ها، نقش‌های سیستمی و نقش‌های اپلیکیشنی را با یک مدل مدیریتی واحد بسازید. همچنین ابزارهای GRANT Und REVOKE کنترل کامل روی جدول‌ها، اسکیماها، دیتابیس‌ها و عملکردها را فراهم می‌کنند.

مدیریت صحیح Role ها در PostgreSQL مخصوصاً روی VPS بسیار اهمیت دارد، زیرا امنیت و پایداری کل سیستم دیتابیس شما به آن وابسته است.

[Gesamt: 0   Durchschnitt: 0/5]
Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte Ihnen auch gefallen