Nadzor dostopa za uporabnike in vloge v SQL

Varnost je bistvenega pomena za upravitelje baz podatkov, ki želijo zaščititi svoje gigabajtete pomembnih poslovnih podatkov iz napetih oči nepooblaščenih zunanjih sodelavcev in oseb, ki poskušajo prekoračiti svojo avtoriteto. Vsi sistemi za upravljanje relacijskih baz podatkov zagotavljajo neke vrste notranje varnostne mehanizme, ki so namenjeni zmanjševanju teh groženj. Te segajo od preproste zaščite z geslom, ki jo ponuja Microsoft Access, do kompleksne strukture uporabnikov / vlog, ki jo podpirajo napredne relacijske baze podatkov, kot sta Oracle in Microsoft SQL Server. Ta članek se osredotoča na varnostne mehanizme, ki so skupni vsem bazam podatkov, ki izvajajo Structured Query Language (ali SQL ). Skupaj bomo šli skozi proces krepitve nadzora dostopa do podatkov in zagotavljanja varnosti vaših podatkov.

Uporabniki

Strežniške podatkovne baze podpirajo uporabniški koncept, podoben tistemu, ki se uporablja v računalniških operacijskih sistemih. Če ste seznanjeni s hierarhijo uporabnika / skupine, ki je bila najdena v Microsoft Windows NT in Windows 2000, boste ugotovili, da so skupine uporabnikov, ki jih podpirajo SQL Server in Oracle, zelo podobne.

Zelo priporočljivo je, da ustvarite posamezne uporabniške račune baze podatkov za vsako osebo, ki bo dostopala do vaše baze podatkov. Tehnično je mogoče deliti račune med uporabniki ali preprosto uporabiti en uporabniški račun za vsako vrsto uporabnika, ki potrebuje dostop do vaše baze podatkov, vendar to prakso močno odvračam iz dveh razlogov. Prvič, odpravi individualno odgovornost - če uporabnik spremeni vašo bazo podatkov (recimo, da si sami povišate 5.000 USD), ga ne boste mogli izslediti določeni osebi z uporabo dnevnikov revizije. Poleg tega, če določen uporabnik zapusti vašo organizacijo in želite odstraniti njegov dostop iz baze podatkov, boste morali spremeniti geslo, na katerega se vsi uporabniki zanesejo.

Načini ustvarjanja uporabniških računov se razlikujejo od platforme do platforme in za natančen postopek se boste morali posvetovati s svojo dokumentacijo, specifično za DBMS. Uporabniki Microsoft SQL Serverja morajo preučiti uporabo shranjenega postopka sp_adduser. Upravitelji baze podatkov Oracle bodo našli ukaz CREATE USER uporaben. Prav tako boste morda želeli raziskati alternativne sheme za preverjanje pristnosti. Microsoft SQL Server na primer podpira uporabo integrirane varnosti Windows NT. V skladu s to shemo so uporabniki v bazo podatkov identificirani po njihovih uporabniških računih za Windows NT in za dostop do baze podatkov niso potrebni dodatni ID uporabnika in geslo. Ta pristop je zelo priljubljen med skrbniki baze podatkov, ker prestavlja breme upravljanja računa na osebje omrežne administracije in omogoča enostavno enotno prijavo končnemu uporabniku.

Vloge

Če ste v okolju z majhnim številom uporabnikov, boste verjetno ugotovili, da ustvarjanje uporabniških računov in dodeljevanje dovoljenj neposredno njim ustreza vašim potrebam. Če pa imate veliko število uporabnikov, boste verjetno preobremenjeni zaradi bremena računov in ustreznih dovoljenj. Da bi olajšali to breme, relacijske baze podatkov podpirajo pojem vlog. Funkcije baze podatkov delujejo podobno kot skupine Windows NT. Uporabniški računi so dodeljeni vlogi in dovoljenja se dodelijo vlogi kot celoti in ne posameznim uporabniškim računom. Na primer, lahko ustvarimo vlogo DBA in nato tej vlogi dodamo uporabniške račune našega administrativnega osebja. Ko to storimo, lahko dodelimo posebno dovoljenje vsem sedanjim (in bodočim) skrbnikom, tako da preprosto dodelimo dovoljenje za vlogo. Postopki za ustvarjanje vlog se znova razlikujejo od platforme do platforme. Skrbniki MS SQL Serverja morajo preiskovati shranjeni postopek sp_addrole, medtem ko morajo Oracle DBA uporabljati sintakso CREATE ROLE.

Podelitev dovoljenj

Zdaj, ko smo uporabnike dodali v našo bazo podatkov, je čas, da z dodajanjem dovoljenj začnemo krepiti varnost. Naš prvi korak bo omogočiti našim uporabnikom ustrezna dovoljenja za bazo podatkov. To bomo dosegli z uporabo stavka SQL GRANT.

Tukaj je sintaksa izjave:

GRANT
[ON ]
TO
[Z možnostjo dodelitve]

Zdaj pa si oglejmo to izjavo po vrstnem redu. Prva vrstica, GRANT , nam omogoča, da določimo specifična dovoljenja za tablice, ki jih dodeljujemo. To so lahko dovoljenja na ravni tabele (kot so SELECT, INSERT, UPDATE in DELETE) ali dovoljenja za baze podatkov (na primer CREATE TABLE, ALTER DATABASE in GRANT). V enem stavku GRANT se lahko izda več kot eno dovoljenje, vendar dovoljenj na ravni tabele in dovoljenj na ravni baze podatkov ni mogoče združiti v enem izjavi.

Druga vrstica, ON , se uporablja za določitev prizadete tabele za dovoljenja na ravni tabele. Ta vrstica je izpuščena, če podajamo dovoljenja na ravni baze podatkov. Tretja vrstica določa uporabnik ali vlogo, ki mu je dodeljena dovoljenja.

Nazadnje, četrta vrstica, z možnostjo GRANT OPTION, ni obvezna. Če je ta vrstica vključena v izjavo, lahko uporabnikom, ki jih je prizadel, tudi drugim uporabnikom dovolijo ta ista dovoljenja. Upoštevajte, da z možnostjo WITH GRANT OPTION ni mogoče določiti, kdaj so vloge dodeljene.

Primeri

Poglejmo si nekaj primerov. V našem prvem scenariju smo pred kratkim najeli skupino 42 operaterjev za vnos podatkov, ki bodo dodali in vzdrževali evidenco strank. Omogočiti morajo dostop do informacij v tabeli strank, spremeniti te podatke in dodati nove zapise v tabelo. Ne smejo biti v celoti izbrisati zapisa iz baze podatkov. Najprej moramo ustvariti uporabniške račune za vsakega operaterja in jih nato dodati v novo vlogo DataEntry. Nato moramo uporabiti naslednji stavki SQL, da jim podelimo ustrezna dovoljenja:

GRANT SELECT, INSERT, UPDATE
ON stranke
TO Data Entry

In to je vse, kar je potrebno! Zdaj pa preučimo primer, v katerem dodeljujemo dovoljenja na ravni baze podatkov. Želimo članom DBA vlogo dodati nove tabele v našo bazo podatkov. Poleg tega želimo jim omogočiti, da drugim uporabnikom dovolijo, da storijo enako. Tukaj je izjava SQL:

GRANT CREATE TABLE
DO DBA
Z možnostjo oddaje

Upoštevajte, da smo vključili vrstico WITH GRANT OPTION, da bi naši DBA lahko dodelili to dovoljenje drugim uporabnikom.

Odstranjevanje dovoljenj

Ko smo izdali dovoljenja, se pogosto izkaže, da jih je treba pozneje preklicati. Na srečo nam SQL priskrbi ukaz REVOKE, da odstranimo prej odobrena dovoljenja. Tukaj je sintaksa:

REVOKE [PODPORA ZA PODPORO ZA]
ON
FROM

Opazili boste, da je sintaksa tega ukaza podobna ukazu GRANT. Edina razlika je, da je WITH GRANT OPTION naveden v ukazni vrstici REVOKE in ne na koncu ukaza. Predstavljajte si, da želimo preklicati Maryovo predhodno dovoljeno odstopanje iz baze podatkov o strankah. Uporabili bomo naslednji ukaz:

REVOKE DELETE
ON stranke
OD MARIJE

In to je vse, kar je potrebno! Obstaja še en dodaten mehanizem, ki ga podpira Microsoft SQL Server, ki ga je treba omeniti - ukaz DENY. Ta ukaz se lahko uporablja za izrecno zavrnitev dovoljenja uporabniku, ki bi ga drugače lahko imeli s trenutnim ali prihodnjim članstvom v vlogi. Tukaj je sintaksa:

DENY
ON
TO

Primeri

Če se vrnemo k našemu prejšnjemu primeru, si predstavljamo, da je bila Mary tudi član vloge vodje, ki je imela tudi dostop do tabele strank. Prejšnja izjava REVOKE ne bi zadostovala za zavrnitev njenega dostopa do tabele. Odstranila bi dovoljenje, ki ji je bilo dodeljeno prek stavka GRANT, ki cilja na njen uporabniški račun, ne vpliva pa na dovoljenja, pridobljena z njenim članstvom v vlogi Vodstva. Če pa uporabimo izjavo DENY, bo blokirala njeno dedovanje v dovoljenju. Tukaj je ukaz:

DENY DELETE
ON stranke
Mary

Ukaz DENY v bistvu ustvari »negativno dovoljenje« v kontrolnikih dostopa do baze podatkov. Če se kasneje odločimo, da bo Mary dovolila odstranjevanje vrst iz tabele Kupci, ne moremo preprosto uporabiti ukaza GRANT. Ta ukaz bi takoj preglasil obstoječi DENY. Namesto tega najprej uporabimo ukaz REVOKE, da odstranimo vnos negativnega dovoljenja, kot sledi:

REVOKE DELETE
ON stranke
OD MARIJE

Opazili boste, da je ta ukaz popolnoma enak, kot je bil uporabljen za odstranitev pozitivnega dovoljenja. Ne pozabite, da ukazi DENY in GRANT delata na podoben način * mdash; oba ustvarita dovoljenja (pozitivna ali negativna) v mehanizmu za nadzor dostopa do baze podatkov. Ukaz REVOKE odstrani vsa pozitivna in negativna dovoljenja za določenega uporabnika. Ko bo ta ukaz izdan, bo Mary lahko izbrisala vrstice iz tabele, če je član vloge, ki ima to dovoljenje. Druga možnost je, da se lahko izda ukaz GRANT, ki omogoči dovoljenje DELETE neposredno svojemu računu.

V celotnem toku tega članka ste se dobro naučili o mehanizmih za nadzor dostopa, ki jih podpira standardni jezik za poizvedbe. Ta uvod vam mora dati dobro izhodišče, vendar vas priporočam, da se sklicujete na svojo dokumentacijo za DBMS, če želite izvedeti izboljšane varnostne ukrepe, ki jih podpira vaš sistem. Ugotovili boste, da številne zbirke podatkov podpirajo naprednejše mehanizme za nadzor dostopa, na primer dodeljevanje dovoljenj za določene stolpce.