55 lines
2.4 KiB
SQL
55 lines
2.4 KiB
SQL
-- =====================================================================
|
|
-- TeeCup — dedikert applikasjonsrolle + grants (migrasjon 002)
|
|
-- =====================================================================
|
|
-- Kjøres av en admin/superbruker (f.eks. teeoff_admin).
|
|
--
|
|
-- HVORFOR: RLS beskytter IKKE mot en superbruker. Postgres lar superuser og
|
|
-- roller med BYPASSRLS hoppe fullstendig over alle policyer. Runtime-appen MÅ
|
|
-- derfor koble til med en rolle som verken er superuser eller har BYPASSRLS.
|
|
-- Denne rollen eier heller ikke tabellene (tabellene har dessuten FORCE RLS),
|
|
-- så den er alltid underlagt policyene.
|
|
--
|
|
-- Passord: sett det utenfra, ikke i denne fila. Kjør f.eks.:
|
|
-- psql -d teecup_db -v teecup_app_password="$(cat /path/to/secret)" \
|
|
-- -f 002_roles_and_grants.sql
|
|
-- (Aldri sjekk inn et ekte passord i git.)
|
|
-- =====================================================================
|
|
|
|
\set ON_ERROR_STOP on
|
|
|
|
-- --- Rolle (cluster-nivå: opprett bare hvis den ikke finnes) ----------
|
|
-- Eksplisitt NOSUPERUSER / NOBYPASSRLS — dette er hele poenget.
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'teecup_app') THEN
|
|
CREATE ROLE teecup_app
|
|
LOGIN
|
|
PASSWORD :'teecup_app_password'
|
|
NOSUPERUSER
|
|
NOCREATEDB
|
|
NOCREATEROLE
|
|
NOBYPASSRLS
|
|
INHERIT;
|
|
END IF;
|
|
END $$;
|
|
|
|
-- --- Grants (kjøres mens du er koblet til teecup_db) ------------------
|
|
GRANT CONNECT ON DATABASE teecup_db TO teecup_app;
|
|
GRANT USAGE ON SCHEMA public TO teecup_app;
|
|
|
|
-- Runtime-appen trenger vanlig DML på domenetabellene, men skal IKKE kunne
|
|
-- endre skjema eller policyer (det følger av at den ikke eier tabellene og
|
|
-- ikke er superuser).
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO teecup_app;
|
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO teecup_app;
|
|
|
|
-- Samme rettigheter automatisk på fremtidige tabeller/sekvenser laget av
|
|
-- migrasjonseieren.
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO teecup_app;
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
GRANT USAGE, SELECT ON SEQUENCES TO teecup_app;
|
|
|
|
-- MERK: teecup_app får bevisst IKKE rettigheter til å endre RLS. Bootstrap av
|
|
-- nye organisasjoner (INSERT i organization) skjer via en privilegert sti i
|
|
-- auth-laget, ikke med runtime-rollen.
|