SQL Academy · Oppitunti

Saraketason käyttöoikeudet

Piilottakaa arkaluonteiset sarakkeet.

Oppitunti 3/413 vaihetta

Saraketason käyttöoikeudet on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Miksi saraketason käyttöoikeudet ovat tärkeitä

Kaikkien käyttäjien ei kuulu nähdä kaikkia taulun sarakkeita. salary-sarake, password_hash tai credit_card_number voi olla samassa taulussa täysin julkisten tietojen, kuten käyttäjänimen tai sähköpostiosoitteen, kanssa.

Saraketason käyttöoikeuksilla voitte myöntää pääsyn tiettyihin sarakkeisiin koko taulun sijaan ja pitää arkaluonteiset tiedot piilossa käyttäjiltä, joilla ei ole perusteltua syytä nähdä niitä.

GRANT koko taululle

Oletusarvoisesti GRANT SELECT ON table antaa roolille oikeuden lukea kaikkia sarakkeita. Tämä sopii julkisille tiedoille, mutta aiheuttaa ongelmia, jos taulussa on sekä arkaluonteisia että muita sarakkeita.

Alla oleva kysely antaa analyst-roolille täydet lukuoikeudet employees-tauluun — myös salary- ja SSN-sarakkeisiin.

GRANT SELECT ON employees TO analyst;

Saraketasoisen GRANT-komennon syntaksi

PostgreSQL (ja standardi SQL) sallii tiettyjen sarakkeiden nimien luettelemisen GRANT-lauseessa. Syntaksi on:

GRANT privilege (col1, col2) ON table TO role;

Alla oleva esimerkki antaa analyst-roolille oikeuden lukea vain sarakkeita id, name ja department — mutta EI sarakkeita salary tai ssn.

GRANT SELECT (id, name, department) ON employees TO analyst;

Saraketason käyttöoikeuksien tarkistaminen

Voitte tarkastella PostgreSQL:n saraketason käyttöoikeuksia tekemällä kyselyn näkymään information_schema.column_privileges. Se näyttää, kenelle mikäkin käyttöoikeus kuuluu ja mihin sarakkeeseen se kohdistuu.

SELECT grantee, table_name, column_name, privilege_type
FROM information_schema.column_privileges
WHERE table_name = 'employees'
ORDER BY grantee, column_name;

Mitä tapahtuu ilman oikeita sarakkeita

Jos rooli yrittää lukea saraketta, johon sille ei ole myönnetty käyttöoikeutta, tietokanta palauttaa permission denied -virheen. Vain sallittuihin sarakkeisiin viittaavat kyselyt onnistuvat.

Jos oletetaan, että analyst-roolille on myönnetty vain sarakkeet id, name ja department, alla oleva ensimmäinen kysely epäonnistuu ja toinen onnistuu.

-- This will fail for analyst (no permission on salary):
-- SELECT id, name, salary FROM employees;

-- This succeeds:
SELECT id, name, department FROM employees;

Saraketason UPDATE-oikeus

Saraketason rajoitukset koskevat myös UPDATE-komentoa. Voitte sallia roolille vain tiettyjen sarakkeiden päivittämisen — esimerkiksi antaa helpdesk-roolille oikeuden päivittää käyttäjän status-saraketta ilman oikeutta muuttaa hänen email- tai password_hash-sarakettaan.

GRANT UPDATE (status) ON users TO helpdesk;

-- helpdesk can now run:
UPDATE users SET status = 'suspended' WHERE id = 42;

Sarakkeiden piilottaminen näkymillä

Toinen yleinen tapa on luoda näkymä, joka näyttää vain turvalliset sarakkeet, ja myöntää käyttöoikeus näkymään perustaulun sijaan. Tämä toimii kaikissa tietokannoissa, ei vain niissä, jotka tukevat saraketason GRANT-komentoja.

CREATE VIEW public_employees AS
SELECT id, name, department, hire_date
FROM employees;

GRANT SELECT ON public_employees TO analyst;

Saraketason käyttöoikeuksien poistaminen

Aivan kuten GRANT-komentoa, myös REVOKE-komentoa voi käyttää sarakeluettelon kanssa tiettyjen sarakkeiden käyttöoikeuksien poistamiseen. Jos roolilla oli laaja taulutason käyttöoikeus, se on ehkä ensin poistettava kokonaan, ennen kuin sille myönnetään rajoitettu saraketason käyttöoikeus.

-- Remove all SELECT on the table first
REVOKE SELECT ON employees FROM analyst;

-- Then grant only safe columns
GRANT SELECT (id, name, department) ON employees TO analyst;

Saraketason käyttöoikeudet ja rivitason suojaus yhdessä

Saraketason käyttöoikeudet ja rivitason suojaus (RLS) täydentävät toisiaan. RLS hallitsee sitä, mitkä rivit käyttäjä voi nähdä, kun taas saraketason käyttöoikeudet hallitsevat sitä, mitkä sarakkeet näiltä riveiltä näkyvät.

Yhdessä ne muodostavat tehokkaan kaksiulotteisen käyttöoikeuksien hallinnan: rajoittakaa rivijoukkoa JA piilottakaa arkaluonteiset kentät jokaiselta riviltä.

-- RLS policy: employees can see only their own row
CREATE POLICY own_row ON employees
  FOR SELECT
  USING (user_id = current_user_id());

-- Column grant: hide salary even for own row
GRANT SELECT (id, name, department) ON employees TO employee_role;

SECURITY DEFINER -funktioiden käyttäminen

Kun tarvitsette yksinkertaisia sarakeluetteloita tarkempaa logiikkaa, SECURITY DEFINER -funktio voi toimia siltana. Funktio suoritetaan sen omistajan oikeuksilla (omistajalla on täydet saraketason käyttöoikeudet), ja se palauttaa vain itse valitsemansa tiedot kutsujasta riippumatta.

CREATE OR REPLACE FUNCTION get_employee_summary(emp_id INT)
RETURNS TABLE(id INT, name TEXT, department TEXT)
SECURITY DEFINER
LANGUAGE sql AS
$$
  SELECT id, name, department
  FROM employees
  WHERE id = emp_id;
$$;

GRANT EXECUTE ON FUNCTION get_employee_summary(INT) TO analyst;

Käytännön suunnittelu: kerroksittainen sarakesuojaus

Vankka tuotantomalli yhdistää kolme kerrosta:

  1. Taulun omistajuus — vain sovelluksen palvelutili omistaa perustaulun.
  2. Näkymät tai sarakekohtaiset GRANT-komennot — lukuroolit saavat käyttöoikeuden vain ei-arkaluonteisiin sarakkeisiin.
  3. Auditointisarakkeet — kirjatkaa triggereillä, mikä käyttäjä ja aikaleima käsitteli arkaluonteisia tietoja.

Näin varmistetaan, että vaikka roolille myönnettäisiin yhdessä kerroksessa vahingossa liikaa oikeuksia, muut kerrokset suojaavat silti tietoja.

-- Layer 1: revoke public access
REVOKE ALL ON employees FROM PUBLIC;

-- Layer 2: expose safe columns via view
CREATE VIEW employee_public AS
SELECT id, name, department, hire_date FROM employees;

GRANT SELECT ON employee_public TO reporting_role;

-- Layer 3: audit trigger logs sensitive field reads (pseudocode)
-- CREATE TRIGGER audit_salary AFTER SELECT ON employees ...

Pikatesti

Mikä SQL-lause antaa hr_viewer-roolille oikeuden lukea vain name- ja department-sarakkeita employees-taulusta?

Yhteenveto: saraketason käyttöoikeudet

Saraketason käyttöoikeuksilla voitte rajoittaa pääsyn yksittäisiin kenttiin kokonaisten taulujen sijaan ja pitää arkaluonteiset tiedot, kuten palkat, SSN-tunnukset ja salasanatiivisteet, piilossa oikeudettomilta rooleilta.

Keskeiset opit:

  • Käyttäkää GRANT SELECT (col1, col2) ON table TO role -komentoa luettavien sarakkeiden rajoittamiseen.
  • Käyttäkää REVOKE-komentoa sarakeluettelon kanssa tietyn sarakkeen käyttöoikeuden poistamiseen.
  • Näkymät ovat siirrettävä vaihtoehto, joka toimii kaikissa tietokannoissa.
  • Yhdistäkää saraketason käyttöoikeudet RLS:ään kaksiulotteisen käyttöoikeuksien hallinnan toteuttamiseksi.
  • SECURITY DEFINER -funktiot mahdollistavat ohjelmallisen saraketason suodatuksen ja lisälogiikan.

Johdonmukaisesti sovellettuna saraketason suojaus on yksi yksinkertaisimmista ja tehokkaimmista tavoista toteuttaa vähimpien oikeuksien periaate tietokerroksessa.

Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”Saraketason käyttöoikeudet” ilmainen?

Kyllä – oppitunnin ”Saraketason käyttöoikeudet” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Saraketason käyttöoikeudet”?

Piilottakaa arkaluonteiset sarakkeet. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Saraketason käyttöoikeudet”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Roolit ja käyttöoikeudet
  2. Rivitason tietoturvakäytännöt
  3. Saraketason käyttöoikeudet
  4. Käyttöoikeuksien auditointi
← Takaisin: SQL Academy