Megosztás a következőn keresztül:


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, tenant2stb. 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_idoszlik meg: Először hozza létre a szerepköröket tenant1 és tenant2a . 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