مدیریت کاربران و دسترسی‌ها

هر کلاستر PostgreSQL با کاربر مدیریتی sdb_admin و پایگاه‌داده پیش‌فرض postgres ساخته می‌شود. به‌جای استفاده مستقیم از کاربر مدیریتی در اپلیکیشن‌ها، توصیه می‌شود کاربران جدید با حداقل دسترسی لازم ایجاد کنید.

برای اتصال اولیه به کلاستر، مستند اتصال به پایگاه‌داده را مطالعه کنید.

توجه

تنها در شرایطی دستوارات زیر را اجرا کنید که کاملا با عملکرد آن آشنایی دارید.

ایجاد کاربر و پایگاه‌داده

-- Create new database
CREATE DATABASE myapp;
 
-- Create new user
CREATE USER myuser WITH PASSWORD 'secure_password';
 
-- Grant connection and ALL privileges to the user
GRANT CONNECT ON DATABASE myapp TO myuser;
GRANT ALL PRIVILEGES ON DATABASE myapp TO myuser;

ایجاد کاربر فقط-خواندن (Read-Only)

برای ایجاد کاربری که فقط بتواند داده‌ها را بخواند:

-- Connect to database
\c myapp
 
-- Revoke default access
REVOKE ALL ON DATABASE myapp FROM readonly_user;
GRANT CONNECT ON DATABASE myapp TO readonly_user;
 
-- Grant read-only access to current tables
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
 
-- Grant read-only access to the future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT ON TABLES TO readonly_user;

اعطای دسترسی خواندن و نوشتن

برای کاربری که هم بتواند بخواند و هم بنویسد، به‌جای SELECT از SELECT, INSERT, UPDATE, DELETE استفاده کنید:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_user;

رفع خطای permission denied for schema public

اگر کاربر جدید هنگام ایجاد جدول یا دسترسی به schema با خطای زیر مواجه شد:

ERROR: permission denied for schema public

دسترسی USAGE و CREATE را روی schema public اعطا کنید:

GRANT USAGE, CREATE ON SCHEMA public TO myuser;

یا برای دسترسی کامل:

GRANT ALL PRIVILEGES ON SCHEMA public TO myuser;

برای تأیید دسترسی‌های schema:

SELECT grantee, privilege_type
FROM information_schema.role_schema_grants
WHERE schema_name = 'public' AND grantee = 'myuser';

بررسی دسترسی‌های کاربر

-- List users and roles
\du
 
-- List user privieges
SELECT table_catalog, table_schema, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'myuser';

حذف کاربر

-- Revoke user access
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM myuser;
REVOKE ALL ON DATABASE myapp FROM myuser;
 
-- Drop user
DROP USER myuser;

توجه

  • کاربر sdb_admin برای مدیریت کلاستر لازم است؛ آن را حذف یا غیرفعال نکنید.
  • دستورات مدیریت کاربر را باید برای هر پایگاه‌داده جداگانه اجرا کنید.

نکات مهم

  • برای اپلیکیشن‌های پروداکشن از کاربر جداگانه با دسترسی محدود استفاده کنید.
  • برای عملیات خواندن، از Reader Endpoint و کاربر فقط-خواندن استفاده کنید.
  • پس از تغییر گذرواژه کاربر، رشته اتصال اپلیکیشن‌ها را به‌روزرسانی کنید.