SQL Academy · Oppitunti

Roolit ja käyttöoikeudet

Myöntäkää ja perukaa käyttöoikeuksia GRANT- ja REVOKE-komennoilla.

Oppitunti 1/413 vaihetta

Roolit ja käyttöoikeudet on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.

Mitä roolit ja käyttöoikeudet ovat

SQL:ssä roolit ovat nimettyjä käyttöoikeusjoukkoja, jotka voidaan määrittää käyttäjille. Käyttöoikeudet määrittävät, mitä toimintoja käyttäjä tai rooli saa suorittaa tietokantaobjekteille, kuten tauluille, näkymille ja funktioille.

Sen sijaan että käyttöoikeudet myönnettäisiin jokaiselle käyttäjälle erikseen, luotte tarvittavat käyttöoikeudet sisältävän roolin ja määritätte sen sitten useille käyttäjille kerralla. Näin käyttöoikeuksien hallinta suuressa mittakaavassa on paljon helpompaa.

Roolin luominen

Luokaa PostgreSQL:ään uusi rooli CREATE ROLE-komennolla. Rooli voi määrityksistään riippuen edustaa yhtä käyttäjää tai käyttäjäryhmää.

Roolit luodaan oletusarvoisesti ilman käyttöoikeuksia — niille on erikseen myönnettävä oikeus käyttää objekteja.

CREATE ROLE readonly_user;
CREATE ROLE app_writer;
CREATE ROLE db_admin;

Taulun käyttöoikeuksien myöntäminen

GRANT-lauseke antaa roolille tai käyttäjälle luvan suorittaa tiettyjä toimintoja tietokantaobjektissa. Yleisiä taulutason käyttöoikeuksia ovat SELECT, INSERT, UPDATE ja DELETE.

Voitte myöntää yhden käyttöoikeuden tai useita käyttöoikeuksia kerralla erottamalla ne pilkuilla.

-- Grant SELECT only (read-only role)
GRANT SELECT ON employees TO readonly_user;

-- Grant multiple privileges
GRANT SELECT, INSERT, UPDATE ON orders TO app_writer;

Kaikkien käyttöoikeuksien myöntäminen

Jos rooli tarvitsee täydet oikeudet tauluun, voitte käyttää GRANT ALL PRIVILEGES-komentoa sen sijaan, että luettelisitte jokaisen käyttöoikeuden erikseen. Tämä myöntää kaikki määritettyyn objektiin soveltuvat käyttöoikeudet.

Käyttäkää ALL PRIVILEGES-määritettä harkiten — myöntäkää se vain rooleille, jotka todella tarvitsevat objektin täydellisen hallinnan.

-- Grant full access to db_admin on a table
GRANT ALL PRIVILEGES ON employees TO db_admin;

-- Or the shorthand form
GRANT ALL ON orders TO db_admin;

Käyttöoikeuksien peruuttaminen

REVOKE-lauseke poistaa roolilta tai käyttäjältä aiemmin myönnetyt käyttöoikeudet. Näin voitte rajoittaa käyttöoikeuksia, kun vaatimukset muuttuvat tai rooli ei enää tarvitse tiettyjä oikeuksia.

REVOKE-komennon jälkeen kohteena oleva rooli menettää määritetyn käyttöoikeuden nimettyyn objektiin välittömästi.

-- Remove UPDATE access from app_writer
REVOKE UPDATE ON orders FROM app_writer;

-- Remove all privileges from a role
REVOKE ALL PRIVILEGES ON employees FROM readonly_user;

Roolin määrittäminen käyttäjälle

PostgreSQL:ssä myös käyttäjät ovat rooleja — LOGIN-attribuutin sisältävä rooli voi muodostaa yhteyden tietokantaan. Voitte määrittää ryhmäroolin kirjautumisroolille komennolla GRANT role TO user.

Määrittämisen jälkeen käyttäjä perii kaikki kyseiselle roolille kuuluvat käyttöoikeudet, joten useiden käyttäjien käyttöoikeuksien hallinta on helppoa.

-- Create a login user
CREATE ROLE alice WITH LOGIN PASSWORD 'secret123';

-- Assign the readonly role to alice
GRANT readonly_user TO alice;

-- Alice can now SELECT on tables granted to readonly_user

Roolin poistaminen käyttäjältä

Poistakaa roolimäärittely käyttäjältä komennolla REVOKE role FROM user. Tämän jälkeen käyttäjä ei enää peri kyseisen roolin mukana tulleita käyttöoikeuksia.

Tämä on hyödyllistä, kun työntekijän vastuut muuttuvat tai hän lähtee organisaatiosta — voitte peruuttaa hänen roolinsa muuttamatta roolin omia käyttöoikeusmäärityksiä.

-- Remove the readonly role from alice
REVOKE readonly_user FROM alice;

-- Alice no longer has SELECT on tables via that role

Skeematason käyttöoikeudet

Ennen kuin rooli voi käyttää skeeman sisällä olevia objekteja, sillä on oltava skeeman USAGE-käyttöoikeus. Ilman sitä edes rooli, jolla on tietyn taulun SELECT-käyttöoikeus, ei voi lukea dataa, koska se ei pysty ratkaisemaan skeemapolkua.

Myöntäkää skeemalle aina USAGE-käyttöoikeus objekti- eli taulutason käyttöoikeuksien lisäksi.

-- Allow readonly_user to see inside the public schema
GRANT USAGE ON SCHEMA public TO readonly_user;

-- Then grant table-level privilege
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;

Tulevien objektien oletuskäyttöoikeudet

Kun skeemaan luodaan uusia tauluja, olemassa olevat roolit eivät saa automaattisesti käyttöoikeutta niihin. Käyttäkää ALTER DEFAULT PRIVILEGES-komentoa varmistaaksenne, että tietyn roolin myöhemmin luomat objektit ovat automaattisesti toisen roolin käytettävissä.

Näin vältätte yleisen ongelman, jossa äskettäin luotu taulu ei näy sovellusrooleille, ennen kuin joku muistaa suorittaa GRANT-komennon manuaalisesti.

-- Future tables created by the current user will be SELECTable by readonly_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT ON TABLES TO readonly_user;

-- Future tables will allow INSERT/UPDATE/DELETE for app_writer
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_writer;

WITH GRANT OPTION -asetus

Oletusarvoisesti käyttöoikeuden saanut rooli ei voi välittää tätä käyttöoikeutta muille rooleille. Kun lisäätte WITH GRANT OPTION-määritteen, vastaanottaja voi myöntää kyseisen käyttöoikeuden myös muille.

Käyttäkää tätä harkiten — roolista tulee käyttöoikeuksien luotettu delegointipiste, mikä voi vaikeuttaa auditointia, jos ominaisuutta käytetään liikaa.

-- app_writer can now grant SELECT on orders to other roles
GRANT SELECT ON orders TO app_writer WITH GRANT OPTION;

-- app_writer can then do:
-- GRANT SELECT ON orders TO reporting_role;

Myönnettyjen käyttöoikeuksien tarkasteleminen

PostgreSQL tallentaa käyttöoikeustiedot järjestelmäluettelonäkymiin. Voitte kysellä näkymää information_schema.role_table_grants nähdäksenne, mille rooleille mitäkin käyttöoikeuksia on myönnetty missäkin tauluissa.

Myös psql:n kenoviivakomento \dp tablename näyttää taulun käyttöoikeusluettelon tiiviissä muodossa.

-- List all table-level grants in the current database
SELECT grantee, table_schema, table_name, privilege_type
FROM information_schema.role_table_grants
WHERE table_schema = 'public'
ORDER BY grantee, table_name;

Pikatesti

Testatkaa, miten hyvin ymmärrätte SQL:n roolit ja käyttöoikeudet.

Kertaus: roolit ja käyttöoikeudet

Tässä oppitunnissa opitte, miten SQL hallitsee käyttöoikeuksia roolien ja käyttöoikeuksien avulla:

  • CREATE ROLE määrittää uuden roolin tai käyttäjätilin
  • GRANT määrittää roolille objektien käyttöoikeuksia (SELECT, INSERT, UPDATE, DELETE, ALL)
  • REVOKE poistaa kyseiset käyttöoikeudet
  • GRANT role TO user määrittää ryhmäroolin kirjautuvalle käyttäjälle, joka perii sen käyttöoikeudet
  • Roolilla on oltava skeeman USAGE-käyttöoikeus, ennen kuin se voi käyttää skeeman sisällä olevia objekteja
  • ALTER DEFAULT PRIVILEGES varmistaa, että tulevat objektit ovat automaattisesti käytettävissä
  • WITH GRANT OPTION sallii vastaanottajan delegoida käyttöoikeuden edelleen

Käyttöoikeuksien pitäminen mahdollisimman vähäisinä ja roolipohjaisina on turvallisen tietokantasuunnittelun keskeinen periaate — myöntäkää vain tarvittavat oikeudet ja perukaa ne viipymättä, kun niitä ei enää tarvita.

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 ”Roolit ja käyttöoikeudet” ilmainen?

Kyllä – oppitunnin ”Roolit ja 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 ”Roolit ja käyttöoikeudet”?

Myöntäkää ja perukaa käyttöoikeuksia GRANT- ja REVOKE-komennoilla. 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 1/4.

Kuinka kauan ”Roolit ja 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