Role a práva v SQL

Role a práva v SQL

Proč řešit bezpečnostní role a přístupová práva v SQL

SQL databáze uchovávají kritická data a bývají „zdrojem pravdy“ pro celou organizaci. Nesprávně nastavené role a oprávnění vedou k únikům, porušení compliance a k chybám v aplikacích. Cílem řízení přístupů je kombinace minimálních práv (least privilege), oddělení povinností (segregation of duties), auditovatelnosti a snadné správy (role-based access control, RBAC). Správně navržený model práv je opakovatelný (Infrastructure as Code), testovatelný a škálovatelný pro více prostředí (dev/test/prod).

Autentizace vs. autorizace

  • Autentizace ověřuje identitu (hesla, Kerberos/AD, OAuth/OIDC, certifikáty). Zajišťuje ji DB engine nebo externí poskytovatel identity.
  • Autorizace rozhoduje, co identita smí. V SQL se realizuje pomocí ROLÍ, PRÁV (privileges/permissions) a objektů (database, schema, table, view, function atd.).

RBAC: role-based access control

RBAC mapuje uživatele na role a role na práva. Uživatelé obvykle nedostávají práva přímo, ale přes role. Výhody: menší počet grantů, auditovatelnost, konzistence napříč prostředími.

  • Role aplikační vrstvy: app_reader, app_writer, reporting, etl.
  • Role provozní: dba_admin (správa), security_officer (audit, klíče), release_engineer (migrace).
  • Role doménové: finance_read, hr_read, orders_write

Úrovně objektů a typy oprávnění

Úroveň Příklady objektů Typická práva
Server/Instance login, cluster, instance CONNECT, CREATE DATABASE, SUPERUSER (PG), sysadmin (SQL Server)
Databáze database, schema CONNECT, USAGE (schema), CREATE
Tabulka/Materializovaný pohled table, materialized view SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES
Sloupec/Řádek column, row policy Column-level SELECT/UPDATE; Row-Level Security/RLS
Kód function, procedure EXECUTE; SECURITY DEFINER/INVOKER

Princip minimálních práv a oddělení povinností

  • Minimální práva: udělujte pouze nezbytné operace pro konkrétní roli; preferujte SELECT přes VIEW místo přístupu k plné tabulce.
  • Oddělení povinností: nasazování schémat (migrace) odděleně od správy produkčních dat a od bezpečnostní správy klíčů.
  • Bez přímých práv pro uživatele: uživatelé patří do rolí; individuální výjimky evidujte a pravidelně revidujte.

PostgreSQL: role, default privileges a RLS

  • Role = uživatelé/skupiny: role mohou dědit jiné role (INHERIT), mít LOGIN a další atributy.
  • Schémata a USAGE: pro čtení je nutné USAGE na schema a SELECT na objekt.
  • Default privileges: ALTER DEFAULT PRIVILEGES pro budoucí objekty v rámci schématu – klíč pro konzistentní přístup po nasazení.
  • RLS (Row-Level Security): CREATE POLICY a ENABLE ROW LEVEL SECURITY na tabulce; filtrace na základě current_user nebo session proměnných.
  • SECURITY DEFINER: funkce mohou dočasně rozšířit práva – nutná opatrnost (omezení search_path a validace vstupů).

Příklad shrnutí práv:
CREATE ROLE app_reader;
GRANT USAGE ON SCHEMA sales TO app_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA sales TO app_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA sales GRANT SELECT ON TABLES TO app_reader;

SQL Server: loginy, uživatelé, schémata a DENY

  • Login vs. User: login (server) mapován na user (database). Role na úrovni serveru i databáze (db_datareader, db_datawriter, vlastní role).
  • Deny preceduje grant: DENY blokuje i při přítomném GRANT přes jinou roli – používejte opatrně.
  • Ownership chaining: přístup přes pohled/proceduru bez explicitního práva na tabulku; zajistí se izolace schémat.
  • Row-Level Security a maskování: CREATE SECURITY POLICY s predikáty; Dynamic Data Masking pro citlivé sloupce.

MySQL/MariaDB: privilegia a role

  • Privilege model: práva na úrovni serveru, DB, tabulky, sloupce; role jsou podporované (novější verze) a mapují se přes GRANT … TO role.
  • Definer/Invoker: definer pro views a routines určuje, pod čími právy se objekt spouští; kontrolujte SQL SECURITY.
  • Host scoping: uživatelé vázaní na hostitele (např. ‚app’@’10.%‘) pro zmenšení útoku.

Oracle Database: systémy rolí a VPD

  • System vs. object privileges: jemnozrnná správa, široké použití rolí.
  • Fine-Grained Access Control (VPD): zásady na úrovni řádků přes DBMS_RLS a sloupcové maskování.
  • Least privilege v PL/SQL: minimalizujte AUTHID DEFINER, preferujte AUTHID CURRENT_USER pokud to architektura umožní.

Row-Level Security (RLS), sloupcová práva a datové maskování

  • RLS: prosazuje datové filtry na úrovni enginu. Definujte jasné predikáty, dokumentujte a testujte side-effects (JOIN, plánovač).
  • Sloupcová práva: omezte přístup ke sloupcům s PII/PHI (např. jen hashované e-maily).
  • Maskování: dynamické (během dotazu) vs. statické (předávání datasetů). Mít jasná pravidla pro analytiky vs. operativu.

Pohledy, procedury a koncept „security boundary“

  • View jako brána: poskytujte pouze potřebné sloupce/řádky, skrývejte citlivé atributy a business logiku.
  • Stored procedures: kapsulují změny a validace; volající nepotřebuje INSERT/UPDATE na tabulce, pouze EXECUTE na proceduře.
  • Security definer: umožní provést úlohu s vyššími právy – pečlivě ošetřit search_path a vstupy proti SQL injection.

Schémata a jmenné prostory

  • Oddělení domén: např. core, finance, hr, analytics. Role dostávají USAGE/SELECT jen tam, kde je to nutné.
  • Search path hardening: u SECURITY DEFINER objektů fixujte schéma (např. SET search_path = core, pg_temp).

API přístup a aplikační identity

  • App role místo end-user účtů: aplikace využívá jednu či více technických identit s minimálními právy pro konkrétní workloady.
  • Session kontext: pro RLS nastavujte kontext (např. SET app.current_tenant = ‚A‘) výhradně v bezpečné vrstvě aplikace.
  • Rotace tajemství: krátkodobé tokeny, vaulty (KMS/HSM), princip „never log secrets“.

Šifrování a správa klíčů

  • Šifrování v klidu (TDE): minimalizuje dopad ztráty médií. Neřeší privilegované uživatele.
  • Šifrování po sloupcích/na úrovni aplikace: chrání citlivá data i vůči DB adminům; vyžaduje správu klíčů a indexační strategie.
  • Šifrování v přenosu: TLS povinně; vypněte slabé šifry, vynucujte certifikáty klienta, kde dává smysl.

Audit, monitoring a detekce anomálií

  • Auditní logy: přihlášení, změny rolí, GRANT/REVOKE, DDL/DDL-D, přístupy k citlivým objektům.
  • Detekce anomálií: neobvyklé dotazy, velké exporty, přístupy mimo pracovní dobu; alerty a playbooky.
  • Integrace SIEM: centralizace auditů a korelace s infrastrukturními událostmi.

Životní cyklus přístupů: recertifikace a Just-In-Time

  • Recertifikace práv: periodické potvrzení vlastníky dat; vyčištění „dočasných“ přístupů.
  • JIT přístupy: dočasné elevace (break-glass) se silným auditem a časovým omezením.
  • Offboarding: okamžité odebrání rolí při odchodu, rotace sdílených tajemství.

Migrace schémat a IaC pro bezpečnost

  • Migrační nástroje: zahrňte GRANT/REVOKE/ALTER DEFAULT PRIVILEGES do migračních skriptů.
  • Idempotentní skripty: používejte CREATE ROLE IF NOT EXISTS (dle vendorů) a kontrolní dotazy, aby bylo nasazení opakovatelné.
  • Testy bezpečnosti: v CI spusťte SQL testy: „uživatel X“ nesmí SELECT tabulku Y; „role Z“ smí pouze EXECUTE proceduru P.

Multi-tenancy a sdílené databáze

  • Hard tenancy: izolace per tenant (DB/Schema) – jednodušší bezpečnost, vyšší provozní náklady.
  • Soft tenancy: sdílené tabulky + RLS; nutná přísná disciplína v definici politik a testech.
  • Hybrid: sdílené read-only dimenze, izolované transakční tabulky per tenant.

Časté chyby a jak se jim vyhnout

  • Granty přímo uživatelům: nahraďte za role; jinak exploduje počet výjimek.
  • Zapomenuté default privileges: nově vytvořené tabulky nejsou přístupné – nadefinujte výchozí granty.
  • Široká práva „SELECT ON *.*“: neúměrný přístup k PII; používejte výhledy nebo sloupcová práva.
  • Nedostatečně zajištěný SECURITY DEFINER: zneužitelný search_path a nevalidované vstupy.
  • Deny peklo (SQL Server): nadužívání DENY komplikuje troubleshooting; preferujte precizní GRANT.

Kontrolní seznam pro návrh bezpečnostních rolí

  • Definované domény dat a mapování objektů na schémata.
  • Seznam uživatelských person a jejich požadovaných operací (CRUD) v jednotlivých doménách.
  • Návrh rolí a hierarchie (dědičnost) + oddělení povinností.
  • Definované default privileges pro budoucí objekty.
  • Volba RLS/sloupcových práv a případného maskování citlivých dat.
  • Proces recertifikace a JIT elevací.
  • Automatizované testy a audit v CI/CD.

Příkladová mini-matice práv (koncept)

Role Schéma Objekt Práva Poznámka
app_reader sales view v_orders SELECT RLS ve výhledu; bez přístupu na tabulky
app_writer sales proc upsert_order EXECUTE Bez INSERT/UPDATE na tabulce, validace v proceduře
reporting analytics v_sales_daily, v_customers SELECT Sloupcové maskování PII
etl staging všechny tabulky INSERT, UPDATE, DELETE, TRUNCATE Bez SELECT na produkčním schématu

Závěr

Bezpečnostní role a přístupová práva v SQL jsou základním stavebním kamenem odolné datové platformy. Úspěšný model kombinuje RBAC s principem minimálních práv, využívá RLS a sloupcová práva pro ochranu citlivých dat, kapsuluje změny přes procedury a výhledy, automatizuje správu (IaC, CI/CD) a pravidelně provádí audity i recertifikace. Správná architektura přístupů snižuje rizika, zvyšuje shodu s regulací a zjednodušuje provoz i rozvoj databázových řešení.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *