Vissza a bloghoz

Hogyan használjuk a szerepköröket és kezeljük a jogosultságokat a PostgreSQL-ben

Hogyan használjuk a szerepköröket és kezeljük a jogosultságokat a PostgreSQL-ben

PostgreSQL egy nyílt forráskódú DBMS, amely SQL-t használ. Ez egy nagyon hatékony eszköz, amelyet alkalmazások kezelésére és webes adatok hosztolására használnak VPS-en. Ebben az útmutatóban megtanulhatja, hogyan kezelheti a jogosultságokat a PostgreSQL-ben. Segítségével megadhatja az alkalmazásszerepköröknek a szükséges jogosultságokat. Ezt az útmutatót PostgreSQL használatával fogjuk elvégezni egy Ubuntu 18.04-es felhőszerveren a CloudSigma-n.

A PostgreSQL telepítése

A PostgreSQL letöltéséhez és telepítéséhez futtassa a következő parancsokat:

A telepítő létrehoz egy alapértelmezett felhasználót – “Postgres” néven, amely alatt futni fog. A jelen útmutató nagy részében ezt a felhasználót fogjuk használni. A következő paranccsal jelentkezhet be ehhez a felhasználóhoz:

Most, hogy a PostgreSQL telepítve van, megtanulhatja, hogyan kezeli a jogosultságokat. Követheti továbbá az útmutatónkat a PostgreSQL beállításáról Ubuntu-n a telepítési folyamat részletes, lépésről lépésre történő bemutatásához.

PostgreSQL jogosultsági fogalmak

A Postgres a jogosultságokat a “szerepkörök” (roles) koncepcióján keresztül kezeli. A szerepkörök esetében nincs különbség a felhasználók és a csoportok között. A szerepkörök rugalmasabbak, mint a hagyományos Unix felhasználói és csoportrendszer. Például egy szerepkör eljárhat egy másik szerepkör tagjaként, örökölve annak jogosultságait.

Szerepkörök megtekintése a PostgreSQL-ben

A PostgreSQL szerepköreinek megtekintéséhez először be kell jelentkeznie a parancssorba a következő paranccsal:

Ezután futtassa a következőt a szerepkörök megtekintéséhez:

show roles manage permissions in PostgreSQL

Jelenleg csak egyetlen alapértelmezett szerepkör létezik az összes jogosultsággal.

Hogyan hozzunk létre szerepköröket a PostgreSQL-ben

A Postgres szerepköreit létrehozhatja parancssorból vagy a Postgres shellen belülről is. Kipróbálhatja a következő két megközelítést, amelyek után láthatja, hogyan kezelheti a jogosultságokat és a hozzáféréseket a PostgreSQL-ben.

Hogyan hozzunk létre szerepköröket a PostgreSQL-en belülről

A szerepkörök létrehozásának legegyszerűbb módja a Postgres parancssorából történik. Ezt a következő paranccsal teheti meg:

A létrehozás ellenőrzéséhez futtassa a parancsot:

create role from prompt

Ez azt jelzi, hogy az új szerepkörnek nincsenek bejelentkezési jogosultságai. Ennek megváltoztatását az útmutató későbbi részében fogja megtanulni.

Hogyan hozzunk létre szerepköröket parancssorból

A fenti módszer alternatívája a felhasználó parancssorból történő létrehozása. A PostgreSQL parancssorból való kilépéshez írja be a következőt:

A következő paranccsal létrehozhat egy “test” nevű szerepkört:

Miután végrehajtotta a fenti parancsot, jelentkezzen be a psql-be, és listázza a szerepköröket a következő parancsokkal:

creating user from commandline

Megfigyelheti, hogy az így létrehozott felhasználó nem rendelkezik ugyanazokkal az attribútumokkal.

Hogyan töröljünk szerepköröket a PostgreSQL-ben

A PostgreSQL-ben a következő szintaxissal egyszerűen törölhet szerepköröket:

A korábban létrehozott demo szerepkört a következő paranccsal törölheti:

drop role

Ha olyan szerepkört próbálunk meg törölni, amely nem létezik, az hibát fog dobni. Ennek megtekintéséhez próbálja meg újra törölni ugyanazt a szerepkört:

drop role fail

Ha azt szeretné, hogy a parancs ne dobjon hibát, ha a szerepkör nem létezik, hozzáadhatja az ‘IF EXISTS’ kifejezést a parancshoz:

A szerepkör törlését újra megpróbálhatja ezzel a paranccsal:

drop role if exists

Hogyan határozzunk meg jogosultságokat a szerepkör létrehozásakor

Eddig szerepköröket hozott létre és törölt. Ebben a részben módosított jogosultságokkal rendelkező szerepköröket fog létrehozni. Ezt úgy teheti meg, hogy a létrehozó paranccsal megadja a szerepkör jogosultságait:

Az ehhez kapcsolódó lehetőségek megtekintéséhez megnyithatja a súgót ezzel a paranccsal:

help create user

Ha bejelentkezési jogosultságokkal rendelkező szerepkört szeretne létrehozni, a parancsot így alakíthatja ki:

create role with login manage permissions in PostgreSQL

Ahogy korábban láttuk, ha bejelentkezési jogosultsággal rendelkező szerepköröket szeretne létrehozni, a következő parancsot is használhatja:

A két parancs közötti egyetlen különbség az, hogy a ‘CREATE USER’ alapértelmezés szerint bejelentkezési jogosultságot ad a szerepkörnek.

Szerepkörök jogosultságainak módosítása PostgreSQL-ben

Eddig azt próbálta ki, hogyan adhat jogosultságokat a felhasználó létrehozása során. Ebben a szakaszban a már létrehozott felhasználók jogosultságait fogja módosítani. Az alter parancs szintaxisa a következő:

Például, ha szeretné, ezzel a paranccsal megváltoztathatja a demo_role bejelentkezési jogosultságait ‘log in’-re:

alter nologin

Ahhoz, hogy a felhasználó újra bejelentkezhessen, a következő paranccsal módosíthatja a jogosultságokat:

Hogyan jelentkezzünk be más felhasználóként PostgreSQL-ben

A PostgreSQL alapértelmezés szerint csak helyileg engedélyezi a bejelentkezést, ha a felhasználóneve megegyezik a rendszer felhasználónevével. Ennek megkerülésére vagy megváltoztathatja a bejelentkezési típust, vagy beállíthatja a PostgreSQL-t a loopback hálózati interfész használatára. Ez az interfész távolira változtatná a kapcsolat típusát, még akkor is, ha a kapcsolat helyi.

Ebben a szakaszban a másodikat fogja kipróbálni. Kezdésként beállíthatja a felhasználó jelszavát, így a hitelesítés lehetségessé válik.

Állítsa be a ‘demo_user’ jelszavát a következő paranccsal:

Amikor a rendszer kéri, adja meg és erősítse meg a jelszót. Ha végzett, kiléphet a PostgreSQL felületről, és visszatérhet a normál gépfelhasználójához:

A PostgreSQL megköveteli, hogy az operációs rendszer felhasználónevével megegyező felhasználónévvel jelentkezzen be, és az adatbázishoz is ugyanezzel a felhasználónévvel kapcsolódjon. Mivel ebben az esetben nem ezt teszi, kifejezetten meg kell adnia a használni kívánt opciókat. A következő szintaxist használhatja:

user: A felhasználónév, amellyel kapcsolódni szeretne
DB: Egy létező adatbázis, amelyhez hozzáféréssel rendelkezik
-h 127.0.0.1: Jelzi a PostgreSQL számára, hogy hálózati interfészen keresztül fog kapcsolódni a helyi géphez. Ez az opció lehetővé teszi a hitelesítést még akkor is, ha a felhasználónév nem egyezik meg a rendszer felhasználónevével.
-W: Jelzi a PostgreSQL számára, hogy jelszót fog megadni

A “test_user” felhasználónkkal való bejelentkezéshez a következő parancsot adhatjuk ki:

postgresql login through network interface manage permissions in PostgreSQL

A jelszó megadása után bejelentkezik a shellbe. Példánkban a ‘postgres’ adatbázist használjuk, amely a telepítés során automatikusan beállított alapértelmezett adatbázis.

Ebben a munkamenetben a bejelentkezéshez kiválasztott felhasználótól függően azzal a problémával fog szembesülni, hogy nem rendelkezik a megfelelő jogosultságokkal a különböző műveletek végrehajtásához. A probléma oka az, hogy még nem adott elegendő jogosultságot a felhasználónak a dolgok adminisztrálására.

A következő szakaszban megadja a szükséges jogosultságokat a felhasználóknak. Először vissza kell váltania a felhasználót egy adminisztratív felhasználóra:

Jogosultságok kezelése PostgreSQL-ben: Hogyan adjunk jogosultságokat PostgreSQL-ben

PostgreSQL-ben, ha egy adatbázist vagy táblát egy adott szerepkör hoz létre, csak annak a szerepkörnek van jogosultsága a módosítására. Ez alól kivételt képeznek a szuperfelhasználói (superuser) jogosultságokkal rendelkező szerepkörök. Ebben a szakaszban jogosultságokat fog adni más szerepköröknek. Más szerepköröknek a ‘GRANT’ utasítással adhat jogosultságokat. A szintaxis a következő:

Létrehozhat egy egyszerű táblát a parancs végrehajtásához:

A létrehozott tábla megtekintéséhez futtassa a parancsot:

create table manage permissions in PostgreSQL

Most, hogy már van egy demo táblája, jogosultságokat adhat a ‘demo’ táblához a ‘demo_role’ szerepkörnek. Az ‘UPDATE’ jogosultságot a következő paranccsal adhatja meg a szerepkörnek:

Egy szerepkörnek az összes jogosultságot megadhatja, ha a jogosultságot ‘ALL’-ként adja meg:

Ha egy adott jogosultságot a rendszer összes szerepkörének meg szeretne adni, a szerepkör helyett használhatja a ‘public’ kulcsszót, a következő parancshoz hasonlóan:

A megadott jogosultságokat a következő paranccsal tekintheti meg:

granted permissions

Jogosultságok kezelése PostgreSQL-ben: Jogosultságok eltávolítása PostgreSQL-ben

Egy szerepkör jogosultságait könnyen eltávolíthatja a ‘REVOKE’ parancs használatával. Ez nagyon hasonlít a grant parancshoz:

A GRANT-hoz hasonlóan használhatjuk az – ‘ALL’ és ‘PUBLIC’ kulcsszavakat az összes jogosultság megadására, vagy a jogosultságok megadására az összes szerepkörnek:

Csoportszerepkörök használata PostgreSQL-ben

A széles körű jogosultságkezelés lehetővé tétele érdekében a szerepkörök elég rugalmasak ahhoz, hogy más szerepkörökkel csoportosíthatók legyenek. Például létrehozhat egy – ‘temporary_role’ szerepkört, majd hozzáadhatja a ‘demo_role’ és ‘test_user’ szerepköröket ehhez a szerepkörhöz:

Most már kezelheti ezen két szerepkör jogosultságait pusztán a ‘temporary_role’ szerepkör jogosultságainak kezelésével. Ez lehetővé teszi a jogosultságok egyszerűbb kezelését. A szerepkör-tagsági információkat a következő paranccsal tekintheti meg:

role - group manage permissions in PostgreSQL

Bármely csoporttag eljárhat a csoport nevében a ‘set role’ parancs használatával. Mivel a ‘postgres’ felhasználó egy szuperfelhasználó, használhatja a ‘set role’ parancsot akkor is, ha nem tagja a csoportnak:

Minden tábla, amelyet most hoz létre, a temporary_role tulajdonában lesz:

A tábla tulajdonjogának ellenőrzéséhez futtassa a következő parancsot:

create table with temporary_role

Láthatja, hogy a ‘temporary_role’ szerepkör birtokolja az új táblát és a serial adattípushoz kapcsolódó szekvenciát. Az eredeti szerepkör-jogosultságokhoz való visszatéréshez futtassa a következő parancsot:

Ha azt szeretné, hogy a szerepkör rendelkezzen azon szerepkör összes jogosultságával, amelyhez tartozik, megadhatja az ‘inherit’ tulajdonságot az ‘alter role’ paranccsal:

A fenti paranccsal a ‘test_user’ megkapta azon szerepkörök összes jogosultságát, amelyekhez tartozik. Egy szerepkör törléséhez használhatja a ‘drop role’ parancsot:

drop role manage permissions in PostgreSQL

A fenti parancs hibát jelez, mert vannak olyan objektumaink, mint például a ‘hello’ tábla, amelyek függnek tőle. A törléséhez átruházhatja a tábla tulajdonjogát egy másik szerepkörre:

A következő paranccsal ellenőrizheti, hogy a temporary_role most már nem birtokol egyetlen táblát sem:

check ownerships

Most már törölheti a ‘temporary_role’ szerepkört, mivel már nincsenek függőségei:

Habár a fenti parancs törli a temporary_users szerepkört, a szerepkör-csoport korábbi tagjai nem kerülnek eltávolításra.

Összegzés

Sikeresen elvégezte az útmutatót, és most már tudja, hogyan kezelheti a jogosultságokat a PostgreSQL-ben. Könnyedén adminisztrálhatja a jogosultságokat. A jogosultságok kezelésének ismerete biztosítja, hogy alkalmazásai hozzáférjenek a szükséges adatbázisokhoz, miközben nem férnek hozzá semmilyen más, egy másik alkalmazás által használt adatbázishoz.

Kellemes számítógép-használatot!

author

Akshay Nagpal

Szerző · CloudSigma

Preslav Dobrev a CloudSigma kreatív tervezője, aki hagyományos és innovatív marketingcsatornák segítségével következetes vállalati identitás kialakítására összpontosít. Kiemelkedően képes ötvözni a művészi látásmódot a stratégiai marketinggel, hogy hatásos márkatörténeteket hozzon létre.

Hozzászólások

Még nincsenek hozzászólások. Legyen Ön az első.