PostgreSQL 角色和权限完整教程
PostgreSQL 角色和权限完整教程

PostgreSQL 中的角色和权限完整教程

本文将全面而实用地教您如何在 PostgreSQL 上创建角色、授予权限、管理权限、创建组角色以及控制访问。.
0 股票
0
0
0
0

介绍

PostgreSQL 是一款功能强大的企业级数据库,它拥有先进的用户和访问级别管理系统。在 PostgreSQL 中,不存在传统意义上的“用户”概念;一切皆为单一实体。 角色 它可以表现为单个用户或用户组的行为。.
正确使用角色和权限可以提高安全性,更好地管理数据库,并防止未经授权的访问——尤其是在 VPS 上运行 PostgreSQL 时。.


1. 使用角色和权限的前提条件

首先,您必须具备以下条件:

  • Linux VPS(例如 Ubuntu 20.04 或 22.04)

  • 已安装 PostgreSQL

  • root 或 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 و REVOKE کنترل کامل روی جدول‌ها، اسکیماها، دیتابیس‌ها و عملکردها را فراهم می‌کنند.

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢