Thuta Learning
How Databases Work
AdvancedData & Databasesbeginner

Database Security အခြေခံများ

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

  • Database Security အခြေခံများ concept ကို နားလည်ရှင်းပြနိုင်ရန်
  • Diagram/table ကို ဖတ်ပြီး data model/schema/architecture ဘယ်လို ပုံသဏ္ဌာန်ရှိသလဲ ခြေရာခံနိုင်ရန်
  • ကိုယ့် project အတွက် database concept/system ကို ဘယ်လို အသုံးချသင့်သလဲ ရှင်းပြနိုင်ရန်

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

Database security ဆိုတာ setting တစ်ခုတည်း ဖွင့်ရုံနဲ့ မပြီးပါဘူး — layer တွေ အတူတကွရှိတဲ့ stack တစ်ခုပါ၊ layer တစ်ခုတည်းမှာ အားနည်းချက်ရှိရင် ကျန်တဲ့ layer တွေကို ဖျက်ဆီးနိုင်ပါတယ်။

Authentication က 'သင်ဘယ်သူလဲ' ဆိုတာကို ဖြေပါတယ် — password, certificate, cloud IAM role, (သို့) token။ Authorization ကတော့ အဲဒီ identity ဘာလုပ်ခွင့်ရှိလဲ ဆုံးဖြတ်ပေးတဲ့ သီးခြား၊ အလားတူလိုအပ်တဲ့ layer ပါ။

Account အမျိုးအစားရှိသင့်သောအရာ
Read-only analyticsSELECT တစ်ခုတည်း၊ တခြားဘာမှ မလိုပါ။
Application accountSelf table ပေါ်မှာ ဖတ်/ရေးခွင့်၊ DROP (သို့) role ဖန်တီးခွင့် မလိုပါ။
Migration toolMigration လုပ်နေချိန်တစ်ခုတည်းသာ permission မြင့်မားပေးပြီး နေ့စဉ် identity အဖြစ် မဟုတ်ပါ။

နောက် layer ကတော့ network access ပါ — production database ကို public internet ကနေ လုံးဝ မရောက်သင့်ပါ။ Private network ပေါ်မှာ ရှိသင့်ပြီး သိထားတဲ့ application server တွေကိုသာ ခွင့်ပြုတဲ့ firewall နောက်မှာ ရှိသင့်ပါတယ်။

TLS တစ်ခုတည်းနဲ့ မလုံလောက်ပါ

TLS က connection ကို encrypt လုပ်ပေးပါတယ်၊ ဒါပေမယ့် ဘယ်သူမဆို ရောက်နိုင်ပြီး shared superuser password တစ်ခုတည်းနဲ့ ကာကွယ်ထားတဲ့ database ပေါ်က TLS ဟာ ဘာမှ အရေးမကြီးပါဘူး။ Stack တစ်ခုလုံး ခိုင်ခံ့ဖို့ layer တိုင်း ခိုင်ခံ့ရပါမယ်။

text
DATABASE SECURITY LAYER STACK
-----------------------------
  +---------------------------------------+
  | Monitoring (detect unusual activity)   |
  +---------------------------------------+
  | Backups (recover from disaster)        |
  +---------------------------------------+
  | Secrets (credentials never in git)     |
  +---------------------------------------+
  | TLS (encrypt data in transit)          |
  +---------------------------------------+
  | Network Access (private, firewalled)   |
  +---------------------------------------+
  | Least Privilege (minimum permissions)  |
  +---------------------------------------+
  | Authorization (what can this do?)      |
  +---------------------------------------+
  | Authentication (who is connecting?)    |
  +---------------------------------------+
        A gap in any single layer weakens
        every layer stacked above it.

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

ဒါကို deployment အစစ်တစ်ခုပေါ် အသုံးချရင် database ကို ရောက်နိုင်တဲ့ account တိုင်းကို audit လုပ်တာပါ — application ရဲ့ runtime connection၊ analytics tool၊ admin၊ migration run တဲ့ CI/CD job။

Team အများစုက အသုံးပြုနေတာထက် access ပိုများနေတဲ့ account အနည်းဆုံးတစ်ခု တွေ့ရပါတယ်။ ဒါကို ပြင်ဖို့ expertise နက်နက်နဲသေးမလိုပါ — account ဆက်လိုနေသလား ပုံမှန် ပြန်မေးရမယ့် စည်းကမ်းတစ်ခုသာ လိုအပ်ပါတယ်။

  • Permission command အစစ်တွေအတွက်: PostgreSQL ရဲ့ roles-privileges-and-row-security နှင့် connections-pooling-and-security lesson များ။
  • ACL နှင့် TLS configuration လက်တွေ့အတွက်: Redis ရဲ့ security-acl-tls lesson။

Database Security အခြေခံများ

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

javascript
function checkLeastPrivilege(accountName, granted, needed) {
  const excess = granted.filter((perm) => !needed.includes(perm));
  return {
    account: accountName,
    grantedCount: granted.length,
    neededCount: needed.length,
    excessPermissions: excess,
    isOverPrivileged: excess.length > 0
  };
}

const appAccount = checkLeastPrivilege(
  "app_service",
  ["SELECT", "INSERT", "UPDATE", "DELETE", "DROP TABLE", "CREATE ROLE"],
  ["SELECT", "INSERT", "UPDATE"]
);

const analyticsAccount = checkLeastPrivilege(
  "analytics_readonly",
  ["SELECT"],
  ["SELECT"]
);

console.log(JSON.stringify(appAccount, null, 2));
console.log(JSON.stringify(analyticsAccount, null, 2));
You should see
App_service (SELECT, INSERT, UPDATE, DELETE, DROP TABLE, CREATE ROLE ရထားပေမယ့် SELECT, INSERT, UPDATE သာ လိုအပ်) အတွက် checker က excessPermissions: ["DELETE", "DROP TABLE", "CREATE ROLE"] နဲ့ isOverPrivileged: true လို့ ပြန်ပါတယ်။ Analytics_readonly (SELECT တစ်ခုတည်း ရထားပြီး လိုအပ်တာလည်း SELECT တစ်ခုတည်း) အတွက် excessPermissions array အလွတ်နဲ့ isOverPrivileged: false ပြန်ပါတယ် — properly-scoped case အတိအကျပါပဲ။

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

["SELECT", "INSERT", "UPDATE", "DELETE", "CREATE TABLE", "ALTER TABLE", "SUPERUSER"] ရထားပေမယ့် ["CREATE TABLE", "ALTER TABLE", "SELECT"] သာ လိုအပ်တဲ့ CI/CD migration account တစ်ခုအတွက် checkLeastPrivilege ကို ခေါ်ကြည့်ပါ။ isOverPrivileged ဘယ်လို ပြန်လာလဲ၊ ရထားခွင့်ပြုနေတဲ့ permission ထဲက ဘယ်ဟာက အအန္တရာယ်အများဆုံးလဲ။

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

Setup အချိန်မှာ application ရဲ့ database account ကို permission ကျယ်ကျယ်ပြန့်ပြန့်နဲ့ တစ်ခါဖန်တီးပြီး app ရဲ့ လိုအပ်ချက်တွေ ပုံသေနေတဲ့တိုင် access ချဲ့ထွင်လာနေတာကို ပြန်မကြည့်တာပါ။

TLS တစ်ခုတည်းကို လုံလောက်တဲ့ security အဖြစ် သဘောထားပြီး database ကို public internet ကနေ weak (သို့) shared credential နဲ့ ရောက်နိုင်နေခဲ့ခြင်းပါ။

OWASP: Database Security Cheat SheetHow Databases Work

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

  • Setup အချိန်မှာ application ရဲ့ database account ကို permission ကျယ်ကျယ်ပြန့်ပြန့်နဲ့ တစ်ခါဖန်တီးပြီး app ရဲ့ လိုအပ်ချက်တွေ ပုံသေနေတဲ့တိုင် access ချဲ့ထွင်လာနေတာကို ပြန်မကြည့်တာပါ။
  • TLS တစ်ခုတည်းကို လုံလောက်တဲ့ security အဖြစ် သဘောထားပြီး database ကို public internet ကနေ weak (သို့) shared credential နဲ့ ရောက်နိုင်နေခဲ့ခြင်းပါ။
  • ဒီ course က database concept/landscape ကို framework-neutral level မှာသာ သင်ပေးပါတယ် — SQL syntax, PostgreSQL, MongoDB, Redis ကို နက်နက်ရှိုင်းရှိုင်း လေ့လာချင်ရင် SQL, PostgreSQL, MongoDB, Redis tutorial တွေဆီ ဆက်သွားပါ။

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

["SELECT", "INSERT", "UPDATE", "DELETE", "CREATE TABLE", "ALTER TABLE", "SUPERUSER"] ရထားပေမယ့် ["CREATE TABLE", "ALTER TABLE", "SELECT"] သာ လိုအပ်တဲ့ CI/CD migration account တစ်ခုအတွက် checkLeastPrivilege ကို ခေါ်ကြည့်ပါ။ isOverPrivileged ဘယ်လို ပြန်လာလဲ၊ ရထားခွင့်ပြုနေတဲ့ permission ထဲက ဘယ်ဟာက အအန္တရာယ်အများဆုံးလဲ။

You'll know it worked when: App_service (SELECT, INSERT, UPDATE, DELETE, DROP TABLE, CREATE ROLE ရထားပေမယ့် SELECT, INSERT, UPDATE သာ လိုအပ်) အတွက် checker က excessPermissions: ["DELETE", "DROP TABLE", "CREATE ROLE"] နဲ့ isOverPrivileged: true လို့ ပြန်ပါတယ်။ Analytics_readonly (SELECT တစ်ခုတည်း ရထားပြီး လိုအပ်တာလည်း SELECT တစ်ခုတည်း) အတွက် excessPermissions array အလွတ်နဲ့ isOverPrivileged: false ပြန်ပါတယ် — properly-scoped case အတိအကျပါပဲ။

Database Security အခြေခံများ | Thuta Learning