Archive for the ‘PostgreSQL’ Category

PostgreSQL kontrollige alati public rolli õigusi

märts 7, 2019

Nooremprogrammeerijatele ei tohi kunagi anda admin õigusi, selle tõestuseks oli üks firma, kus avastasin, et GRANT ALL oli publicule antud. Siis kui küsisid, et miks te nii tegite, aga Googles oli mingi rida selline. Peale seda kahjuks pidin 10 minutit pead vastu lauda taguma ja mõtlema, mida koolides õpetatakse. Normaalne õiguste haldus käib nii, et tehakse Group role’d ja õigusi juhitakse läbi selle rolli.

Esmalt tehke enda baasis päring, vaadake üle, mis publicul lubatud

SELECT grantee, privilege_type ,table_name
FROM information_schema.role_table_grants
WHERE grantee = ‘PUBLIC’ and table_name NOT LIKE ‘pg_%’

Ja sequence õigused saate järgneva päringuga:

SELECT cl.oid, relname, pg_get_userbyid(relowner) AS seqowner, relacl, description,
(SELECT array_agg(label) FROM pg_seclabels sl1 WHERE sl1.objoid=cl.oid) AS labels,
(SELECT array_agg(provider) FROM pg_seclabels sl2 WHERE sl2.objoid=cl.oid) AS providers
FROM pg_class cl
LEFT OUTER JOIN pg_description des ON (des.objoid=cl.oid AND des.classoid=’pg_class’::regclass)
WHERE relkind = ‘S’
ORDER BY relname

Mina antud juhul eemaldasin publicult õigusi ükshaaval, et saaks vaadata kas mõni noorem programmeerijate süsteem kukub kokku või mitte:

REVOKE TRUNCATE ON ALL TABLES IN SCHEMA public FROM public;
REVOKE DELETE ON ALL TABLES IN SCHEMA public FROM public;
REVOKE UPDATE ON ALL TABLES IN SCHEMA public FROM public;
REVOKE INSERT ON ALL TABLES IN SCHEMA public FROM public;
REVOKE REFERENCES ON ALL TABLES IN SCHEMA public FROM public;
REVOKE TRIGGER ON ALL TABLES IN SCHEMA public FROM public;
REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM public;

Normaalses maailma tehakse nö Group role töötajatele

CREATE ROLE tootajate_roll NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

https://www.postgresql.org/docs/9.1/sql-grant.html

Aga siin peate ise otsustama, mis tegevusi töötaja roll tegelikkuses tohiks teha ja võimalik,
osade tabelite õigusi pärast eraldi muuta rollis. See lihtsalt näide

GRANT INSERT,SELECT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO tootajate_roll;