Terug naar blog

Hoe u rollen gebruikt en machtigingen beheert in PostgreSQL

Hoe u rollen gebruikt en machtigingen beheert in PostgreSQL

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:

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:

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:

Voer vervolgens het volgende uit om de rollen te bekijken:

show roles manage permissions in PostgreSQL

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:

Om te controleren of deze is gemaakt, voert u de opdracht uit:

create role from prompt

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:

U kunt een rol genaamd “test” maken met de volgende opdracht:

Zonsda u de bovenstaande opdracht hebt uitgevoerd, logt u in op psql en geeft u de rollen weer met de volgende opdrachten:

creating user from commandline

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:

U kunt de demorol die we eerder hebben gemaakt verwijderen met de opdracht:

drop 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:

drop role fail

Als u wilt dat de opdracht geen foutmelding geeft wanneer de rol niet bestaat, kunt u ‘IF EXISTS’ toevoegen aan de opdracht:

U kunt proberen de rol opnieuw te verwijderen met deze opdracht:

drop role if exists

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:

Om de opties hiervoor te bekijken, kunt u de help openen met deze opdracht:

help create user

Als u een rol met inlogmachtigingen wilt maken, kunt u de opdracht als volgt opstellen:

create role with login manage permissions in PostgreSQL

Zoals we eerder hebben gezien, kun je ook de volgende opdracht gebruiken als je rollen met inlogrechten wilt maken:

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:

Als je wilt, kun je bijvoorbeeld de inlogrechten van de demo_role wijzigen in ‘inloggen’ met deze opdracht:

alter nologin

Om de gebruiker weer te laten inloggen, kun je de machtigingen wijzigen met de volgende opdracht:

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:

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:

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:

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:

postgresql login through network interface manage permissions in PostgreSQL

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:

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:

Je kunt een eenvoudige tabel maken om het commando uit te voeren:

Om de gemaakte tabel te bekijken, voer je het volgende commando uit:

create table manage permissions in PostgreSQL

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:

Je kunt alle machtigingen aan een rol verlenen door de machtiging op te geven als ‘ALL’:

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:

Je kunt alle verleende machtigingen bekijken met het volgende commando:

granted permissions

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:

Net als bij GRANT kunnen we de trefwoorden – ‘ALL’ en ‘PUBLIC’ gebruiken om alle machtigingen te verlenen of machtigingen aan alle rollen te verlenen:

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:

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:

role - group manage permissions in PostgreSQL

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:

Alle tabellen die je nu maakt, zijn eigendom van temporary_role:

Om het eigendom van de tabel te controleren, voer je het volgende commando uit:

create table with temporary_role

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:

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’:

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:

drop role manage permissions in PostgreSQL

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:

Je kunt controleren dat temporary_role nu geen tabellen meer bezit met het volgende commando:

check ownerships

Je kunt de ‘temporary_role’ nu verwijderen omdat deze geen afhankelijkheden meer heeft:

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!

author

Akshay Nagpal

Auteur · CloudSigma

Preslav Dobrev is een creatief ontwerper bij CloudSigma, met de nadruk op een consistente bedrijfsidentiteit door middel van traditionele en innovatieve marketingkanalen. Hij is bedreven in het samenvoegen van artistieke visie met strategische marketing om impactvolle merkverhalen te creëren.

Reacties

Nog geen reacties. Wees de eerste.