Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Azure Database for PostgreSQL rugalmas kiszolgálói erőforrásokhoz való hozzáférés kezelése fontos része a biztonság és a megfelelőség fenntartásának. Ez a cikk bemutatja, hogyan használhatja a PostgreSQL-szerepköröket és az Azure-funkciókat az engedélyek szabályozásához és a hozzáférés-kezelés ajánlott eljárásainak implementálásához.
Szerepkör-kezelés
Az Azure Database for PostgreSQL rugalmas kiszolgáló hozzáférési engedélyeinek nagy léptékű kezelésére a legjobb módszer a szerepkörök fogalmának használata. A szerepkör lehet adatbázis-felhasználó vagy adatbázis-felhasználók csoportja. A szerepkörök birtokolhatják az adatbázis-objektumokat, és jogosultságokat rendelhetnek ezekhez az objektumokhoz más szerepkörökhöz, így szabályozhatják, hogy kik férhetnek hozzá az objektumokhoz. Egy szerepkörben tagságot adhat egy másik szerepkörnek, amely lehetővé teszi, hogy a tagszerepkör egy másik szerepkörhöz rendelt jogosultságokat használjon. Azure Database for PostgreSQL rugalmas kiszolgáló lehetővé teszi, hogy engedélyeket adjon közvetlenül az adatbázis felhasználóinak. Ajánlott biztonsági gyakorlatként hozzon létre szerepköröket meghatározott engedélykészletekkel a minimális alkalmazás- és hozzáférési követelmények alapján. Rendelje hozzá a megfelelő szerepköröket minden felhasználóhoz. Szerepkörök használatával minimális jogosultsági modellt kényszeríthet ki az adatbázis-objektumok eléréséhez.
A PostgreSQL által létrehozott beépített szerepkörök mellett a Azure Database for PostgreSQL rugalmas kiszolgáló három alapértelmezett szerepkört is tartalmaz. Ezeket a szerepköröket a következő parancs futtatásával tekintheti meg:
SELECT rolname FROM pg_roles;
A szerepkörök a következők:
azure_pg_adminazuresu- rendszergazdai szerepkör
A Azure Database for PostgreSQL rugalmas kiszolgáló létrehozásakor hitelesítő adatokat kell megadnia egy rendszergazdai szerepkörhöz. Ezzel a rendszergazdai szerepkör használatával további PostgreSQL-szerepköröket hozhat létre.
Létrehozhat például egy felhasználót vagy szerepkört.demouser
CREATE USER demouser PASSWORD password123;
Ne használja a rendszergazdai szerepkört az alkalmazáshoz.
Felhőalapú PaaS-környezetekben az Azure Database for PostgreSQL szuperfelhasználói fiókhoz való hozzáférés csak a felhőszolgáltatók által végzett síkműveletek szabályozására korlátozódik. Ezért a azure_pg_admin fiók pszeudo-superuser fiókként létezik. Az Ön rendszergazdai szerepköre a azure_pg_admin szerepkör tagja.
A kiszolgálói rendszergazdai fiók azonban nem része a azuresu szerepkörnek, amely superuser jogosultságokkal rendelkezik, és vezérlősík-műveletek végrehajtására szolgál. Mivel ez a szolgáltatás egy felügyelt PaaS-szolgáltatás, csak a Microsoft része a felügyelői szerepkörnek.
A kiszolgáló szerepköreinek listáját rendszeresen naplózhatja.
Csatlakozhat például az psql ügyféllel, és lekérdezheti a pg_roles táblát, amely felsorolja az összes szerepkört, valamint a jogosultságokat, például más szerepkörök létrehozását, adatbázisok létrehozását, replikációt és egyebeket.
select * from pg_roles where rolname='demouser';
-[ RECORD 1 ]--+---------
rolname | demouser
rolsuper | f
rolinherit | t
rolcreaterole | f
rolcreatedb | f
rolcanlogin | f
rolreplication | f
rolconnlimit | -1
rolpassword | ********
rolvaliduntil |
rolbypassrls | f
rolconfig |
oid | 24827
Fontos
A közelmúltban az Azure Database for PostgreSQL lehetővé tette a CAST-parancsok létrehozását. A CREATE CAST utasítás futtatásához a felhasználónak a azure_pg_admin csoport tagjának kell lennie. A létrehozás után jelenleg nem lehet elvetni a CAST-et.
Az Azure Database for PostgreSQL csak azokat a CAST-parancsokat támogatja, amelyek a WITH FUNCTION és WITH INOUT beállításokat használják. A WITHOUT FUNCTION beállítás nem támogatott.
Az Azure Database for PostgreSQL naplózása az Azure Database for PostgreSQL-ben is elérhető az adatbázisok tevékenységeinek nyomon követéséhez.
Sémahozzáférés szabályozása
Az Azure Database for PostgreSQL újonnan létrehozott adatbázisai az adatbázis nyilvános sémájában lévő alapértelmezett jogosultságokat tartalmazzák, amelyek minden adatbázis-felhasználónak és szerepkörnek biztosítják az objektumok létrehozását. Ha jobban szeretné korlátozni az alkalmazás felhasználói számára a Azure Database for PostgreSQL rugalmas kiszolgálón létrehozott adatbázisokhoz való hozzáférését, fontolja meg az alapértelmezett nyilvános jogosultságok visszavonását. A jogosultságok visszavonása után adjon konkrét jogosultságokat az adatbázis felhasználóinak részletesebben. Például:
Visszavonhatja a
publicsémára vonatkozó jogosultságok létrehozását apublicszerepkörből, hogy megakadályozza az alkalmazás-adatbázis felhasználói számára, hogy objektumokat hozzanak létre a nyilvános sémában.REVOKE CREATE ON SCHEMA public FROM PUBLIC;Hozzon létre egy új adatbázist.
CREATE DATABASE Test_db;Vonja vissza az új adatbázis NYILVÁNOS sémájából származó összes jogosultságot.
REVOKE ALL ON DATABASE Test_db FROM PUBLIC;Egyéni szerepkör létrehozása az alkalmazásadatbázis-felhasználók számára.
CREATE ROLE Test_db_user;Az ezzel a szerepkörrel rendelkező adatbázis-felhasználók számára lehetővé teszi az adatbázishoz való csatlakozást.
GRANT CONNECT ON DATABASE Test_db TO Test_db_user; GRANT ALL PRIVILEGES ON DATABASE Test_db TO Test_db_user;Adatbázis-felhasználó létrehozása.
CREATE USER user1 PASSWORD 'Password_to_change'Rendelje hozzá a szerepkört a csatlakozással és a jogosultságok kiválasztásával a felhasználóhoz.
GRANT Test_db_user TO user1;
Ebben a példában a felhasználó1 csatlakozhat, és rendelkezik a tesztadatbázis összes jogosultságával Test_db, de a kiszolgálón lévő többi adatbázissal nem. Ahelyett, hogy ezt a felhasználót vagy szerepkört ALL PRIVILEGES-nek adnának az adatbázison és annak objektumaiban, fontolja meg szelektívebb engedélyek, például SELECT, INSERT, EXECUTEés egyéb engedélyek biztosítását. A PostgreSQL-adatbázisok jogosultságaival kapcsolatos további információkért tekintse meg a GRANT és a REVOKE parancsokat a PostgreSQL-dokumentumokban.
Nyilvános séma tulajdonjogának változásai az Azure Database for PostgreSQL-ben
A PostgreSQL 15-ös és újabb verzióiban a nyilvános séma tulajdonjoga az új pg_database_owner szerepkörre változott, amely lehetővé teszi, hogy az adatbázis-tulajdonosok irányítják azt. További információkért tekintse meg a PostgreSQL kibocsátási megjegyzéseit.
Az Azure Database for PostgreSQL-ben azonban ez a módosítás nem érvényes. A nyilvános séma a szerepkör tulajdonában van az azure_pg_admin összes támogatott PostgreSQL-verzióban. Ez a felügyelt szolgáltatás viselkedése biztonságot és konzisztenciát biztosít.
A PostgreSQL 16 változásai szerepköralapú biztonsággal
A PostgreSQL-ben az adatbázis-szerepkör számos attribútummal rendelkezhet, amelyek meghatározzák a jogosultságait. Az egyik ilyen attribútum a CREATEROLE attribútum, amely fontos a PostgreSQL-adatbázisok felhasználók és szerepkörök kezelése során. A PostgreSQL 16-ban jelentős változások történtek az attribútumban.
A PostgreSQL 16-ban a CREATEROLE attribútummal rendelkező felhasználók már nem oszthatják ki a tagságot senkinek. Ehelyett, mint más felhasználók, akik nem rendelkeznek ezzel az attribútummal, csak olyan szerepkörökben oszthatnak ki tagságokat, amelyekhez rendelkeznek ADMIN OPTION. Emellett a PostgreSQL 16-ban a CREATEROLE attribútum továbbra is lehetővé teszi, hogy egy nem szuperfelhasználó új felhasználókat hozzon létre. Azonban csak az általuk létrehozott felhasználókat tudják elvetni. A felhasználók elvetésére tett kísérletek hibát eredményeznek, ha a felhasználót nem a CREATEROLE attribútummal rendelkező felhasználó hozta létre.
A PostgreSQL 16 új és továbbfejlesztett beépített szerepkört is bevezet. A pg_create_subscription szerepkör lehetővé teszi, hogy a felügyelők előfizetéseket hozzanak létre.
Azure Database for PostgreSQL rugalmas kiszolgálón a azure_pg_admin szerepkör egy rendszer által felügyelt, korlátozott szerepkör, amelyet a felhasználók nem módosíthatnak. Ha megkísérli módosítani, például egy másik szerepkört ad hozzá, a következőhöz hasonló hibát eredményez:
GRANT <db_user> TO azure_pg_admin;
ERROR: permission denied to alter restricted role "azure_pg_admin"
Ez a hiba egy beépített védelem, amely megakadályozza a kritikus fontosságú felügyeleti szerepkörök módosítását. Ha jogosultságokat vagy szerepköröket kell hozzárendelnie, fontolja meg egy egyéni szerepkör létrehozását, és adja meg a szükséges engedélyeket ehhez a szerepkörhöz.
Továbbfejlesztett vezérlés az azure_pg_admin esetében
A PostgreSQL 16-ban szigorú szerepkörhierarchia-struktúra van implementálva a CREATEROLE jogosultsággal rendelkező felhasználók számára, amelyek kifejezetten a szerepkörök megadásához kapcsolódnak. Az adminisztratív rugalmasság javítása és a PostgreSQL 16-ban bevezetett korlátozások kezelése érdekében az Azure Database for PostgreSQL javítja a azure_pg_admin szerepkör képességeit az összes PostgreSQL-verzióban. Ezzel a frissítéssel a azure_pg_admin szerepkör tagjai kezelhetik a szerepköröket, és hozzáférhetnek a nem korlátozott szerepkörök által birtokolt objektumokhoz, még akkor is, ha ezek a szerepkörök szintén a azure_pg_admin tagjai. Ez a fejlesztés biztosítja, hogy a rendszergazda felhasználók konzisztens és átfogó felügyeletet tartsanak fenn a szerepkör- és engedélykezelés felett, zökkenőmentes és megbízható élményt biztosítva anélkül, hogy szuperfelhasználói hozzáférést igényelnének.
Sorszintű biztonság
A sorszintű biztonság (RLS) egy Azure Database for PostgreSQL biztonsági funkció, amely lehetővé teszi az adatbázis-rendszergazdák számára, hogy olyan szabályzatokat határozzanak meg, amelyek meghatározzák, hogy egy adott adatsor hogyan jelenik meg és működjön egy vagy több szerepkörhöz. A sorszintű biztonság további szűrőt ad hozzá egy Azure Database for PostgreSQL-adatbázistáblához. Amikor egy felhasználó műveletet próbál végrehajtani egy táblán, a rendszer ezt a szűrőt alkalmazza a lekérdezési feltételek vagy más szűrés előtt, és az adatok a biztonsági szabályzatnak megfelelően leszűkülnek vagy elutasítják. Létrehozhat sorszintű biztonsági szabályzatokat bizonyos parancsokhoz, például SELECT, INSERT, UPDATEés DELETE, vagy megadhatja az összes parancshoz. A sorszintű biztonság használati esetei közé tartoznak a PCI-kompatibilis implementációk, a minősített környezetek, valamint a megosztott üzemeltetési vagy több-bérlős alkalmazások.
Csak a jogosultságokkal rendelkező SET ROW SECURITY felhasználók alkalmazhatnak sorbiztonsági jogosultságokat egy táblára. A tábla tulajdonosa beállíthatja a tábla sorbiztonságát. A OVERRIDE ROW SECURITY-hoz hasonlóan ez a jog jelenleg hallgatólagos jog. A sorszintű biztonság nem bírálja felül a meglévő GRANT engedélyeket. Finomabb szabályozási szintet ad hozzá. Ha például egy adott felhasználó számára engedélyezi a sorok elérését, ROW SECURITY FOR SELECT csak akkor engedélyezi a felhasználó számára a hozzáférést, ha a felhasználó a szóban forgó oszlopon vagy táblán is SELECT rendelkezik jogosultságokkal.
Az alábbi példa bemutatja, hogyan hozhat létre olyan szabályzatot, amely biztosítja, hogy csak az egyénileg létrehozott kezelőiszerepkör tagjai férhessenek hozzá egy adott fiók soraihoz. A következő példában szereplő kód meg van osztva a PostgreSQL dokumentációjában.
CREATE TABLE accounts (manager text, company text, contact_email text);
ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;
CREATE POLICY account_managers ON accounts TO managers
USING (manager = current_user);
A USING záradék implicit módon hozzáad egy WITH CHECK záradékot, amely biztosítja, hogy a felettesi szerepkör tagjai ne tudjanak más vezetőkhöz tartozó sorokon műveleteket végrehajtani SELECTDELETEUPDATE, és ne INSERT tudjanak új, másik vezetőhöz tartozó sorokat létrehozni.
A sorbiztonsági szabályzatokat a parancs használatával elvetheti, ahogyan az ebben a DROP POLICY példában látható:
DROP POLICY account_managers ON accounts;
Bár elvetheti a szabályzatot, a szerepkör-kezelő továbbra sem tekintheti meg a többi vezetőhöz tartozó adatokat. Ez a korlátozás azért létezik, mert a sorszintű biztonsági szabályzat továbbra is engedélyezve van a fióktáblában. Ha a sorszintű biztonság alapértelmezés szerint engedélyezve van, a PostgreSQL alapértelmezett megtagadási szabályzatot használ.
Letilthatja a sorszintű biztonságot az alábbi példában látható módon:
ALTER TABLE accounts DISABLE ROW LEVEL SECURITY;
Sorszintű biztonság megkerülése
A PostgreSQL BYPASSRLS és NOBYPASSRLS engedélyekkel rendelkezik, amelyeket hozzárendelhet egy szerepkörhöz. A NOBYPASSRLS alapértelmezés szerint van hozzárendelve. Az Azure Database for PostgreSQL újonnan kiépített kiszolgálói esetében a sorszintű biztonsági jogosultság (BYPASSRLS) megkerülése az alábbiak szerint történik:
A Postgres 16-os és újabb verziójú kiszolgálók esetében a Szokásos PostgreSQL 16-os viselkedést követjük. A azure_pg_admin rendszergazdai szerepkör által létrehozott nemminisztratív felhasználók lehetővé teszik, hogy szükség esetén a BYPASSRLS attribútummal vagy jogosultsággal hozzon létre szerepköröket.
A Postgres 15-ös és korábbi verziójú kiszolgálók esetében a azure_pg_admin felhasználóval hajthat végre olyan felügyeleti feladatokat, amelyek a BYPASSRLS-jogosultságot igénylik. A BypassRLS-jogosultsággal azonban nem hozhat létre nem felügyelt felhasználókat, mivel a rendszergazdai szerepkör nem rendelkezik szuperfelhasználói jogosultságokkal, ahogyan az a felhőalapú PaaS PostgreSQL-szolgáltatásokban is előfordul.