په PostgreSQL کې د قطار کچې امنیت پلي کولو په اړه یوه مطالعه

د بشپړولو په توګه د PostgreSQL ذخیره شوي دندو په کچه د سوداګرۍ منطق پلي کولو په اړه یوه مطالعه и په عمده توګه د تفصيلي ځواب لپاره په تبصره.

نظري برخه په اسنادو کې ښه تشریح شوې PostgreSQL - د قطار محافظت پالیسي. لاندې د کوچني عملي پلي کول دي ځانګړی سوداګریز دنده - د حذف شوي معلوماتو پټول. سکیچ پلي کولو ته وقف شوی د RLS په کارولو سره د رول ماډلینګ په جلا توګه وړاندې کیږي.

په PostgreSQL کې د قطار کچې امنیت پلي کولو په اړه یوه مطالعه

په مقاله کې هیڅ نوی نشته، هیڅ پټ معنی یا پټ پوهه نشته. د نظري مفکورې د عملي تطبیق په اړه یوازې یو خاکه. که څوک یې لیواله وي، ولولئ. که تاسو علاقه نه لرئ، خپل وخت مه ضایع کوئ.

د ستونزې تشکیل

پرته له دې چې د موضوع ساحه کې ژوره ډوبه وکړو، په لنډه توګه، ستونزه په لاندې ډول ترتیب کیدی شي: دلته یو میز شتون لري چې یو مشخص سوداګریز ارګان پلي کوي. په جدول کې قطارونه حذف کیدی شي، مګر قطارونه په فزیکي توګه نه شي حذف کیدی؛ دوی باید پټ شي.

ځکه چې ویل کیږي: "هیڅ شی مه حذف کوئ، یوازې نوم یې بدل کړئ. انټرنیټ هر څه ذخیره کوي"

د لارې په اوږدو کې، دا مشوره ورکول کیږي چې موجوده زیرمه شوي فعالیتونه بیا ونه لیکئ چې د دې ادارې سره کار کوي.

د دې مفکورې پلي کولو لپاره، جدول ځانګړتیا لري ړنګ شوی دی. بیا هرڅه ساده دي - تاسو اړتیا لرئ ډاډ ترلاسه کړئ چې پیرودونکي یوازې هغه لینونه لیدلی شي چې په هغه کې صفت ړنګ شوی دی دروغ میکانیزم د څه لپاره کارول کیږي؟ د قطار په کچه امنیت.

پلي کول

یو جلا رول او سکیما جوړه کړئ

CREATE ROLE repos;
CREATE SCHEMA repos;

د هدف جدول جوړ کړئ

CREATE TABLE repos.file
(
...
is_del BOOLEAN DEFAULT FALSE
);
CREATE SCHEMA repos

موږ پکې شامل یو د قطار کچه امنیت

ALTER TABLE repos.file  ENABLE ROW LEVEL SECURITY ;
CREATE POLICY file_invisible_deleted  ON repos.file FOR ALL TO dba_role USING ( NOT is_deleted );
GRANT ALL ON TABLE repos.file to dba_role ;
GRANT USAGE ON SCHEMA repos TO dba_role ;

د خدمت فعالیت - په جدول کې د قطار ړنګول

CREATE OR REPLACE repos.delete( curr_id repos.file.id%TYPE)
RETURNS integer AS $$
BEGIN
...
UPDATE repos.file
SET is_del = TRUE 
WHERE id = curr_id ; 
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

د سوداګرۍ فعالیت - د سند ړنګول

CREATE OR REPLACE business_functions.deleteDoc( doc_for_delete JSON )
RETURNS JSON AS $$
BEGIN
...
PERFORM  repos.delete( doc_id ) ;
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

پایلې

پیرودونکي سند ړنګوي

SELECT business_functions.delCFile( (SELECT json_build_object( 'CId', 3 )) );

د حذف کولو وروسته، پیرودونکي سند نه ګوري

SELECT business_functions.getCFile"( (SELECT json_build_object( 'CId', 3 )) ) ;
-----------------
(0 rows)

مګر په ډیټابیس کې سند نه حذف کیږي ، یوازې صفت بدل شوی is_del

psql -d my_db
SELECT  id, name , is_del FROM repos.file ;
id |  name  | is_del
--+---------+------------
 1 |  test_1 | t
(1 row)

کوم چې د ستونزې په بیان کې اړین و.

نتیجه

که موضوع په زړه پورې وي، په راتلونکې څیړنه کې تاسو کولی شئ د قطار کچې امنیت په کارولو سره د معلوماتو لاسرسي جلا کولو لپاره د رول پر بنسټ ماډل پلي کولو مثال وښایئ.

سرچینه: www.habr.com

Add a comment