በ PostgreSQL ውስጥ የረድፍ ደረጃ ደህንነትን ተግባራዊ ለማድረግ የተደረገ ጥናት

እንደ ማሟያ በ PostgreSQL የተከማቹ ተግባራት ደረጃ ላይ የንግድ ሥራ አመክንዮ በመተግበር ላይ የተደረገ ጥናት и በዋናነት ለዝርዝር መልስ ላይ አስተያየት.

የንድፈ ሃሳቡ ክፍል በሰነድ ውስጥ በደንብ ተገልጿል PostgreSQL - የረድፍ ጥበቃ ፖሊሲዎች. ከታች ትንሽ ተግባራዊ ትግበራ ነው የተወሰነ የንግድ ሥራ - የተሰረዘ ውሂብን መደበቅ. ለትግበራ የተሰጠ ንድፍ አርኤልኤስን በመጠቀም ሮል ሞዴል ማድረግ በተናጠል ቀርቧል.

በ 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)

ነገር ግን በመረጃ ቋቱ ውስጥ ሰነዱ አልተሰረዘም, ባህሪው ብቻ ተቀይሯል ኢስ_ዴል

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

በችግር መግለጫው ውስጥ የሚፈለገው የትኛው ነው.

ውጤቱ

ርዕሱ አስደሳች ከሆነ በሚቀጥለው ጥናት የረድፍ ደረጃ ደህንነትን በመጠቀም የመረጃ ተደራሽነትን ለመለየት ሚና ላይ የተመሠረተ ሞዴልን የመተግበር ምሳሌ ማሳየት ይችላሉ።

ምንጭ: hab.com

አስተያየት ያክሉ