PostgreSQL හි Row Level Security (RLS) භාවිතා කරමින් බහු‑කාර්ය (multi‑tenant) යෙදුම් ගොඩනැගීමේදී, කේතයේ එක් ලයින් එකක් අමතක කිරීමෙන්ම ගනුදෙනුකරුගේ දත්ත අනෙක් ගනුදෙනුකරුවාට පෙනෙන්න හැකිය. මේ වගේ අනපේක්ෂිත දෝෂ වලට ඉඩ නොදෙන්න, RLS නීතිවලට පාලනය DB මට්ටමේ ගත කර ගැනීම වැදගත්.
උදාහරණයක් ලෙස, සෑම විමසුමක්ම SELECT * FROM documents WHERE organization_id = $1 ලෙස ලියනවා. මේ ලයින් අමතක වුවහොත්, පාරිභෝගිකයෙකුට වෙනත් සංවිධානයේ ලේඛන පෙනෙන්න පුළුවන්. RLS භාවිතා කරන්නේ ALTER TABLE documents ENABLE ROW LEVEL SECURITY; සහ CREATE POLICY tenant_isolation ON documents USING (organization_id = current_setting('app.current_org_id', true)::uuid); යන නීති සකස් කිරීමෙනි. පරිශීලකයෙකුගේ සැසිය ආරම්භයේ set_config('app.current_org_id', $1, true) කියා සැකසීමෙන් සියලු SQL විමසුම් ඒ සංවිධානයට සීමා වේ.
Trap 1 – රෝල් එකෙන් RLS අක්රිය වීම: PostgreSQL හි superuser, table owner, හෝ BYPASSRLS අයිතිය ඇති රෝල් එකකට RLS අදාළ නොවේ. බොහෝ ORM සහ Docker සකස් කිරීමේ ගොනුවල, යෙදුම tables නිර්මාණය කළ රෝලයම භාවිතා කරනවා; එය සාමාන්යයෙන් superuser හෝ table owner වේ. ඒ නිසා, ඔබ ලියා ඇති RLS නීති කිසිදු බලපෑමක් නොකරයි. විසඳුම වන්නේ, migrations සඳහා owner රෝලයක් භාවිතා කර, යෙදුමට app_user වැනි අයිතිවාසිකම් රහිත රෝලයක් සකසා, එයට SELECT, INSERT, UPDATE, DELETE අවසර ලබා දීමයි. තවද, tables වලට FORCE ROW LEVEL SECURITY එකතු කිරීමෙන් owner රෝලයද RLS අනුගමනය කරවිය හැක.
Trap 2 – set_config හි හිස් අගයක් අතුරුදන් නොවීම: set_config(name, value, true) කියා transaction‑වලට පමණක් සැකසීමේදී, transaction අවසන් වූ පසු අගය NULL නොවී, හිස් string (“”) ලෙස රැඳේ. connection pool එකේ ඒ physical connection නැවත භාවිතා කළ විට, app.current_org_id හි හිස් අගය UUID පරීක්ෂාව අසාර්ථක කරයි, “invalid input syntax for type uuid: ""” යන 500 දෝෂයක් ලැබේ. පූරණ pool එක නැවත ආරම්භ කිරීමෙන් තාවකාලිකව විසඳුම් ලැබේ, නමුත් ස්ථිර විසඳුම set_config‑වලට local scope භාවිතයෙන් පසු, අවශ්ය නම් RESET app.current_org_id කිරීමයි.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ තාක්ෂණික ආරම්භකයන්, විශ්වවිද්යාල සිසුන්, සහ ව්යාපාරික සංවර්ධකයන් සඳහා මෙම දෙකේ වැරදි ඉතා වැදගත්. RLS නිවැරදිව ක්රියාත්මක නොවූ විට, ගනුදෙනුකාරක දත්ත රහස්යතා උල්ලංඝනය වීමට ඉඩ ඇත – එය නීතිමය හා ආර්ථික අවදානමක් වේ. නිවැරදි රෝල් සැකසීම හා connection pool කළමනාකරණය සිංහල IT සමාජයට පාලන ආරක්ෂාව, විශ්වාසනීය සේවා සැපයුම, සහ අන්තර්ජාල ආරක්ෂාව පිළිබඳ වඩාත් හොඳ අවබෝධයක් ලබා දෙයි. එමෙන්ම, PostgreSQL භාවිතා කරන ස්ථානීය startups වලට RLS නිවැරදිව සකස් කිරීම මඟින් බහු‑කාර්ය SaaS ව්යාපාරයක් සකස් කිරීමේ පදනම තෙරෙයි. ඉදිරියේදී, රජයේ e‑Gov සේවාවන් හෝ බ්ලොක්චේන්‑ආශ්රිත පද්ධතිවල දත්ත ගුප්තකරණය RLS මඟින් තවත් ශක්තිමත් වේ.
අවසන් වශයෙන්, RLS නීති අමතක නොවීම, රෝල් අයිතිය පරීක්ෂා කිරීම, සහ set_config‑වල අගය පිරිසිදු කිරීම යන සරල පියවරයන් මගින් ඔබේ PostgreSQL පද්ධතියේ ආරක්ෂාව තවත් අධික කරගත හැක.