Roller, Postgres
Skapa roller i Postgres
En roll i Postgres kan äga sina egna databasobjekt och ha databasprivilegier. Man kan se en roll som en användare, en grupp eller båda beroende på hur det används. För att kunna skapa en roll måste man ha privilegiet CREATEROLE eller vara en superuser.
Roller definieras på klusternivå och gäller för alla databaser i klustret.
Kommandot för att skapa en roll är
CREATE ROLE name [ [ WITH ] option [ ... ] ]
Name är namnet på rollen. Option förklaras här
SUPERUSER / NOSUPERUSER
En superuser står över restriktioner i databasen. Använd enbart när det verkligen behövs. För att tilldela en superuserroll måste man själv vara superuser. Standard är NOSUPERUSER.
CREATEDB / NOCREATEDB
Avgör om en roll kan skapa en databas. Standard är NOCREATEDB.
CREATEROLE / NOCREATEROLE
Bestämmer om en roll kan skapa, ändra, ta bort, kommentera och ändra "security label" för andra roller. Standard är NOCREATEROLE.
INHERIT / NOINHERIT
Detta påverkar "arv" när en roll läggs till som en medlem av en annan roll. Standard är INHEIT.
LOGIN / NOLOGIN
Styr ifall en roll har tillåtelse att logga in eller ej. En roll med detta attribut kan betraktas som en användare. Utan detta attribut kan en sådan roll vara lämpligt för att hantera databasrättigheter. Standard är NOLOGIN utom när CREATE ROLE används med sin alternativa stavning CREATE USER.
REPLICATION / NOREPLICATION
Denna behövs för att en roll ska vara en "replication role" och kunna ansluta till en server i replication mode. och för att kunna skapa eller droppa replikering. Detta är ett högt privilegie som bara ska användas för roller som används för replikering. Standard är NOREPLICATION.
BYPASSRLS / NOBYPASSRLS
Avgör om en roll kan gå förbi varje lågnivå säkerhetspolicy (RLS). Standard är NOBYPASSRLS. Notera att pg_dump sätter row_security till OFF som standard för att säkerställa att allt innehåll dumpas ut. Om användaren som kör pg_dump inte har korrekta rättigheter kommer ett felmeddelande att returneras. Superusers och tabellägaren går alltid förbi RLS i samband med pg_dump.
CONNECTION LIMIT connlimit
Om en roll kan logga in, specificerar detta hur många samtidiga anslutningar denna roll kan ha. -1 (standard) betyder att det inte finns någon begränsning. Detta innefattar enbart vanliga anslutningar. Varken preparerade transaktioner eller anslutningar startade i bakgrunden räknas.
[ ENCRYPTED ] PASSWORD 'password' / PASSWORD NULL
Sätter lösenord för rollen. Ett lösenord är enbart användbart i samband med LOGIN-attributet. Anger man inget lösenord sätts det till null och man kan inte logga in med ett lösenord för den användaren.
Undvik att sätta ett tomt lösenord. Gör man det sätts det till null.
Lösenordet sparas alltid krypterat i systemkatalogen. Argumentet ENCRYPTED finns endast med för bakåtkompatibilitet.
VALID UNTIL 'timestamp'
Efter att 'timestamp' har passerats är rollens lösenord inte längre giltigt. Standard är att det inte finns något utgångsdatum.
IN ROLE role_name
Gör så att den nya rollen automatiskt adderas som en medlem av den existerande rollen. Det nya medlemskapet har SET enabled och ADMIN disabled. INHERIT vill bli enabled såvida inte NOINHERIT anges.
ROLE role_name
ROLE gör så att specificerade existerande roller automatiskt adderas som medlemmar, med SET enabled. Detta gör så att den nya rollen blir en "grupp".
ADMIN role_name
ADMIN har samma effekt som ROLE men de namngivna rollerna läggs till som medlemmar på den nya rollen med ADMIN påslaget vilket ger dem rätten att granta medlemskap i den nya rollen till andra.
SYSID uid
Detta ignoreras men är med för bakåtkompatibilitet.
Noteringar
Redigera roller med ALTER ROLE och ta bort roller med DROP ROLE. Alla attribut skapade med CREATE ROLE kan modifieras med ALTER ROLE.
Exempel
Skapa en roll som kan logga in men utan lösenord
CREATE ROLE jonathan LOGIN;
Skapa en roll med ett lösenord (create user är samma som create role men det innefattar LOGIN)
CREATE USER davide WITH PASSWORD 'jw8s0F4';
Skapa en roll med lösenrod som är giltigt till och med utgången av 2004.
CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01';
Skapa en roll som kan skapa database och managera roller
CREATE ROLE admin WITH CREATEDB CREATEROLE;