PostgreSQL is een open-source DBMS dat op zijn beurt SQL gebruikt. Het is een zeer krachtige tool die wordt gebruikt om applicaties te beheren en webgegevens op VPS te hosten. In deze handleiding leert u hoe u machtigingen beheert in PostgreSQL. Het helpt u om uw applicatierollen de vereiste machtigingen te geven. We zullen deze handleiding uitvoeren met PostgreSQL op een Ubuntu 18.04 cloudserver op CloudSigma.
PostgreSQL installeren
Voer de volgende opdrachten uit om PostgreSQL te downloaden en te installeren:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
Het installatieprogramma maakt een standaardgebruiker aan – “Postgres” om onder te werken. We zullen deze gebruiker voor het grootste deel van deze handleiding gebruiken. U kunt inloggen op de gebruiker met deze opdracht:
|
1 |
sudo su - postgres |
Nu PostgreSQL is geïnstalleerd, leert u hoe het met machtigingen omgaat. U kunt ook onze handleiding over het instellen van PostgreSQL op Ubuntu volgen voor een gedetailleerde stapsgewijze handleiding van het installatieproces.
PostgreSQL-machtigingsconcepten
Postgres beheert de machtigingen via het concept van “rollen.” Met rollen is er geen onderscheid tussen gebruikers en groepen. Rollen zijn flexibeler dan het traditionele Unix-systeem van gebruikers en groepen. Een rol kan bijvoorbeeld optreden als lid van een andere rol en de machtigingen ervan overerven.
Rollen bekijken in PostgreSQL
Om de rollen in PostgreSQL te bekijken, moet u eerst inloggen op de prompt met de volgende opdracht:
|
1 |
psql |
Voer vervolgens het volgende uit om de rollen te bekijken:
|
1 |
\du |

Momenteel is er slechts één standaardrol met alle privileges.
Rollen maken in PostgreSQL
U kunt rollen voor Postgres maken vanaf de opdrachtregel of vanuit de Postgres-shell. U kunt de volgende twee benaderingen proberen, waarna u zult zien hoe u machtigingen en toegangen beheert in PostgreSQL.
Rollen maken vanuit PostgreSQL
De eenvoudigste manier om rollen te maken is vanuit de prompt van Postgres. Dit kunt u doen met de volgende opdracht:
|
1 |
CREATE ROLE demo_role; |
Om te controleren of deze is gemaakt, voert u de opdracht uit:
|
1 |
\du |

Het geeft aan dat de nieuwe rol geen inlogmachtigingen heeft. U leert later in de handleiding hoe u dat kunt wijzigen.
Rollen maken vanaf de opdrachtregel
Het alternatief voor de bovenstaande methode is om de gebruiker vanaf de opdrachtregel aan te maken. Om de PostgreSQL-prompt af te sluiten, typt u het volgende:
|
1 |
\q |
U kunt een rol genaamd “test” maken met de volgende opdracht:
|
1 |
createuser test |
Zonsda u de bovenstaande opdracht hebt uitgevoerd, logt u in op psql en geeft u de rollen weer met de volgende opdrachten:
|
1 2 |
psql \du |

U kunt zien dat de op deze manier gemaakte gebruiker niet dezelfde kenmerken heeft.
Rollen verwijderen in PostgreSQL
U kunt eenvoudig rollen verwijderen in PostgreSQL met de volgende syntaxis:
|
1 |
DROP ROLE role_name; |
U kunt de demorol die we eerder hebben gemaakt verwijderen met de opdracht:
|
1 |
DROP ROLE demo_role; |

Als we proberen een rol te verwijderen die niet bestaat, zal dit gewoon een foutmelding geven. Om dat te zien, kunt u proberen dezelfde rol opnieuw te verwijderen:
|
1 |
DROP ROLE demo_role; |

Als u wilt dat de opdracht geen foutmelding geeft wanneer de rol niet bestaat, kunt u ‘IF EXISTS’ toevoegen aan de opdracht:
|
1 |
DROP ROLE IF EXISTS role_name; |
U kunt proberen de rol opnieuw te verwijderen met deze opdracht:
|
1 |
DROP ROLE IF EXISTS demo_role; |
Privileges definiëren bij het maken van een rol
Tot nu toe hebt u rollen gemaakt en verwijderd. In dit gedeelte maakt u rollen met gewijzigde machtigingen. Dit kunt u doen door de machtigingen voor de rol op te geven met de opdracht create:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Om de opties hiervoor te bekijken, kunt u de help openen met deze opdracht:
|
1 |
\h CREATE ROLE |

Als u een rol met inlogmachtigingen wilt maken, kunt u de opdracht als volgt opstellen:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Zoals we eerder hebben gezien, kun je ook de volgende opdracht gebruiken als je rollen met inlogrechten wilt maken:
|
1 |
CREATE USER role_name; |
Het enige verschil tussen de twee opdrachten is dat ‘CREATE USER’ de rol standaard inlogrechten geeft.
Privileges van rollen wijzigen in PostgreSQL
Tot nu toe heb je geprobeerd hoe je machtigingen kunt geven tijdens het maken van de gebruiker. In dit gedeelte ga je de machtigingen van de reeds gemaakte gebruikers wijzigen. De syntaxis voor de alter-opdracht is:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Als je wilt, kun je bijvoorbeeld de inlogrechten van de demo_role wijzigen in ‘inloggen’ met deze opdracht:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Om de gebruiker weer te laten inloggen, kun je de machtigingen wijzigen met de volgende opdracht:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
Inloggen als een andere gebruiker in PostgreSQL
PostgreSQL staat standaard alleen toe om lokaal in te loggen als je gebruikersnaam overeenkomt met de systeemgebruikersnaam. Om dit te omzeilen, kun je het inlogtype wijzigen of PostgreSQL configureren om de loopback-netwerkinterface te gebruiken. Deze interface verandert het verbindingstype in extern, zelfs als de verbinding lokaal is.
In dit gedeelte ga je de tweede optie proberen. Om te beginnen kun je het wachtwoord van de gebruiker instellen, zodat authenticatie mogelijk is.
Stel het wachtwoord van de ‘demo_user’ in met de volgende opdracht:
|
1 |
\password test |
Voer het wachtwoord in wanneer daarom wordt gevraagd en bevestig het. Zodra dit is gebeurd, kun je de PostgreSQL-interface afsluiten en terugkeren naar je normale systeemgebruiker:
|
1 2 |
\q exit |
PostgreSQL vereist dat je inlogt met een gebruikersnaam die overeenkomt met de gebruikersnaam van je besturingssysteem en dat je ook verbinding maakt met de database met dezelfde gebruikersnaam. Omdat je dat in dit geval niet doet, moet je expliciet de opties opgeven die je wilt gebruiken. Je kunt de volgende syntaxis gebruiken:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
user: De gebruikersnaam waarmee je verbinding wilt maken
DB: Een bestaande database waartoe je toegang hebt
-h 127.0.0.1: Geeft aan PostgreSQL aan dat je verbinding maakt via een netwerkinterface met de lokale machine. Deze optie maakt authenticatie mogelijk, zelfs als de gebruikersnaam niet overeenkomt met de systeemgebruikersnaam.
-W: Geeft aan PostgreSQL aan dat je een wachtwoord gaat invoeren
Om in te loggen met onze “test_user” kunnen we de volgende opdracht uitvoeren:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

Zodra je het wachtwoord invoert, ben je ingelogd op de shell. In ons voorbeeld gebruiken we de database ‘postgres’, de standaarddatabase die automatisch wordt aangemaakt tijdens de installatie.
In deze sessie zul je, afhankelijk van de gebruiker die je hebt gekozen om in te loggen, tegen het probleem aanlopen dat je niet de juiste machtigingen hebt om verschillende acties uit te voeren. De reden hiervoor is dat je de gebruiker nog niet voldoende machtigingen hebt gegeven om zaken te beheren.
In het volgende gedeelte ga je de vereiste machtigingen aan gebruikers verlenen. Eerst moet je de gebruiker terugveranderen naar een administratieve gebruiker:
|
1 2 3 |
\q sudo su - postgres psql |
Machtigingen beheren in PostgreSQL: Machtigingen verlenen in PostgreSQL
In PostgreSQL geldt dat als een database of tabel door een specifieke rol is gemaakt, alleen die rol machtigingen heeft om deze te wijzigen. De uitzondering hierop zijn de rollen met superuser-machtigingen. In dit gedeelte ga je machtigingen verlenen aan andere rollen. Je kunt machtigingen verlenen aan andere rollen met behulp van de instructie ‘GRANT’. De syntaxis is:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Je kunt een eenvoudige tabel maken om het commando uit te voeren:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Om de gemaakte tabel te bekijken, voer je het volgende commando uit:
|
1 |
\d |

Nu je een demo-tabel hebt, kun je privileges op de ‘demo’-tabel verlenen aan ‘demo_role’. Je kunt de rol het privilege ‘UPDATE’ geven met dit commando:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Je kunt alle machtigingen aan een rol verlenen door de machtiging op te geven als ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
Als je een specifieke machtiging wilt verlenen aan alle rollen op het systeem, kun je het trefwoord ‘public’ gebruiken in plaats van de rol, zoals in het volgende commando:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Je kunt alle verleende machtigingen bekijken met het volgende commando:
|
1 |
\z |
Machtigingen beheren in PostgreSQL: Machtigingen verwijderen in PostgreSQL
Je kunt eenvoudig machtigingen van een rol verwijderen met het commando ‘REVOKE’. Dit is zeer vergelijkbaar met het grant-commando:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
Net als bij GRANT kunnen we de trefwoorden – ‘ALL’ en ‘PUBLIC’ gebruiken om alle machtigingen te verlenen of machtigingen aan alle rollen te verlenen:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
Groepsrollen gebruiken in PostgreSQL
Om een breed beheer van machtigingen mogelijk te maken, zijn rollen flexibel genoeg om te worden gegroepeerd met andere rollen. Je kunt bijvoorbeeld een rol – ‘temporary_role’ maken en vervolgens ‘demo_role’ en ‘test_user’ aan die rol toevoegen:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO test_user; |
Nu kun je de machtigingen van deze twee rollen beheren door simpelweg de machtigingen van de rol ‘temporary_role’ te beheren. Dit maakt het beheer van machtigingen eenvoudiger. Je kunt de informatie over het rollidmaatschap bekijken met dit commando:
|
1 |
\du |

Elk groepslid kan namens de groep handelen door het commando ‘set role’ te gebruiken. Omdat de gebruiker ‘postgres’ een superuser is, kun je ‘set role’ gebruiken, zelfs als je geen lid bent van de groep:
|
1 |
SET ROLE temporary_role; |
Alle tabellen die je nu maakt, zijn eigendom van temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Om het eigendom van de tabel te controleren, voer je het volgende commando uit:
|
1 |
\d |

Je kunt zien dat de rol ‘temporary_role’ eigenaar is van de nieuwe tabel en de sequence die is gekoppeld aan het gegevenstype serial. Om terug te keren naar de oorspronkelijke rolmachtigingen, voer je het volgende commando uit:
|
1 |
RESET ROLE; |
Als je wilt dat de rol alle privileges heeft van de rol waartoe deze behoort, kun je de eigenschap ‘inherit’ opgeven met het commando ‘alter role’:
|
1 |
ALTER ROLE test_user INHERIT; |
Met het bovenstaande commando heeft ‘test_user’ alle privileges gekregen van de rollen waartoe deze behoort. Om een rol te verwijderen, kun je het commando ‘drop role’ gebruiken:
|
1 |
DROP ROLE temporary_users; |

Het bovenstaande commando geeft een foutmelding omdat er objecten zijn, zoals de tabel ‘hello’, die ervan afhankelijk zijn. Om deze te kunnen verwijderen, kun je het eigendom van de tabel overdragen aan een andere rol:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Je kunt controleren dat temporary_role nu geen tabellen meer bezit met het volgende commando:
|
1 |
\d |

Je kunt de ‘temporary_role’ nu verwijderen omdat deze geen afhankelijkheden meer heeft:
|
1 |
DROP ROLE temporary_users; |
Hoewel de bovenstaande opdracht de rol temporary_users zal verwijderen, worden de voormalige leden van de rolgroep niet verwijderd.
Conclusie
Je hebt de tutorial voltooid en nu weet je hoe je machtigingen in PostgreSQL beheert. Je kunt de machtigingen eenvoudig beheren. Weten hoe je machtigingen beheert, zorgt ervoor dat je applicaties toegang hebben tot de vereiste databases, terwijl ze geen toegang hebben tot andere databases die door een andere applicatie worden gebruikt.
Veel computerplezier!


Reacties
Nog geen reacties. Wees de eerste.