Kontrole pristupa za korisnike i uloge u SQL

Sigurnost je od najveće važnosti za administratore baze podataka koji žele zaštititi svoje gigabajte vitalnih poslovnih podataka od znatiželjnih očiju neovlaštenih autsajdera i inženjera koji pokušavaju nadmašiti njihov autoritet. Svi sustavi za upravljanje relacijskim bazama podataka pružaju neku vrstu unutarnjih sigurnosnih mehanizama osmišljenih za smanjenje tih prijetnji. Oni se kreću od jednostavne zaštite lozinke koju nudi Microsoft Access za složenu strukturu korisnika / uloge koju podržavaju napredne relacijske baze podataka kao što su Oracle i Microsoft SQL Server. Ovaj se članak fokusira na sigurnosne mehanizme zajedničke svim bazama podataka koje implementiraju strukturirani upitnik (ili SQL ). Zajedno ćemo proći kroz proces jačanja kontrole pristupa podacima i osiguranja sigurnosti vaših podataka.

Korisnici

Baza podataka bazirane na poslužiteljima podržavaju korisnički koncept sličan onome koji se koristi u računalnim operacijskim sustavima. Ako ste upoznati s hijerarhijom korisnika / grupe koja se nalazi u programima Microsoft Windows NT i Windows 2000, vidjet ćete da su grupe korisnika / uloga koje podržava SQL Server i Oracle vrlo slične.

Preporučljivo je da izradite pojedinačne korisničke račune za bazu podataka za svaku osobu koja će pristupiti vašoj bazi podataka. Tehnički je moguće dijeliti račune između korisnika ili jednostavno koristiti jedan korisnički račun za svaku vrstu korisnika koji treba pristupiti vašoj bazi podataka, ali jako sam obeshrabrio ovu praksu iz dva razloga. Prvo, on će eliminirati individualnu odgovornost - ako korisnik izvrši promjenu u vašoj bazi podataka (recimo, dajući vam povišicu od 5.000 USD), nećete ga moći pratiti na određenu osobu upotrebom revizijskih dnevnika. Nadalje, ako određeni korisnik napusti vašu organizaciju i želite ukloniti njegov pristup iz baze podataka, morat ćete promijeniti zaporku na koju se svi korisnici oslanjaju.

Metode za stvaranje korisničkih računa razlikuju se od platforme do platforme, a morat ćete potražiti DBMS specifičnu dokumentaciju za točan postupak. Korisnici Microsoft SQL Server-a trebali bi istražiti upotrebu pohranjene procedure sp_adduser. Administratori baze podataka Oracle pronaći će korisnu naredbu CREATE USER. Također biste željeli istražiti alternativne sheme provjere autentičnosti. Na primjer, Microsoft SQL Server podržava upotrebu integrirane sigurnosti sustava Windows NT. Prema ovoj shemi, korisnici se identificiraju u bazi podataka svojim korisničkim računima sustava Windows NT i ne moraju unijeti dodatni korisnički ID i lozinku za pristup bazi podataka. Taj je pristup iznimno popularan među administratorima baza podataka jer prebacuje teret upravljanja računom osoblju mrežne administracije i pruža jednostavnu jednokratnu prijavu krajnjem korisniku.

uloge

Ako ste u okruženju s malim brojem korisnika, vjerojatno ćete otkriti da je stvaranje korisničkih računa i dodjeljivanje dopuštenja izravno na njih dostatno za vaše potrebe. Međutim, ako imate velik broj korisnika, najvjerojatnije ćete biti preplavljeni teretom održavanja računa i odgovarajućih dopuštenja. Radi olakšavanja ovog tereta, relacijske baze podataka podržavaju pojam uloga. Uloga baza podataka funkcionira slično kao i za Windows NT grupe. Računi korisnika dodjeljuju se ulogama, a dozvole se dodjeljuju ulozi u cjelini, a ne pojedinačnim korisničkim računima. Na primjer, možemo stvoriti ulogu DBA, a zatim dodati korisničke račune našeg administrativnog osoblja na tu ulogu. Nakon što to učinimo, možemo dodijeliti određenu dozvolu svim sadašnjim (i budućim) administratorima jednostavno dodjeljivanjem dopuštenja ulozi. Još jednom, postupci za stvaranje uloga razlikuju se od platforme do platforme. Administratori MS SQL Server trebali bi istražiti pohranjenu proceduru sp_addrole dok Oracle DBAs trebaju koristiti CREATE ROLE sintaksu.

Odobravanje dozvola

Sada kada smo dodali korisnike u našu bazu podataka, vrijeme je za početak jačanja sigurnosti dodavanjem dopuštenja. Naš prvi korak bit će dodjeljivanje odgovarajućih dozvola za baze podataka našim korisnicima. To ćemo postići korištenjem SQL GRANT izjave.

Evo sintakse izjave:

GRANT
[ON ]
TO
[S GRANT OPTION]

Sada pogledajmo ovu izjavu line-by-line. Prva linija, GRANT , omogućuje nam da odredimo određene dozvole za tablice koje dajemo. To mogu biti dopuštenja na razini tablice (kao što su SELECT, INSERT, UPDATE i DELETE) ili dozvole za baze podataka (kao što su CREATE TABLE, ALTER DATABASE i GRANT). Više od jednog dopuštenja može se dodijeliti u jednoj izjavi GRANT, no dozvole na razini tablica i dozvole na razini baze podataka možda se ne mogu kombinirati u jednoj izjavi.

Druga linija, ON koristi se za određivanje pogođene tablice za dozvole na razini tablice. Ova je linija izostavljena ako dajemo dozvole na razini baze podataka. Treća linija određuje korisnika ili ulogu koja se dodjeljuju dozvolama.

Konačno, četvrta linija, uz GRANT OPTION, nije obavezna. Ako je ova linija uključena u izjavu, korisniku koji je pogođen dopušten je i za te iste dozvole drugim korisnicima. Imajte na umu da se WITH GRANT OPTION ne može odrediti kada su dozvole dodijeljene ulozi.

Primjeri

Pogledajmo nekoliko primjera. U našem prvom scenariju nedavno smo angažirali grupu od 42 operatora unosa podataka koji će dodavati i održavati evidencije korisnika. Moraju imati pristup informacijama u tablici korisnika, izmijeniti te informacije i dodati nove zapise u tablicu. Ne bi trebali moći potpuno izbrisati zapis iz baze podataka. Prvo, trebali bismo stvoriti korisničke račune za svakog operatora, a zatim ih sve dodati u novu ulogu, DataEntry. Zatim trebamo koristiti sljedeću SQL izraz kako bismo im omogućili odgovarajuće dopuštenje:

GRANT SELECT, INSERT, UPDATE
ON Kupci
TO DataEntry

I to je sve što je moguće! Sada proučimo slučaj u kojem dodjeljujemo dozvole na razini baze podataka. Želimo dopustiti članovima uloge DBA da dodaju nove tablice u našu bazu podataka. Nadalje, želimo da im drugi korisnici mogu dati dopuštenje da učine isto. Evo SQL izjave:

GRANT CREATE TABLE
U DBA
S GRANT OPTION

Napominjemo da smo uključili liniju WITH GRANT OPTION kako bismo osigurali da naši DBA mogu dodijeliti tu dozvolu drugim korisnicima.

Uklanjanje dozvola

Nakon što odobrimo dopuštenja, često se dokazuje da je potrebno naknadno opozvati. Srećom, SQL nam daje naredbu REVOKE za uklanjanje prethodno odobrenih dopuštenja. Evo sintakse:

REVOKE [GRANT OPTION FOR]
ON
FROM

Primijetit ćete da je sintaksa ove naredbe slična onoj naredbi GRANT. Jedina razlika je u tome što je s GRANOM OPTION-om navedeno na naredbenom retku REVOKE, a ne na kraju naredbe. Kao primjer, zamislimo da želimo opozvati Marijinu prethodno odobrenu dozvolu za uklanjanje zapisa iz baze podataka Kupaca. Koristili bismo sljedeću naredbu:

POVRATITE IZBJEGAVANJE
ON Kupci
OD Marije

I to je sve što je moguće! Postoji jedan dodatni mehanizam koji podržava Microsoft SQL Server koji je vrijedan spomena - naredbu DENY. Ta se naredba može upotrijebiti za izričito odbijanje dozvole korisniku koji bi inače imali kroz trenutnu ili buduću ulogu u članstvo. Evo sintakse:

DENY
ON
TO

Primjeri

Vratimo se na naš prethodni primjer, zamislimo da je Mary također bila članica uloga menadžera koji je također imao pristup tablici kupaca. Prethodna REVOKE izjava ne bi bila dovoljna da joj ne dopusti pristup stolu. Uklonit će joj dozvolu odobrenom putem izjave GRANT koja cilja na svoj korisnički račun, ali ne bi utjecala na dozvole stečene njezinim članstvom u ulozi menadžera. Međutim, ako koristimo DENY izjavu on će blokirati njezino nasljeđivanje dozvole. Evo naredbe:

ZAKLJUČITE BRZI
ON Kupci
NA Mariju

Naredba DENY bitno stvara "negativno dopuštenje" u kontrolama pristupa podacima. Ako kasnije odlučimo dati Maryu dopuštenje za uklanjanje redaka iz tablice Kupci, ne možemo jednostavno koristiti naredbu GRANT. Ta naredba odmah bi prevladala postojeća DENY. Umjesto toga, prvo ćemo upotrijebiti naredbu REVOKE za uklanjanje unosa negativnih dozvola na sljedeći način:

POVRATITE IZBJEGAVANJE
ON Kupci
OD Marije

Primijetit ćete da je ta naredba točno ista kao ona koja se koristi za uklanjanje pozitivnog dopuštenja. Imajte na umu da DENY i GRANT naredbe rade na sličan način * mdash; oboje stvaraju dozvole (pozitivno ili negativno) u mehanizmu kontrole pristupa bazama podataka. Naredba REVOKE uklanja sve pozitivne i negativne dozvole za određenog korisnika. Nakon što je ova naredba izdana, Mary će moći izbrisati retke iz tablice ako je član uloge koja posjeduje tu dozvolu. Alternativno, naredba GRANT mogla bi se izdati za pružanje DELETE dopuštenja izravno na njen račun.

Tijekom ovog članka ste naučili mnogo o mehanizmima kontrole pristupa koji su podržani standardnim upitnikom. Ovaj uvod trebao bi vam pružiti dobru polaznu točku, no potičem vas da uputite na DBMS dokumentaciju kako biste saznali poboljšane sigurnosne mjere koje podržava vaš sustav. Vidjet ćete da mnoge baze podataka podržavaju naprednije mehanizme kontrole pristupa, kao što su odobravanje dozvola za određene stupce.