Thuta Learning
ရှာဖွေရန်
IntermediateData & Databasesbeginner

Roles၊ Privileges နှင့် Row Security

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Roles၊ Privileges နှင့် Row Security concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • နမူနာ SQL/command ကို ကိုယ်တိုင် run ပြီး output စစ်နိုင်ရန်
  • Tutorial Platform project နှင့် production scenario တွင် အသုံးချနိုင်ရန်

နားလည်ထားရမယ့် အချက်

PostgreSQL မှာ user နှင့် group နှစ်မျိုးလုံးကို role concept တစ်ခုတည်းဖြင့်စီမံပါတယ်။ Application runtime role ကို schema owner/superuser မဖြစ်စေဘဲ လိုသော CONNECT၊ USAGE၊ SELECT/INSERT/UPDATE သာပေးရပါတယ်။ Row-Level Security (RLS) က query ထဲ WHERE မေ့သွားလည်း row ownership policy ကို database မှာ enforce နိုင်ပေမယ့် owner/bypass behavior ကိုနားလည်ရပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

Migration role က DDL ကိုပိုင်ပြီး app runtime role က DML သာလုပ်နိုင်အောင်ခွဲမယ်။ Progress table တွင် session setting ထဲက current user ID နဲ့ကိုက်သော rows သာဖတ်/ပြင်ခွင့်ရှိသည့် RLS policy နမူနာထည့်မယ်။

အတူတူ စမ်းရေးကြည့်မယ်

sql
CREATE ROLE tutorial_app LOGIN PASSWORD 'replace-me';
GRANT CONNECT ON DATABASE tutorial_platform TO tutorial_app;
GRANT USAGE ON SCHEMA app TO tutorial_app;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA app TO tutorial_app;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA app TO tutorial_app;

ALTER TABLE app.lesson_progress ENABLE ROW LEVEL SECURITY;
CREATE POLICY progress_by_user ON app.lesson_progress
USING (EXISTS (
  SELECT 1 FROM app.enrollments e
  WHERE e.enrollment_id = lesson_progress.enrollment_id
    AND e.user_id = current_setting('app.user_id', true)::bigint
))
WITH CHECK (EXISTS (
  SELECT 1 FROM app.enrollments e
  WHERE e.enrollment_id = lesson_progress.enrollment_id
    AND e.user_id = current_setting('app.user_id', true)::bigint
));
You should see
App role က သတ်မှတ်ထားသော objects/actions နှင့် permitted rows သာအသုံးပြုနိုင်မည်။

၅ မိနစ် စမ်းကြည့်

Read-only reporting role တစ်ခုဖန်တီးပြီး `app` schema table များကို SELECT သာပေးပါ။

သတိလေးတစ်ချက်

နမူနာ password ကိုမသုံးပါနှင့်။ `ALTER DEFAULT PRIVILEGES` မသတ်မှတ်လျှင် နောက်ဖန်တီးသည့် tables သို့ grants မရောက်နိုင်ပါ။

PostgreSQL — Database RolesPostgreSQL Global Development Group

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • နမူနာ password ကိုမသုံးပါနှင့်။ `ALTER DEFAULT PRIVILEGES` မသတ်မှတ်လျှင် နောက်ဖန်တီးသည့် tables သို့ grants မရောက်နိုင်ပါ။
  • နမူနာ code ကို production data ပေါ် တိုက်ရိုက်မစမ်းဘဲ local/test database နှင့် recoverable backup ပေါ်တွင် အရင်အတည်ပြုပါ။

လေ့ကျင့်ခန်း

Read-only reporting role တစ်ခုဖန်တီးပြီး `app` schema table များကို SELECT သာပေးပါ။

You'll know it worked when: App role က သတ်မှတ်ထားသော objects/actions နှင့် permitted rows သာအသုံးပြုနိုင်မည်။

Roles၊ Privileges နှင့် Row Security | Thuta Learning