postgresql
Rolbeheer
Zoeken…
Syntaxis
CREATE ROLE name [ [ WITH ] option [ ... ] ]
CREATE USER name [ [ WITH ] option [ ... ] ]
where option can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp' | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid
Maak een gebruiker met een wachtwoord aan
Over het algemeen moet u vermijden de standaarddatabaserol (vaak postgres
) in uw toepassing te gebruiken. U moet in plaats daarvan een gebruiker met lagere bevoegdheden maken. Hier maken we er een genaamd niceusername
en geven het een wachtwoord very-strong-password
CREATE ROLE niceusername with PASSWORD 'very-strong-password' LOGIN;
Het probleem daarmee is dat query's die in de psql
console worden getypt, worden opgeslagen in een geschiedenisbestand .psql_history
in de .psql_history
van de gebruiker en mogelijk ook worden vastgelegd in het logboek van de PostgreSQL-databaseserver, waardoor het wachtwoord wordt blootgelegd.
Om dit te voorkomen, gebruikt u de opdracht \password
om het gebruikerswachtwoord in te stellen. Als de gebruiker die de opdracht geeft een superuser is, wordt het huidige wachtwoord niet gevraagd. (Moet superuser zijn om wachtwoorden van superusers te wijzigen)
CREATE ROLE niceusername with LOGIN;
\password niceusername
Maak een rol en bijpassende database
Om een bepaalde toepassing te ondersteunen, maakt u vaak een nieuwe rol en database om aan te passen.
De shell-opdrachten die moeten worden uitgevoerd, zijn de volgende:
$ createuser -P blogger
Enter password for the new role: ********
Enter it again: ********
$ createdb -O blogger blogger
Dit veronderstelt dat pg_hba.conf
correct is geconfigureerd, wat er waarschijnlijk als volgt uitziet:
# TYPE DATABASE USER ADDRESS METHOD
host sameuser all localhost md5
local sameuser all md5
Bevoegdheden verlenen en intrekken.
Stel dat we drie gebruikers hebben:
- De beheerder van de database> admin
- De applicatie met volledige toegang voor haar gegevens> read_write
- De alleen-lezen toegang> alleen lezen
--ACCESS DB
REVOKE CONNECT ON DATABASE nova FROM PUBLIC;
GRANT CONNECT ON DATABASE nova TO user;
Met de bovenstaande vragen kunnen niet-vertrouwde gebruikers geen verbinding meer maken met de database.
--ACCESS SCHEMA
REVOKE ALL ON SCHEMA public FROM PUBLIC;
GRANT USAGE ON SCHEMA public TO user;
De volgende reeks vragen trekt alle rechten van niet-geverifieerde gebruikers in en biedt een beperkte reeks rechten voor de gebruiker read_write
.
--ACCESS TABLES
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC ;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only ;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO read_write ;
GRANT ALL ON ALL TABLES IN SCHEMA public TO admin ;
--ACCESS SEQUENCES
REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO read_only; -- allows the use of CURRVAL
GRANT UPDATE ON ALL SEQUENCES IN SCHEMA public TO read_write; -- allows the use of NEXTVAL and SETVAL
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO read_write; -- allows the use of CURRVAL and NEXTVAL
GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO admin;
Wijzig het standaard zoekpad van de gebruiker
Met de onderstaande opdrachten kan het standaardzoekpad van de gebruiker worden ingesteld.
- Controleer het zoekpad voordat u het standaardschema instelt.
postgres=# \c postgres user1
You are now connected to database "postgres" as user "user1".
postgres=> show search_path;
search_path
----------------
"$user",public
(1 row)
- Stel
search_path
met opdrachtalter user
om een nieuw schemamy_schema
toe te voegen
postgres=> \c postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# alter user user1 set search_path='my_schema, "$user", public';
ALTER ROLE
- Controleer het resultaat na uitvoering.
postgres=# \c postgres user1
Password for user user1:
You are now connected to database "postgres" as user "user1".
postgres=> show search_path;
search_path
-------------
my_schema, "$user", public
(1 row)
Alternatief:
postgres=# set role user1;
postgres=# show search_path;
search_path
-------------
my_schema, "$user", public
(1 row)
Verleen toegangsrechten voor objecten die in de toekomst zijn gemaakt.
Stel dat we three users
:
- De beheerder van de database>
admin
- De applicatie met volledige toegang voor haar gegevens>
read_write
- De alleen-lezen toegang>
read_only
Met onderstaande query's kunt u toegangsrechten instellen voor objecten die in de toekomst in een bepaald schema worden gemaakt.
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO read_only;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT,INSERT,DELETE,UPDATE ON TABLES TO read_write;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT ALL ON TABLES TO admin;
Of u kunt toegangsrechten instellen voor objecten die in de toekomst door de opgegeven gebruiker worden gemaakt.
ALTER DEFAULT PRIVILEGES FOR ROLE admin GRANT SELECT ON TABLES TO read_only;
Creëer alleen-lezen gebruiker
CREATE USER readonly WITH ENCRYPTED PASSWORD 'yourpassword';
GRANT CONNECT ON DATABASE <database_name> to readonly;
GRANT USAGE ON SCHEMA public to readonly;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;