Sorszintű biztonság az Azure Cosmos DB for PostgreSQL-ben
A KÖVETKEZŐKRE VONATKOZIK: Azure Cosmos DB for PostgreSQL (a Citus adatbázisbővítménye a PostgreSQL-re)
A PostgreSQL sorszintű biztonsági szabályzatai korlátozzák, hogy mely felhasználók módosíthatják vagy érhetik el a táblasorokat. A sorszintű biztonság különösen hasznos lehet több-bérlős fürtökben. Lehetővé teszi az egyes bérlők számára, hogy teljes SQL-hozzáféréssel rendelkezzenek az adatbázishoz, miközben elrejtik az egyes bérlők adatait más bérlők elől.
Implementálás több-bérlős alkalmazásokhoz
A bérlői adatok elkülönítését a tábla sorszintű biztonsági szabályzataihoz kapcsolódó adatbázis-szerepkörök elnevezési konvenciójának használatával valósíthatjuk meg. Minden bérlőhöz hozzárendelünk egy adatbázisszerepkört számozott sorrendben: tenant1
, tenant2
stb. A bérlők az alábbi különálló szerepkörökkel csatlakoznak az Azure Cosmos DB for PostgreSQL-hez. A sorszintű biztonsági szabályzatok összehasonlíthatják a szerepkör nevét a tenant_id
terjesztési oszlop értékeivel, így eldönthetik, hogy engedélyezik-e a hozzáférést.
Az alábbiakban bemutatjuk, hogyan alkalmazhatja a megközelítést egy egyszerűsített eseménytáblán, amely a következő szerint tenant_id
oszlik meg: Először hozza létre a szerepköröket tenant1
és tenant2
a . Ezután futtassa a következő SQL-parancsokat rendszergazdai citus
felhasználóként:
CREATE TABLE events(
tenant_id int,
id int,
type text
);
SELECT create_distributed_table('events','tenant_id');
INSERT INTO events VALUES (1,1,'foo'), (2,2,'bar');
-- assumes that roles tenant1 and tenant2 exist
GRANT select, update, insert, delete
ON events TO tenant1, tenant2;
A jelenlegi állapot szerint a táblázathoz kiválasztott engedélyekkel rendelkezők mindkét sort láthatják. Bármelyik bérlő felhasználói megtekinthetik és frissíthetik a másik bérlő sorát. Az adatszivárgást sorszintű táblabiztonsági szabályzatokkal oldhatjuk meg.
Minden szabályzat két záradékból áll: USING és WITH CHECK. Amikor egy felhasználó sorokat próbál olvasni vagy írni, az adatbázis kiértékeli az egyes sorokat ezen záradékok alapján. A PostgreSQL ellenőrzi a meglévő táblasorokat a USING záradékban megadott kifejezéssel, és az INSERT vagy UPDATE használatával létrehozott sorokat a WITH CHECK záradékkal.
-- first a policy for the system admin "citus" user
CREATE POLICY admin_all ON events
TO citus -- apply to this role
USING (true) -- read any existing row
WITH CHECK (true); -- insert or update any row
-- next a policy which allows role "tenant<n>" to
-- access rows where tenant_id = <n>
CREATE POLICY user_mod ON events
USING (current_user = 'tenant' || tenant_id::text);
-- lack of CHECK means same condition as USING
-- enforce the policies
ALTER TABLE events ENABLE ROW LEVEL SECURITY;
Most szerepkörök tenant1
és tenant2
különböző eredmények lekérése a lekérdezéseikhez:
Bérlőként csatlakoztatva1:
SELECT * FROM events;
┌───────────┬────┬──────┐
│ tenant_id │ id │ type │
├───────────┼────┼──────┤
│ 1 │ 1 │ foo │
└───────────┴────┴──────┘
Bérlőként csatlakoztatva2:
SELECT * FROM events;
┌───────────┬────┬──────┐
│ tenant_id │ id │ type │
├───────────┼────┼──────┤
│ 2 │ 2 │ bar │
└───────────┴────┴──────┘
INSERT INTO events VALUES (3,3,'surprise');
/*
ERROR: new row violates row-level security policy for table "events_102055"
*/
Következő lépések
- Megtudhatja, hogyan hozhat létre szerepköröket egy fürtben.
- Biztonsági fogalmak az Azure Cosmos DB for PostgreSQL-ben