Hoofdstuk 18. Database Rollen en Privileges
On oktober 25, 2021 by adminDatabase rollen zijn conceptueel volledig gescheiden van operating systeem gebruikers. In de praktijk kan het handig zijn om een overeenkomst te handhaven, maar dit is niet vereist. Database rollen zijn globaal over een database cluster installatie (en niet per individuele database). Om een rol aan te maken gebruikt u het SQL commando CREATE ROLE:
CREATE ROLE name;
naam volgt de regels voor SQL-identifiers: ofwel onopgesmukt zonder speciale tekens, ofwel dubbel aanhalingstekens. (In de praktijk zult u meestal extra opties, zoals LOGIN, aan het commando willen toevoegen. Meer details volgen hieronder). Om een bestaande rol te verwijderen, gebruikt u het analoge DROP ROLE commando:
DROP ROLE name;
Voor het gemak worden de programma’s createuser en dropuser geleverd als wrappers rond deze SQL commando’s die kunnen worden aangeroepen vanaf de commandoregel in de commandoregel:
createuser namedropuser name
Om de set van bestaande rollen te bepalen, onderzoekt u de pg_roles systeemcatalogus, bijvoorbeeld
SELECT rolname FROM pg_roles;
Het psql programma’s meta-commando is ook nuttig om de bestaande rollen op te sommen.
Om het databasesysteem op te starten, bevat een pas geïnitialiseerd systeem altijd één voorgedefinieerde rol. Deze rol is altijd een “superuser”, en heeft standaard (tenzij gewijzigd bij het uitvoeren van initdb) dezelfde naam als de gebruiker van het besturingssysteem die het databasepluster heeft geïnitialiseerd. Gewoonlijk zal deze rol postgres heten. Om meer rollen te kunnen aanmaken, moet eerst verbinding worden gemaakt met deze initiële rol.
Elke verbinding met de databaseserver wordt gemaakt onder de naam van een bepaalde rol, en deze rol bepaalt de initiële toegangsrechten voor commando’s die via die verbinding worden uitgevoerd. De rolnaam die voor een bepaalde databaseverbinding moet worden gebruikt, wordt op een toepassingsspecifieke manier aangegeven door de cliënt die het verbindingsverzoek initieert. Het programma psql gebruikt bijvoorbeeld de opdrachtregeloptie -U om aan te geven met welke rol verbinding gemaakt moet worden. Veel applicaties nemen standaard de naam van de huidige gebruiker van het besturingssysteem aan (inclusief createuser en psql). Daarom is het vaak handig om een overeenkomst in naamgeving te handhaven tussen rollen en gebruikers van het besturingssysteem.
De set van database rollen waarmee een gegeven client verbinding kan maken wordt bepaald door de client authenticatie setup, zoals uitgelegd in Hoofdstuk 20. (Dus, een client is niet noodzakelijkerwijs beperkt tot verbinding te maken als de rol met dezelfde naam als zijn besturingssysteem gebruiker, net zoals een persoon login naam hoeft niet overeen te komen met haar echte naam). Omdat de rol-identiteit bepaalt welke rechten een aangesloten client heeft, is het belangrijk om dit zorgvuldig te configureren als je een omgeving met meerdere gebruikers opzet.
Geef een antwoord