Таҳқиқот оид ба татбиқи сатҳи амнияти сатҳ дар 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)

Он чизе ки дар изҳороти мушкилот талаб карда мешуд.

Натиҷа

Агар мавзӯъ ҷолиб бошад, дар омӯзиши навбатӣ шумо метавонед намунаи татбиқи модели нақшро барои ҷудо кардани дастрасии додаҳо бо истифода аз сатҳҳои амнияти сатҳ нишон диҳед.

Манбаъ: will.com

Илова Эзоҳ