Kontrole pristupa za korisnike i uloge u SQL-u

Sigurnost je najvažnija za administratore baze podataka koji žele zaštititi svoje gigabajte vitalnih poslovnih podataka iz pratećih očiju neovlašćenih autsajdera i insajdera koji pokušavaju premašiti njihov autoritet. Svi sistemi upravljanja relacijskim bazama obezbeđuju neku vrstu unutrašnjih sigurnosnih mehanizama osmišljenih da minimiziraju ove pretnje. One variraju od jednostavne zaštite lozinkom koju nudi Microsoft Access do kompleksne strukture korisnika / uloga podržane naprednim relacijskim bazama podataka kao što su Oracle i Microsoft SQL Server. Ovaj članak se fokusira na sigurnosne mehanizme koji su zajednički za sve baze podataka koje implementiraju Structured Query Language (ili SQL ). Zajedno ćemo proći kroz proces jačanja kontrole pristupa podacima i osiguranja sigurnosti vaših podataka.

Korisnici

Server bazirane baze podataka podržavaju korisnički koncept sličan onome koji se koristi u računarskim operativnim sistemima. Ako ste upoznati sa hijerarhijom korisnika / grupe koja se nalazi u Microsoft Windows NT i Windows 2000, videćete da su grupe korisnika / uloga koje podržavaju SQL Server i Oracle veoma slične.

Preporučujemo vam da kreirate individualne korisnički baze podataka za svaku osobu koja će pristupiti vašoj bazi podataka. Tehnički je moguće podeliti račune između korisnika ili jednostavno koristiti jedan korisnički nalog za svaku vrstu korisnika koji treba da pristupi vašoj bazi podataka, ali ja snažno obeshrabrujem ovu praksu iz dva razloga. Prvo, to će eliminisati pojedinačnu odgovornost - ako korisnik napravi promjenu u vašoj bazi podataka (recimo dajući sebi povećanje od 5.000 USD), nećete moći da ga pratite nazad određenoj osobi koristeći dnevnike revizije. Nadalje, ako određeni korisnik napusti vašu organizaciju i želite da uklonite njegov ili njen pristup iz baze podataka, bićete primorani da promenite lozinku na koju se svi korisnici oslanjaju.

Metodi za kreiranje korisničkih naloga variraju od platforme do platforme i moraćete da konsultujete svoju dokumentaciju specifičnu za DBMS za tačan postupak. Korisnici Microsoft SQL Servera bi trebali istražiti upotrebu sp_adduser skladištenog postupka. Administratori Oracle baze podataka će pronaći korisničku naredbu CREATE USER. Takođe biste možda želeli da istražite alternativne šeme za autentifikaciju. Na primer, Microsoft SQL Server podržava upotrebu Windows NT Integrated Security. Prema ovoj šemi, korisnici su identifikovani u bazu podataka svojim korisničkim korisničkim nalozima za Windows NT i od njih nije potrebno unositi dodatni ID korisnika i lozinku za pristup bazi podataka. Ovaj pristup je izuzetno popularan među administratorima baze podataka jer pomera teret upravljanja nalogom zaposlenima u mrežnoj administraciji i pruža jednostavnost jedinstvenog prijave krajnjem korisniku.

Uloge

Ako ste u okruženju sa malim brojem korisnika, verovatno ćete otkriti da kreiranje korisničkih naloga i dodeljivanje dozvola direktno njima dovoljan je za vaše potrebe. Međutim, ako imate veliki broj korisnika, najverovatnije ćete biti opterećeni teretom održavanja računa i odgovarajućih dozvola. Da bi olakšali ovaj teret, relacijske baze podataka podržavaju pojam uloga. Uloge baze podataka funkcioniraju slično Windows NT grupi. Korisnički nalozi se dodeljuju ulogama (ulogama), a zatim se dodele dozvole za ulogu u celini, a ne pojedinačne korisničke naloge. Na primer, mogli bismo da kreiramo ulogu DBA, a zatim dodamo korisničke naloge našeg administrativnog osoblja na ovu ulogu. Jednom kada to uradimo možemo dodeliti određenu dozvolu svim sadašnjim (i budućim) administratorima jednostavnim dodeljivanjem dozvole za ulogu. Još jednom, procedure za kreiranje uloga variraju od platforme do platforme. MS SQL Server administratori treba da istražuju sp_addrole uskladištenu proceduru dok Oracle DBA-ovi trebaju koristiti sintaksu CREATE ROLE.

Davanje dozvola

Sada kada smo dodali korisnike u našu bazu podataka, vrijeme je da počnemo jačati sigurnost dodavanjem dozvola. Naš prvi korak je da našim korisnicima damo odgovarajuće dozvole za bazu podataka. Ovo ćemo postići upotrebom SQL GRANT izraza.

Evo sintakse izjave:

GRANT
[ON ]
TO
[SA GRANIČNOM OPCIJOM]

Sada, pogledajte ovu izjavu liniju po liniji. Prva linija, GRANT , omogućava nam da navedemo specifične dozvole tablica koje dodeljujemo. To mogu biti dozvole na nivou tablice (kao što su SELECT, INSERT, UPDATE i DELETE) ili dozvole za bazu podataka (kao što su CREATE TABLE, ALTER DATABASE i GRANT). Više od jedne dozvole može se dodeliti u jednom GRANT izrazu, ali dozvole na nivou tablice i dozvole na nivou baze podataka ne mogu biti kombinovane u jednoj izjavi.

Druga linija, ON , se koristi da odredi podrazumevanu tablicu za dozvole na nivou tablice. Ova linija je izostavljena ako odobravamo dozvole na nivou baze podataka. Treća linija određuje korisnika ili ulogu koja se odobrava.

Na kraju, četvrta linija, sa GRANT OPCIJOM, nije obavezna. Ako je ova linija uključena u izjavu, korisnici koji su pogođeni takođe imaju dozvolu da dodjeljuju iste dozvole drugim korisnicima. Imajte na umu da se WITH GRANT OPTION ne može specificirati kada su dozvole dodeljene ulogi.

Primjeri

Pogledajmo nekoliko primera. U našem prvom scenariju nedavno smo unajmili grupu od 42 operatera za unos podataka koji će dodavati i održavati evidenciju kupaca. Moraju biti u mogućnosti pristupiti informacijama u tabeli Kupci, modificirati ove informacije i dodati nove zapise u tabelu. Ne bi trebali u potpunosti izbrisati zapis iz baze podataka. Prvo, trebali bismo kreirati korisničke račune za svakog operatora, a zatim ih sve dodati novoj ulozi, DataEntry. Zatim, trebali bi koristiti sljedeću SQL izraz da im daju odgovarajuće dozvole:

GRANT SELECT, INSERT, UPDATE
ON Kupci
TO DataEntry

A to je sve do toga! Sada ćemo ispitati slučaj gdje dodeljujemo dozvole na nivou baze podataka. Želimo da dozvolimo članovima DBA uloge da dodaju nove tabele u našu bazu podataka. Pored toga, želimo da im omogući i drugim korisnicima dozvolu da to učine isto. Evo SQL izraza:

GRANT CREATE TABLE
TO DBA
Sa mogućnošću dodele

Imajte na umu da smo uključili liniju WITH GRANT OPTION kako bismo osigurali da naši DBA-ovi mogu dodeliti ovu dozvolu drugim korisnicima.

Uklanjanje dozvola

Kada izdamo dozvole, često se pokazuje neophodnim da ih opozove kasnije. Srećom, SQL nam daje komandu REVOKE da uklonite prethodno dodeljene dozvole. Evo sintakse:

REVOKE [GRANT OPTION FOR]
ON
IZ

Primjetit ćete da je sintaksa ove naredbe slična onoj u naredbi GRANT. Jedina razlika je u tome što WITH GRANT OPTION je specificiran na komandnoj liniji REVOKE umesto na kraju komande. Kao primer, pretpostavimo da želimo da oduzmemo Mary-ovu prethodno odobrenu dozvolu za uklanjanje podataka iz baze podataka Kupci. Koristili smo sledeću naredbu:

REVOKE DELETE
ON Kupci
OD MARIJE

A to je sve do toga! Postoji jedan dodatni mehanizam koji podržava Microsoft SQL Server, vredi pomena - DENY naredbu. Ova naredba se može koristiti da eksplicitno uskrati dozvolu za korisnika koju bi inače mogla imati kroz trenutnu ili buduću članarinu uloge. Evo sintakse:

DENY
ON
TO

Primjeri

Vraćajući se na naš prethodni primer, pretpostavimo da je Mary takođe bila član uloge Menadžera koji je imao pristup tabelama kupaca. Prethodna izjava REVOKE ne bi bila dovoljna da bi joj odbila pristup tabeli. Ona bi uklonila dozvolu koja joj je dodeljena kroz izjavu GRANT ciljajući njen korisnički račun, ali ne bi uticala na dozvole stečene njenim članstvom u menadžerskoj ulozi. Međutim, ako koristimo DENY izjavu ona će blokirati njeno nasljeđivanje dozvole. Evo naredbe:

DENY DELETE
ON Kupci
TO Mary

Komanda DENY u suštini stvara "negativnu dozvolu" u kontrolama pristupa bazi podataka. Ako kasnije odlučimo da dozvolimo Mary da ukloni redove iz tabele Kupci, ne možemo jednostavno koristiti komandu GRANT. Ta komanda bi odmah nadvladala postojeći DENY. Umjesto toga, prvo bi koristili naredbu REVOKE da uklonimo unos negativne dozvole na sljedeći način:

REVOKE DELETE
ON Kupci
OD MARIJE

Primetili ste da je ova komanda potpuno ista kao ona koja se koristi za uklanjanje pozitivne dozvole. Imajte na umu da komande DENY i GRANT oba deluju na sličan način * mdash; oba stvaraju dozvole (pozitivne ili negativne) u mehanizmu kontrole pristupa bazi podataka. Komanda REVOKE uklanja sve pozitivne i negativne dozvole za određenog korisnika. Kada se ova komanda izda, Mary će moći da izbriše redove iz tabele ako je član uloge koja poseduje tu dozvolu. Alternativno, naredba GRANT bi se mogla izdati da omogući odobrenje DELETE direktno na njen račun.

U toku ovog članka, naučili ste dosta o mehanizmima kontrole pristupa koji podržava standardni jezik upita. Ovaj uvod vam treba da obezbedi dobru polaznu tačku, ali ja vas pozivam da upućujete dokumentaciju DBMS-a kako biste saznali poboljšane mere bezbednosti koje podržava vaš sistem. Naći ćete da mnoge baze podataka podržavaju naprednije mehanizme kontrole pristupa, kao što su davanje dozvola određenim stupcima.