Dodjela i oduzimanje prava. Postavljanje dozvola grant komanda Korištenje pogleda za filtriranje privilegija

GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON (tbl_name | * | *.* | db_name.*) TO user_name "password"] [, user_name ...] ] ] ] REVOKE priv_type [(list_kolona)] [, priv_type [(column_list)] ...] ON (tbl_name | * | *.* | db_name.*) FROM user_name [, user_name ...]

GRANT je uključen u MySQL verziju 3.22.11 i novije. U ranijim verzijama MySQL-a, naredba GRANT ne radi ništa.

Naredbe GRANT i REVOKE omogućavaju administratorima sistema da kreiraju MySQL korisnike i dodijele ili opozovu prava korisnicima na četiri nivoa privilegija:

Globalni nivo Globalne privilegije se primjenjuju na sve baze podataka na navedenom serveru. Ove privilegije su pohranjene u tabeli mysql.user. Nivo baze podataka Privilegije baze podataka primjenjuju se na sve tablice u navedenoj bazi podataka. Ove privilegije su pohranjene u mysql.db i mysql.host tablicama. Nivo stola Privilegije tablice primjenjuju se na sve stupce navedene tablice. Ove privilegije su pohranjene u tabeli mysql.tables_priv. Nivo kolone Privilegije stupaca primjenjuju se na pojedinačne stupce u navedenoj tabeli. Ove privilegije su pohranjene u tabeli mysql.columns_priv.

Ako su privilegije dodijeljene korisniku koji ne postoji, tada je taj korisnik kreiran. Za primjere naredbe GRANT, pogledajte odjeljak 4.3.5 Dodavanje novih korisnika u MySQL.

Tabela prikazuje listu mogućih vrijednosti za parametar priv_type za naredbe GRANT i REVOKE:

SVEPostavlja sve jednostavne privilegije osim WITH GRANT OPTION
ALTEROmogućava korištenje ALTER TABLE
STVORITIOmogućava korištenje CREATE TABLE
KREIRAJTE PRIVREMENE TABELEOmogućava korištenje CREATE TEMPORARY TABLE
IZBRIŠIOmogućava korištenje DELETE
DROPOmogućava korištenje DROP TABLE.
EXECUTEOmogućava korisniku da pokrene pohranjene procedure (za MySQL 5.0)
FILEOmogućava korištenje SELECT ... INTO OUTFILE i LOAD DATA INFILE .
INDEXOmogućava korištenje CREATE INDEX i DROP INDEX
INSERTDozvoljava upotrebu INSERT
LOCK TABLESDozvoljava upotrebu LOCK TABLES na tablicama koje imaju privilegiju SELECT.
PROCESOmogućava korištenje SHOW FULL PROCESSLIST
REFERENCERezervirano za buduću upotrebu
RELOADOmogućava korištenje FLUSH-a
REPLICATION CLIENTDaje korisniku pravo da upita lokaciju glavnog i slave servera.
REPLICATION SLAVENeophodan za slave servere tokom replikacije (za čitanje informacija iz binarnih dnevnika glavnog servera).
SELECTOmogućava korištenje SELECT
PRIKAŽI BAZE PODATAKAPRIKAŽI BAZE PODATAKA Ispisuje sve baze podataka.
UGASITIDozvoljava korištenje mysqladmin shutdown
SUPEROmogućava vam da uspostavite jednu vezu (jednom), čak i ako se postigne max_connections, i pokrenete CHANGE MASTER , KILL thread , mysqladmin debug , PURGE MASTER LOGS i SET GLOBAL komande
UPDATEDozvoljava korištenje UPDATE
UPOTREBASinonim za ``bez privilegija''.

Vrijednost USAGE se može specificirati ako trebate kreirati korisnika bez privilegija.

KREIRANJE PRIVREMENIH TABLICA, IZVRŠAVANJE, ZAKLJUČAVANJE TABLICA, REPLIKACIJA..., PRIKAŽI BAZE PODATAKA i SUPER privilegije su nove u verziji 4.0.2. Da biste iskoristili ove nove privilegije nakon nadogradnje na verziju 4.0.2, morate pokrenuti skriptu mysql_fix_privilege_tables.

U starijim verzijama MySQL-a, privilegija PROCESS daje ista prava kao i nova SUPER privilegija.

Da opozovete privilegije korisnika koje je dodijelila naredba GRANT, koristite vrijednost priv_type u OPCIJI GRANT:

Mysql> OPOZI OPCIJU GRANT NA ... IZ ...;

Jedine vrijednosti priv_type koje se mogu specificirati za tablicu su: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, IDEX i ALTER.

Jedine vrijednosti priv_type koje se mogu specificirati za stupac (kada se koristi operator column_list) su SELECT , INSERT i UPDATE .

Globalne privilegije se mogu postaviti korištenjem ON *.* sintakse, a privilegije baze podataka se mogu postaviti korištenjem ON db_name.* sintakse. Ako navedete ON * dok je trenutna baza podataka otvorena, privilegije će biti postavljene za tu bazu podataka. ( Upozorenje: ako navedete ON * kada odsustvo trenutna baza podataka je otvorena, to će uticati na globalne privilegije!)

Da bi se mogla definisati prava za korisnike na određenim računarima, MySQL pruža mogućnost navođenja korisničkog imena (user_name) u obrascu. Ako trebate navesti korisnički niz koji sadrži posebne znakove (kao što je `-"), ili host niz koji sadrži posebne ili zamjenske znakove (kao što je `%"), možete priložiti ime udaljeni računar ili korisnik u navodnicima (na primjer, "test-user"@"test-hostname").

Također možete uključiti zamjenske znakove u ime udaljenog računara. Na primjer, "%.loc.gov" se odnosi na korisnika svih udaljenih računara u domeni loc.gov, a "144.155.166.%" se odnosi na korisnika svih udaljenih računara u podmreži C klase 144.155.166.

Korisnik jednostavnog obrasca je sinonim za "%".

MySQL ne podržava zamjenske znakove u korisničkim imenima. Anonimni korisnici se definiraju umetanjem User="" zapisa u mysql.user tablicu ili kreiranjem korisnika s praznim imenom korištenjem naredbe GRANT.

Bilješka: Ako je anonimnim korisnicima dozvoljeno da se povežu na MySQL server, morate također dati privilegije svim lokalnim korisnicima kao , jer u suprotnom, kada se korisnik pokuša prijaviti na MySQL sa lokalnog računara, tabela mysql.user će koristiti anonimnog korisnika Ulogovati se!

Da biste provjerili da li se to dešava na vašem računaru, pokrenite sljedeći upit:

Mysql> SELECT Host,User FROM mysql.user WHERE User="";

Trenutno, komanda GRANT podržava imena udaljenih računara, tabela, baza podataka i kolona do 60 znakova. Korisničko ime ne smije sadržavati više od 16 znakova.

Privilegije za tabelu ili kolonu se formiraju pomoću logičkog OR operatora iz privilegija na svakom od četiri nivoa. Na primjer, ako tablica mysql.user ukazuje da korisnik ima globalnu SELECT privilegiju, ta privilegija se ne opoziva na razini baze podataka, tablice ili stupca.

Privilegije za kolonu mogu se izračunati na sljedeći način:

Globalne privilegije ILI (privilegije baze podataka I privilegije udaljenog računara) ILI privilegije tablice ILI privilegije stupaca

U većini slučajeva, korisnička prava su definirana na samo jednom nivou privilegija, tako da ovaj postupak obično nije tako složen kao što je gore opisano. detaljne informacije Redoslijed radnji za provjeru privilegija predstavljen je u odeljku 4.2 Opšta pitanja sigurnosti i MySQL sistem privilegija pristupa.

Ako su privilegije dodijeljene kombinaciji korisnik/udaljeno koja nije u tablici mysql.user, unos se dodaje u tablicu mysql.user i ostaje u tablici dok se ne izbriše pomoću naredbe DELETE. Drugim riječima, naredba GRANT može kreirati korisničke zapise u tablici, ali naredba REVOKE ih ne može izbrisati. Ovo se mora uraditi pomoću naredbe DELETE.

Ako imate privilegije baze podataka, unos se kreira u tablici mysql.db ako je potrebno. Ovaj unos se briše nakon što se sve privilegije za ovu bazu podataka uklone naredbom REVOKE.

Ako korisnik nema nikakve privilegije na tablici, tabela se ne prikazuje kada korisnik zatraži listu tablica (na primjer, korištenjem naredbe SHOW TABLES).

Naredba WITH GRANT OPTION daje korisniku mogućnost da dodijeli drugim korisnicima bilo koje privilegije koje on sam ima na određenom nivou privilegija. Morate biti oprezni prilikom dodjele privilegije GRANT, jer dva korisnika sa različitim privilegijama mogu kombinovati svoje privilegije!

Opcije MAX_QUERIES_PER_HOUR #, MAX_UPDATES_PER_HOUR # i MAX_CONNECTIONS_PER_HOUR # su nove u MySQL verziji 4.0.2. Ove postavke ograničavaju broj zahtjeva, ažuriranja i prijavljivanja koje korisnik može napraviti u jednom satu. Ako je postavljeno na 0 (podrazumevano), to znači da nema ograničenja za ovog korisnika. Vidi odjeljak.

Ne možete drugom korisniku dati privilegiju koju vi nemate. Privilegija GRANT vam omogućava da dodijelite samo one privilegije koje imate.

Imajte na umu da ako je korisniku dodijeljena privilegija GRANT na određenom nivou privilegija, onda sve privilegije koje taj korisnik već ima (ili će biti dodijeljene u budućnosti!) na tom nivou također mogu biti dodijeljene tom korisniku. Pretpostavimo da je korisniku dodijeljena privilegija INSERT u bazi podataka. Ako tada dodijelite privilegiju SELECT u bazi podataka i navedete WITH GRANT OPTION, korisnik može dodijeliti ne samo privilegiju SELECT, već i INSERT privilegiju. Ako zatim dodijelite korisniku privilegiju UPDATE u bazi podataka, korisnik tada može izdati INSERT, SELECT i UPDATE.

ALTER privilegije ne bi trebale biti dodijeljene redovnim korisnicima. Ovo daje korisniku mogućnost da razbije sistem privilegija preimenovanjem tabela!

Imajte na umu da ako se privilegije tabele ili kolone koriste čak i za jednog korisnika, server provjerava privilegije tablica i stupaca za sve korisnike i to donekle usporava MySQL.

Kada se mysqld pokrene, sve privilegije se čitaju u memoriju. Privilegije baze podataka, tablica i stupaca stupaju na snagu odmah, dok privilegije na nivou korisnika stupaju na snagu sljedeći put kada se korisnik poveže. Promjene u tablicama dodjele privilegija koje su napravljene korištenjem naredbi GRANT i REVOKE se odmah obrađuju od strane poslužitelja. Ako ručno modificirate tablice dodjele privilegija (koristeći INSERT , UPDATE itd.), morate pokrenuti FLUSH PRIVILEGES ili mysqladmin flush-privilege s naredbu da biste naložili poslužitelju da ponovo učita tablice dodjele privilegija. Pogledajte odjeljak 4.3.3 Kada promjene privilegija stupe na snagu.

Najznačajnije razlike između ANSI SQL i MySQL verzija naredbe GRANT su sljedeće:

  • U MySQL-u, privilegije se dodeljuju kombinaciji korisničkog imena + udaljenog računara, a ne samo korisničkom imenu.
  • ANSI SQL nema globalne privilegije ili privilegije na razini baze podataka, a ANSI SQL ne podržava sve MySQL tipove privilegija. MySQL, s druge strane, ne podržava privilegije ANSI SQL TRIGGER, EXECUTE ili UNDER.
  • ANSI SQL struktura privilegija je hijerarhijska. Ako izbrišete korisnika, sve privilegije dodijeljene tom korisniku se opozivaju. U MySQL-u dodijeljene privilegije se ne opozivaju automatski; morate ih sami ukloniti ako je potrebno.
  • U MySQL-u, korisnik može INSERT tabelu ako ima privilegiju INSERT na samo nekoliko kolona u toj tabeli. Kolone koje nemaju privilegiju INSERT bit će postavljene na svoje zadane vrijednosti. ANSI SQL zahtijeva INSERT privilegiju na svim stupcima.
  • Kada ispustite tablicu u ANSI SQL-u, sve privilegije za tu tablicu će biti opozvane. Ako opozovete privilegiju u ANSI SQL-u, sve privilegije koje su dodijeljene na osnovu te privilegije se također opozivaju. U MySQL, privilegije se mogu ukloniti samo pomoću naredbe REVOKE ili promjenom MySQL tablica dodjele privilegija.

Za opis korištenja REQUIRE, pogledajte odjeljak 4.3.9 Korištenje sigurnih veza.

Komentari korisnika

Objavio Frank Wortner[Izbriši] [Uredi]

Nisam imao problema sa ld. DEC (Compaq) bi mogao
popravio ld u kompletu zakrpa. Možda želite
instalirajte najnoviji komplet zakrpa za vaš Digital Unix
(Tru64 Unix) prije izgradnje MySQL-a. Patch kits
dostupni su na adresi
href=http://ftp.support.compaq.com/public/unix/ >
http://ftp.support.compaq.com/public/unix/

Objavio u subotu, 16. februara 2002, @22:21[Izbriši] [Uredi]

Za izvorne instalacije, ove upute se odnose na strukturu direktorija pod pretpostavkom da je "usr/local" korišten (podrazumevano) sa konfiguracijom. Ali uputstva na prethodnoj stranici (za kompilaciju/instalaciju) predlažu da koristite:

./configure --prefix=/usr/local/mysql

Da budemo dosljedni (a to mi uzrokuje neke probleme s Perl-om, tako da nije čisto semantičko), upute na ovoj stranici trebale bi pretpostaviti da je /usr/local/mysql naveden kao instalacioni direktorij sa configure.

Objavila Linda Wright u subotu, 16. februara 2002, @22:21[Izbriši] [Uredi]

Ovo je vjerovatno najvažnije i najmanje
cijenjeni dijelovi cijelog mySQL-a
dokumentaciju za prve korisnike mySQL-a. IMHO,
čitajući ovu stranicu zajedno sa
http://www.mysql.com/doc/P/r/Privileges.html je a
neophodno za planiranje bilo koga sigurnih sistema baza podataka
bilo kakve stvarne sofisticiranosti.

Objavio Christopher Raymond u subotu, 16. februara 2002, @22:21[Izbriši] [Uredi]

Pokušavam da instaliram MySQL pod OS X Public Beta. Kada pokrenem skriptu mysql_install_db, dobijam poruku o grešci:

Dyld: ./bin/mysqld ne može otvoriti biblioteku: /usr/lib/libpthread.A.dylib (Nema takve datoteke ili direktorija, errno = 2)
Instalacija tabela grantova nije uspjela!

Pretpostavljam da skripta traži direktorij koji ne postoji jer Apple ima malo drugačiju strukturu naziva direktorija.Možda ovu skriptu treba modificirati za OS X distribuciju.

Može li neko pomoći?

Objavio Mark Zieg u subotu, 16. februara 2002, @22:21[Izbriši] [Uredi]

Bilo bi dobro da postoji opcija za evidentiranje veza, ali ne i upita.

Objavio Bennett Haselton u subotu, 16. februara 2002, @22:21[Izbriši] [Uredi]

Ako ste prijavljeni kao mysql root korisnik, bez odabrane trenutne baze podataka, a pokušate
dodijeli sve privilegije korisniku naredbom:

DODAJTE SVE PRIVILEGIJE NA * Bhaseltu

Tada RELOAD, SHUTDOWN, PROCESS, FILE i GRANT neće biti odobreni, kao što se može
provjereno provjerom tabele "user" baze podataka "mysql". (Ovo je vjerovatno po dizajnu,
budući da ove privilegije mogu učiniti korisnika "premoćnim".)

Objavio DC Hill u subotu, 16. februara 2002, @22:21[Izbriši] [Uredi]

NAPOMENA: Ako ste dodijelili privilegije korisniku na određenoj bazi podataka, ili na bilo kojem nižem nivou od toga, pozovite "OPOZI SVE NA *.* FROM ;" NEĆE opozvati privilegije na tim nivoima. *.* u gornjoj izjavi znači "globalno", a ne "sve (pojedinačne) tabele na svim (pojedinačnim) bazama podataka. Ta izjava će SAMO opozvati globalne privilegije, kako su pohranjene u tabeli mysql.user. MORATE opozvati bilo koje konkretnije privilegije na isti način na koji su i dodijeljene, ako želite da se uklone iz tabela privilegija. (tj. - ODOBRITE SVE NA foo.* DO ; => OPOZOVI SVE NA foo.* OD ;) Nadam se da će ovo spasiti neke od imate malo vremena i frustracije.

Objavio Cris Perdue u subotu, 16. februara 2002, @22:21[Izbriši] [Uredi]

„Ako imate privilegiju procesa, možete vidjeti
sve teme.
U suprotnom, možete vidjeti samo svoje teme."

Objavio FreeBSD Forums u subotu, 16. februara 2002, @22:21[Izbriši] [Uredi]

Možete koristiti phpMyAdmin web alat za puno toga
mySQL administratorskih funkcija. href="http://www.freebsdforums.org"
>FreeBSD forumi

Objavio u ponedjeljak, 25. februara 2002. u 6:03 ujutro[Izbriši] [Uredi]

Provjereno na MySQL 3.23.36 na Red Hat Linux 7.1:
Imajte na umu da ako kucate
use a_c;
odobri odabir na * do ;
dobit ćete pristup bilo kojem
baza podataka koja odgovara "a_c" gdje je donja crta a
divlja karta. (Retko problem, pretpostavljam).
Ispravite sa
update mysql.db set db="a\_c" gdje je db="a_c";

Objavio jan behrens u utorak, 9. jula 2002, @1:31 ujutro[Izbriši] [Uredi]

pomenuti bag od DAN ELIN u x.x.41 je
očigledno još uvijek vrijedi u x.x.51, ne mogu se prijaviti na a
bazu podataka nakon DODJELE privilegija i datih a
lozinka za novog korisnika (da, izbacio sam
privilegije).............moguć je samo root pristup

Objavio Dan Egli u četvrtak, 4. aprila 2002, @20:33[Izbriši] [Uredi]

Čini se da postoji greška u verziji 3.23.41 koja koristi Grant.
Čak i samo root može pristupiti mysql bazi podataka
nakon korištenja Grant-a za dodjelu privs na bilo šta
baza podataka/tabela/kolona/ect.. uvijek dobijete
dozvola odbijena, bez obzira na to.

Objavio Lars Aronsson u subotu, 8. juna 2002, u 11:16["%". Kada pokušam da ih izbrišem, rečeno mi je da postoji neka baza podataka, ali nema globalnih privilegija
CREATE TEMPORARY TABLE privilegija na toj bazi podataka
je odbijen.

Morate dati global CREATE __i__ global
KREIRAJTE PRIVREMENE TABELE za korisnika. IOW:
GRANT CREATE, CREATE PRIVREMENE TABELE NA *.* TO
;

Nepotrebno je reći da ovo značajno utiče na sigurnost.

Objavio u nedjelju, 25. avgusta 2002. u 9:17 ujutro[Izbriši] [Uredi]

Privremeni fajlovi su odlična ideja, ali čak i sa
Prava kreiranja i kreiranja privremene datoteke u
user (globalna prava) fajl i dalje ne radi.
Čini se da je ovo loše dizajnirano.

Objavio Brad Bulger u ponedjeljak, 2. septembra 2002, u 4:09 ujutro[Izbriši] [Uredi]

Treba napomenuti da samo SA OPCIJOM GRANT
omogućava korisniku da prenese privilegije korisnicima koji
već postoji. Automatsko kreiranje korisnika
evidencije nije primijeniti - dobićete poruku o grešci
što korisnik s privilegijom GRANT OPTION čini
nemaju pristup bazi podataka "mysql". Ovo je
verovatno dobra stvar, ali to treba dokumentovati.

Objavio Michael Babcock u petak, 8. novembra 2002, u 13:00[Izbriši] [Uredi]

PRIKAŽI MASTER STATUS zahtijeva privilegije PROCES.
Ostale takve čudne kombinacije treba dokumentirati.

Objavio Dee Kintaudi u četvrtak, 21. novembra 2002., @12:42 popodne[Izbriši] [Uredi]

U redu, imam pitanje i problem sa Mysql i
lozinke :). Pokušao sam koristiti nekoliko opcija
a većina njih nije radila. Međutim jedan
rješenje je djelovalo i testirao sam ga dva puta i to
bio solidan. Naravno da sam izgubio komadić papira I
napisao je i čini se da ovo ne mogu pronaći
resenje bilo gde, kao da ne postoji ili mozda ja
zamislio. Rešenje koje mi je uspelo,
prije nego što sam izgubio papirić na koji sam to zapisao
ide ovako nesto..... Umetnite u root korisnika
Lozinka "moja lozinka" i onda nešto
sa "Y", "Y", "Y", (otprilike desetak ili 15 puta)
Međutim, nigdje ne mogu pronaći ovo rješenje
da mi neko pomogne ovde?

Mislim da bi bilo tako lijepo kad bi samo ovo postavili
kroz njihovu dokumentaciju umjesto da pokušavaju
sakrij ga. Mislim da bi ovo riješilo mnoge probleme. Samo
stavi lozinku = "Y", "Y", "Y", kao da se oni stide toga
ili tako nešto.

Objavio AJIT DIXIT u ponedeljak 25. novembra 2002. u 6:56 ujutro[Izbriši] [Uredi]

Kada radim na ažuriranju za više tablica sa root korisnikom
radi dobro

Kada radim sa ne-root korisnikom dobijam grešku

Sql: ažuriranje Stockists, područja set a_nm = aname
gdje je acd = površina

U ovom poglavlju ćete naučiti kako raditi s privilegijama. Kao što je objašnjeno u poglavlju 2, SQL se obično koristi u okruženjima koja zahtijevaju prepoznavanje korisnika i razlikovanje između različitih korisnika sistema. Generalno, administratori baze podataka sami kreiraju korisnike i daju im privilegije. S druge strane, korisnici koji sami kreiraju tabele imaju prava da upravljaju tim tabelama. Privilegije su ono što određuje da li određeni korisnik može izvršiti datu naredbu. Postoji nekoliko vrsta privilegija koje odgovaraju nekoliko vrsta operacija. Privilegije se dodjeljuju i opozivaju pomoću dvije SQL naredbe: - GRANT i REVOKE. Ovo poglavlje će vam pokazati kako se koriste ove komande.

KORISNICI

Svaki korisnik u SQL okruženju ima posebno identifikacijsko ime ili broj. Terminologija je svuda različita, ali mi smo odabrali (prateći ANSI) da se odnosimo na nju ili broj kao pristupni identifikator (ID). Komanda poslana bazi podataka je povezana sa određenim korisnikom; ili na drugi način, poseban pristupni identifikator. Kako se odnosi na SQL bazu podataka, ID dozvole je korisničko ime, a SQL može koristiti posebnu ključnu riječ USER, koja se odnosi na Access ID povezan s trenutnom naredbom. Naredba se tumači i dozvoljava (ili odbija) na osnovu informacija povezanih s ID-om pristupa korisnika koji je izdao naredbu.

REGISTRACIJA

U sistemima sa brojnim korisnicima postoji neka vrsta procedure za prijavu koju korisnik mora da završi da bi dobio pristup računarskom sistemu. Ova procedura određuje koji ID pristupa će biti pridružen trenutnom korisniku. Obično svaka osoba koja koristi bazu podataka mora imati svoj ID pristupa i nakon registracije postaje važeći korisnik. Međutim, često korisnici sa mnogo zadataka mogu biti registrovani pod različitim ID-ovima pristupa, ili, obrnuto, jedan ID pristupa može koristiti nekoliko korisnika. Iz SQL perspektive nema razlike između ova dva slučaja; tretira korisnika jednostavno kao njihov pristupni ID. SQL baza podataka može koristiti vlastitu proceduru za prijavu ili može dozvoliti drugi program, kao npr operativni sistem(glavni program koji radi na vašem računaru), obradite registracionu datoteku i pribavite ID pristupa iz ovog programa. Na ovaj ili onaj način, SQL će imati ID pristupa koji će se povezati s vašim radnjama, a ključna riječ USER će biti relevantna za vas.

OBEZBEĐIVANJE PRIVILEGIJA

Svaki korisnik u SQL bazi podataka ima skup privilegija. Ovo je ono što je korisniku dozvoljeno (možda je to log datoteka, što se može smatrati minimalnom privilegijom). Ove privilegije se mogu mijenjati tokom vremena - nove se dodaju, stare se uklanjaju. Neke od ovih privilegija su definirane u ANSI SQL-u, ali postoje i dodatne privilegije koje su također potrebne. SQL privilegije kako ih definira ANSI nisu dovoljne u većini stvarnih situacija. S druge strane, tipovi potrebnih privilegija mogu varirati u zavisnosti od tipa sistema koji koristite - za šta ANSI ne daje preporuke. Privilegije koje nisu dio SQL standarda mogu koristiti sintaksu koja je slična i nije u potpunosti u skladu sa standardom.

STANDARDNE PRIVILEGIJE

SQL privilegije definirane od strane ANSI su privilegije objekta. To znači da korisnik ima privilegiju da izvrši datu naredbu samo na određenom objektu u bazi podataka. Očigledno, privilegije moraju razlikovati ove objekte, ali sistem privilegija baziran isključivo na privilegijama objekta ne može adresirati sve što je potrebno SQL-u, kao što ćemo vidjeti kasnije u ovom poglavlju. Privilegije objekta su povezane i sa korisnicima i sa tabelama. Odnosno, privilegija se daje određenom korisniku u određenoj tabeli, ili osnovnoj tabeli ili pogledu. Morate zapamtiti da je korisnik koji je kreirao tabelu (bilo koje vrste) vlasnik ove tabele.

To znači da korisnik ima sve privilegije u ovoj tablici i može prenijeti privilegije drugim korisnicima u ovoj tablici. Privilegije koje se mogu dodijeliti korisniku:

SELECT Korisnik s ovom privilegijom može pokrenuti upite na tablici.

INSERT Korisnik sa ovom privilegijom može izdati naredbu INSERT na tablici.

UPDATE Korisnik sa ovom privilegijom može izdati naredbu UPDATE na tablici. Ovu privilegiju možete ograničiti na određene stupce tablice.

DELETE Korisnik s ovom privilegijom može izdati naredbu DELETE na tablici.

REFERENCE Korisnik s ovom privilegijom može definirati strani ključ koji koristi jedan ili više stupaca ove tablice kao roditeljski ključ. Ovu privilegiju možete ograničiti na određene stupce. (Pogledajte Poglavlje 19 za detalje o stranom ključu i roditeljskom ključu.)

Osim toga, naići ćete na nestandardne objektne privilegije, kao što je INDEX, koji daje pravo na kreiranje indeksa na tabeli, SYNONYM, koji daje pravo na kreiranje sinonima za objekat, što će biti objašnjeno u poglavlju 23, i ALTER, koji daje pravo da se izvrši naredba ALTER TABLE na tablici. SQL mašina dodjeljuje ove privilegije korisnicima koristeći naredbu GRANT.

GRANT TEAM

Pretpostavimo da korisnik Diane ima tabelu kupaca i želi dopustiti korisniku Adrian da je upita. Diane bi tada trebala unijeti sljedeću naredbu:

GRANT INSERT O prodavcima Diane;

Sada Adrian može pokrenuti upite prema tabeli kupaca. Bez drugih privilegija, on može samo odabrati vrijednosti; ali ne može izvršiti nikakvu radnju koja bi utjecala na vrijednosti u tablici Kupci (uključujući korištenje tablice Kupci kao nadređene tablice stranog ključa, što ograničava promjene koje se mogu napraviti na vrijednosti u tablici Kupci).

Kada SQL primi naredbu GRANT, provjerava privilegije korisnika koji izdaje naredbu da bi utvrdio da li je naredba GRANT važeća. Adrian ne može sam izdati ovu naredbu. Također ne može dati SELECT dozvolu drugom korisniku: tabela i dalje pripada Diane (kasnije ćemo pokazati kako Diane može dati Adrianu SELECT dozvolu drugim korisnicima).

Sintaksa je ista kao i za dodjelu drugih privilegija. Ako je Adrian vlasnik tabele Sellers, onda može dozvoliti Diane da unese redove u nju koristeći sljedeću klauzulu

GRANT INSERT O prodavcima Diane; Diane sada ima pravo da stavi novog prodavca u tabelu.

GRUPE PRIVILEGIJA, KORISNIČKE GRUPE

Ne biste se trebali ograničiti na dodjelu jedne privilegije pojedinačnom korisniku naredbom GRANT. Liste privilegija ili korisnika razdvojene zarezima su savršeno prihvatljive. Stephen može dati i SELECT i INSERT u tabeli narudžbi za Adriana

GRANT SELECT, INSERT ON Narudžbe Adrianu; ili za Adriana i Diane GRANT SELECT, INSERT ON Narudžbe Adrianu, Diane;

Kada su privilegije i korisnici navedeni na ovaj način, cijela lista privilegija se dodjeljuje svim navedenim korisnicima. U strogom ANSI tumačenju, ne možete dodijeliti privilegije na više tablica odjednom pomoću jedne naredbe, ali neke implementacije mogu ublažiti ovo ograničenje dozvoljavajući vam da navedete više tablica, odvojenih zarezima, tako da se cijela lista privilegija može dodijeliti za sve specificirane tabele.

OGRANIČAVANJE PRIVILEGIJA NA SPECIFIČNE KOLONE

Sve privilegije objekata koriste istu sintaksu, osim naredbi UPDATE i REGERNCES, koje ne zahtijevaju imena stupaca. Privilegija UPDATE se može dodijeliti kao i druge privilegije:

ODOBRITE AŽURIRANJE O prodavačima Diane;

Ova komanda će omogućiti Diane da promijeni vrijednosti u bilo kojoj ili svim kolonama tabele Dobavljači. Međutim, ako Adrian želi ograničiti Diane da mijenja, na primjer, provizije, može ući

ODOBRITE AŽURIRANJE (comm) O prodavačima Diane;

Drugim riječima, jednostavno mora specificirati specifičnu kolonu na koju treba primijeniti privilegiju UPDATE, u zagradama iza imena tablice. Imena više kolona tablice mogu se navesti bilo kojim redoslijedom, odvojeni zarezima:

ODOBRITE AŽURIRANJE (grad, komunikacija) O prodavačima Diane;

REFERENCE slijedi isto pravilo. Kada drugom korisniku dodijelite privilegiju REFERENCES, on će moći kreirati strane ključeve koji upućuju na stupce u vašoj tablici kao roditeljske ključeve. Kao i UPDATE, privilegija REFERENCES se može specificirati kao lista jednog ili više stupaca za koje je ta privilegija ograničena. Na primjer, Diane bi mogla dati Stephenu pravo da koristi tablicu Customer kao tablicu roditeljskog ključa sa sljedećom naredbom:

DODAJTE REFERENCE (cname, cnum) O kupcima Stephenu; Ova komanda daje Stephenu pravo da koristi kolone cnum i cname kao roditeljske ključeve za sve strane ključeve u svojim tabelama. Stephen može kontrolirati kako se to radi. Može definisati (cname, cnum) ili, u našem slučaju, (cnum, cname), kao roditeljski ključ u dve kolone koji se podudara sa stranim ključem sa dve kolone u jednoj od sopstvenih tabela. Ili može kreirati odvojene strane ključeve za individualno upućivanje na pol, čime se osigurava da Diane ima dodijeljen roditeljski ključ (vidi Poglavlje 19).

Bez ograničenja na brojeve stranih ključeva, mora se zasnivati ​​na ovim roditeljskim ključevima, a roditeljskim ključevima različitih stranih ključeva mora biti dozvoljeno da se preklapaju.

Kao i kod privilegije UPDATE, možete isključiti listu kolona i tako dopustiti da se svi stupci koriste kao roditeljski ključevi. Adrian može dati Diane pravo da to učini sljedećom komandom:

DODAJTE REFERENCE O prodavcima Diane;

Naravno, privilegija će biti upotrebljiva samo na stupcima koji imaju ograničenja koja zahtijevaju roditeljski ključevi.

KORIŠĆENJEM SVIH I JAVNIH ARGUMENTA

SQL podržava dva argumenta naredbe GRANT koja imaju posebno značenje: SVE PRIVILEGIJE ili jednostavno SVE i JAVNO. ALL se koristi umjesto imena privilegija u naredbi GRANT za dodjelu svih privilegija u tablici. Na primjer, Diane bi mogla dati Stephenu cijeli skup privilegija u tablici Kupci sa sljedećom naredbom:

DODAJTE REFERENCE O prodavcima Diane;

(Privilegije UPDATE i REFERENCES prirodno se primjenjuju na sve stupce.) Evo još jednog načina da kažete istu stvar:

ODOBRITE SVE KUPCE Stephenu;

PUBLIC više liči na sveobuhvatni tip argumenta nego na privilegiju korisnika. Kada dodijelite privilegije za objavljivanje, svi korisnici ih automatski primaju. Najčešće se ovo koristi za privilegiju SELECT na određenim temeljnim tablicama ili pogledima koje želite učiniti dostupnim bilo kojem korisniku. Da biste omogućili bilo kom korisniku da vidi tabelu narudžbi, možete, na primjer, unijeti sljedeće:

ODOBRITE ODABIR NA NALOGA JAVNOSTI;

Naravno, možete dati bilo koju ili sve privilegije društvu, ali to vjerovatno nije preporučljivo. Sve privilegije osim SELECT dozvoljavaju korisniku da promijeni (ili, u slučaju REFERENCE, ograniči) sadržaj tabele. Dopuštanje svim korisnicima da mijenjaju sadržaj vaših tabela će uzrokovati problem.

Čak i ako imate malu kompaniju i svi vaši trenutni korisnici mogu izvršavati naredbe za modifikaciju na datoj tablici, bilo bi bolje da dodijelite privilegije svakom korisniku pojedinačno nego da dodijelite iste privilegije svima. JAVNOST nije ograničena na prenošenje samo trenutnim korisnicima. Bilo koji Novi korisnik dodani na vaš sistem će automatski dobiti sve privilegije koje su prethodno dodijeljene svima, tako da ako želite ograničiti pristup tablici svima, sada ili u budućnosti, najbolje je dodijeliti privilegije osim SELECT pojedinačnim korisnicima.

DODAVANJE PRIVILEGIJA KORIŠĆENJEM OPCIJE GRANTA

Ponekad kreator tabele želi da drugi korisnici mogu da steknu privilegije na njegovom stolu. Ovo se obično radi u sistemima u kojima jedan ili više ljudi kreira nekoliko (ili sve) osnovnih tabela u bazi podataka, a zatim delegira odgovornost za njih onima koji će stvarno raditi s njima. SQL vam omogućava da to učinite koristeći klauzulu WITH GRANT OPTION. Ako je Diane htjela da Adrian može dodijeliti privilegiju SELECT na tablici Customers drugim korisnicima, ona bi mu dodijelila privilegiju SELECT koristeći klauzulu WITH GRANT OPTION:

GRANT SELECT ON Klijentima Adrianu SA GRANT OPCIJOM; Adrian je tada stekao pravo da prenese SELECT privilegiju na treća lica; može izdati naredbu GRANT SELECT ON Diane.Kupci Stephenu; ili čak GRANT SELECT NA Diane.Kupci Stephenu SA OPCIJOM DOBAVE; Korisnik sa OPCIJOM GRANT na određenoj privilegiji na datoj tablici može, zauzvrat, dodijeliti tu privilegiju na istoj tablici, sa ili bez GRANT OPCIJE, bilo kojem drugom korisniku. Ovo ne mijenja vlasništvo nad samom tablicom; kao i ranije, tabela pripada svom kreatoru. (Zbog toga, odobreni korisnici moraju imati prefiks ID-a pristupa vlasnika kada se pozivaju na ove tablice. Sljedeće poglavlje će vam pokazati ovu metodu.) Korisnik koji koristi GRANT OPTION na svim privilegijama za datu tablicu imat će puno ovlaštenje u toj tablici.

OTKAZ PRIVILEGIJA

Baš kao što ANSI pruža naredbu CREATE TABLE za kreiranje tabele, umjesto naredbe DROP TABLE da je se riješi, naredba GRANT vam omogućava da date privilegije korisnicima bez pružanja načina da ih vratite. Potreba za uklanjanjem privilegija se svodi na naredbu REVOKE, koja je zapravo standardni alat sa prilično jasnim oblikom unosa. Sintaksa naredbe REVOKE je slična GRANT, ali ima suprotno značenje. Da biste uklonili INSERT privilegiju za Adriana u tabeli Order, možete ući

OPOZIVATI INSERT ON Orders OD Adriana;

Ovdje je dozvoljeno korištenje lista privilegija i korisnika kao i kod GRANT, tako da možete unijeti sljedeću naredbu:

OPOZOVI UMETNI, IZBRIŠI NA Kupcima OD Adriana, Stephen; Međutim, ovdje postoji određena nejasnoća. Ko ima pravo da ukine privilegije? Kada korisnik s pravom prenošenja privilegija na druge gubi to pravo? Hoće li ih izgubiti i korisnici kojima je dao ove privilegije? Budući da ovo nije standardna funkcija, ne postoje mjerodavni odgovori na ova pitanja, ali najčešći pristup je sljedeći: * Privilegije opoziva korisnik koji ih je dodijelio, a ukidanje će kaskadirati, odnosno automatski će se širiti na svi korisnici koji su od njega dobili privilegiju.

KORIŠĆENJE PREGLEDA ZA FILTRIRANJE PRIVILEGIJA

Akcije privilegija možete učiniti preciznijim korištenjem pogleda. Kad god korisniku dodijelite privilegiju na osnovnu tablicu, ona se automatski širi na sve redove i, kada koristite moguće izuzetke UPDATE i REFERENCES, na sve stupce tablice. Kreiranjem pogleda koji upućuje na temeljnu tablicu i zatim prenosi privilegiju na pogled umjesto na tablicu, možete ograničiti te privilegije na bilo koji izraz u upitu sadržanom u pogledu. Ovo uvelike poboljšava osnovne mogućnosti naredbe GRANT.

KO MOŽE PRIJAVITI?

Da biste kreirali pogled, morate imati privilegiju SELECT na svim tablicama koje referencirate u pogledu. Ako se pogled može mijenjati, sve privilegije INSERT, UPDATE i DELETE koje imate na osnovnoj tablici automatski će se prenijeti na pogled. Ako nemate privilegije za modifikaciju na osnovnim tabelama, nećete ih moći imati na pogledima koje kreirate, čak i ako se ti pogledi mogu mijenjati. Budući da se strani ključevi ne koriste u pogledima, privilegija REFERENCES se nikada ne koristi prilikom kreiranja pogleda. Sva ova ograničenja definira ANSI. Nestandardne sistemske privilegije (o kojima će biti riječi kasnije u ovom poglavlju) također se mogu omogućiti. U narednim odeljcima pretpostavićemo da kreatori pogleda o kojima raspravljamo imaju privatne ili odgovarajuće privilegije na svim osnovnim tabelama.

OGRANIČAVANJE PRIVILEGIJA IZBORA NA SPECIFIČNE KOLONE

Recimo da želite da korisniku Claire date mogućnost da vidi samo kolone snum i sname u tabeli Sales. To možete učiniti stavljanjem imena ovih kolona u prikaz

CREATE VIEW Clairesview KAO SELECT snum, sname FROM Salespeople; i dodijelite Claire privilegiju SELECT na prikaz, a ne na samoj tablici Sellers: GRANT SELECT On Clairesview za Claire; Možete kreirati privilegije posebno za stupce, kao što je korištenje drugih privilegija, ali za naredbu INSERT ovo će umetnuti zadane vrijednosti, a za naredbu DELETE, ograničenje stupca neće imati efekta. Privilegije REFERENCES i UPDATE mogu, naravno, učiniti stupce specifičnim bez pribjegavanja pogledu.

OGRANIČAVANJE PRIVILEGIJA ZA ODREĐENE NIZOVE Tipično, korisniji način filtriranja privilegija s pogledima je korištenje pogleda da se privilegija primjenjuje samo na određene redove. Ovo radite prirodno koristeći predikat na prikazu koji će odrediti koji su redovi uključeni. Da biste korisniku Adrianu dali privilegiju UPDATE na tablici Kupci za sve kupce koji se nalaze u Londonu, možete kreirati pogled ovako:

KREIRAJTE POGLED Londoncust KAO IZABERITE * OD kupaca WHERE grad = "London" SA OPCIJOM PROVERE; Zatim morate Adrianu dodijeliti privilegiju UPDATE na ovoj tabeli: GRANT UPDATE ON Londoncust Adrianu; Ovo je razlika između privilegije za određene redove i privilegije UPDATE za određene stupce, koja se primjenjuje na sve stupce tablice Kupci, ali ne i na redove, među kojima se neće uzeti u obzir redovi s vrijednošću spola grada različitom od Londona . Klauzula WITH CHECK OPTION sprječava Adriana da promijeni rodnu vrijednost grada u bilo šta drugo osim u London. PRUŽANJE PRISTUPA SAMO IZVAĐENIM PODATAKA Druga mogućnost je da se korisnicima ponudi pristup podacima koji su već preuzeti, a ne stvarnim vrijednostima u tabeli. Agregatne funkcije mogu biti vrlo zgodne za korištenje ove metode. Možete kreirati prikaz koji daje broj, prosjek i ukupan iznos za narudžbe za svaki dan narudžbe: KREIRAJTE PREGLED Ukupno datuma KAO SELECT odate, COUNT (*), SUM (amt), AVG (amt) FROM Orders GROUP BY odate; Sada dajete korisniku Diane privilegiju SELECT na prikazu Datetotals: GRANT SELECT ON Datetotals TO Diane; KORIŠĆENJE REPREZENTACIJA KAO ALTERNATIVE ZA OGRANIČENJA Jedna od najnovijih aplikacija u nizu, opisana u poglavlju 18, je upotreba pogleda sa OPCIJOM PROVERE kao alternativom ograničenjima. Pretpostavimo da ste htjeli biti sigurni da su sve rodne vrijednosti grada u tabeli Dobavljači u jednom od gradova u kojima vaša kompanija trenutno ima ured. Ograničenje CHECK možete postaviti direktno na kolonu grada, ali može postati teško promijeniti ga kasnije ako vaša kompanija tamo otvori druga odjeljenja, na primjer. Alternativno, možete kreirati prikaz koji isključuje nevažeće vrijednosti grada: KREIRAJTE PREGLED Curcities KAO IZABERITE * OD PRODAVAČA GDJE grad U ("London", "Rim", "San Jose", "Berlin") SA OPCIJOM PROVERE; Sada, umjesto da korisnicima dodijelite privilegije modifikacije u tabeli Trgovci, možete im dodijeliti u prikazu Curcities. Prednost ovog pristupa je u tome što ako trebate napraviti promjenu, možete izbrisati taj prikaz, kreirati novi i dodijeliti privilegije korisnicima u tom novom pogledu, što je lakše nego mijenjati ograničenja. Nedostatak je što vlasnik tablice Sales također mora koristiti ovaj pogled ako ne želi da njegove vlastite naredbe budu odbijene. S druge strane, ovaj pristup omogućava vlasniku tablice i bilo kome drugom da steknu privilegije modifikacije na samoj tablici, a ne na pogledu, kako bi napravili izuzetke od ograničenja.

Ovo je često poželjno, ali nije izvodljivo ako koristite ograničenja na osnovnoj tablici. Nažalost, ovi izuzeci neće biti vidljivi u prikazu. Ako odaberete ovaj pristup, htjet ćete kreirati drugi prikaz koji sadrži samo iznimke: KREIRAJTE PREGLED Ostali gradovi KAO ODABRAN * OD prodavača GDJE grad NE U ("London", "Rim", "San Jose", "Berlin") SA CHECK OPTION; Trebali biste odabrati da date korisnicima samo privilegiju SELECT na ovom prikazu tako da mogu vidjeti isključene redove, ali ne mogu staviti nevažeće vrijednosti grada u osnovnu tablicu. U stvari, korisnici mogu upiti oba pogleda u uniji i vidjeti sve redove odjednom.

DRUGE VRSTE PRIVILEGIJA

Naravno, želite da znate ko ima pravo da prvi kreira tabelu. Ovo područje privilegija nije ANSI, ali se ne može zanemariti. Sve standardne ANSI privilegije su izvedene iz ove privilegije; privilegije kreatora tablica koji mogu prenijeti privilegije objekata. Ako svi vaši korisnici kreiraju osnovne tabele u sistemu sa različite veličine to će dovesti do zaliha u njima i do neefikasnosti sistema. Pažnju privlače i druga pitanja:

Ko ima pravo da mijenja, briše ili ograničava tabele?

Trebaju li se prava za kreiranje osnovnih tabela razlikovati od prava za kreiranje pogleda?

Treba li postojati superkorisnik - korisnik koji je odgovoran za održavanje baze podataka i stoga ima većinu ili sve privilegije koje se ne dodjeljuju pojedinačno?

Sve dok ANSI nije uključen i dok se SQL ne koristi u raznim okruženjima, ne možemo dati konačan odgovor na ova pitanja. Predlažemo da ovdje razmotrimo dio najopćenitijih zaključaka.

Privilegije koje nisu definirane u smislu posebnih objekata podataka nazivaju se sistemske privilegije ili prava baze podataka. Na osnovnom nivou, oni će vjerovatno uključivati ​​pravo na kreiranje objekata podataka, vjerovatno osim osnovnih tabela (obično kreiranih od strane nekoliko korisnika) i pogleda (obično kreiranih od strane većine korisnika). Sistemske privilegije za kreiranje pogleda trebale bi biti dodatak, a ne umjesto, privilegije objekata koje ANSI zahtijeva od kreatora pogleda (opisano ranije u ovom poglavlju). Osim toga, u sistemu bilo koje veličine uvijek postoje neki tipovi superkorisnika - korisnici koji automatski imaju većinu ili sve privilegije - i koji mogu prenijeti svoj status superkorisnika na nekog drugog putem privilegije ili grupe privilegija. Administrator baze podataka, ili DBA, je termin koji se najčešće koristi za takvog superkorisnika i privilegije koje ima.

TIPIČNE SISTEMSKE PRIVILEGIJE

U opštem pristupu, postoje tri osnovne sistemske privilegije: - POVEZIVANJE, - RESURS i - DBA (Administrator baze podataka). Jednostavnije rečeno, CONNECT se može reći da se sastoji od prava na registraciju i prava na kreiranje pogleda i sinonima (pogledajte Poglavlje 23) ako su privilegije objekta prenesene. RESOURCE se sastoji od prava na kreiranje osnovnih tabela. DBA je privilegija superkorisnika koja korisniku daje visoko ovlaštenje u bazi podataka. Jedan ili više korisnika s funkcionalnošću administratora baze podataka može imati ovu privilegiju. Neki sistemi takođe imaju posebnog korisnika, koji se ponekad naziva SYSADM ili SYS (System Database Administrator), koji ima najviše ovlaštenje; to je posebno za njih, a ne samo za korisnika sa posebnim DBA privilegijama. U stvari, samo jednoj osobi je dozvoljeno da se registruje pod imenom SYSADM, što je njihov pristupni ID. Razlika je prilično suptilna i različito funkcionira u različitim sistemima. Za naše potrebe, mi ćemo se pozvati na visoko privilegovanog korisnika koji razvija i upravlja bazom podataka s DBA privilegijama, shvaćajući da su te privilegije zapravo iste privilegije. Komanda GRANT, u izmijenjenom obliku, može se koristiti sa privilegijama objekata kao i sistemskim privilegijama. Za početak, prijenos prava se može obaviti korištenjem DBA. Na primjer, DBA bi mogao Rodriguezu dodijeliti privilegiju kreiranja tablice na sljedeći način: GRANT RESOURCE Rodriguezu;

KREIRAJTE I BRIŠITE KORISNIKE

Naravno, postavlja se pitanje: odakle korisnik po imenu Rodriguez? Kako odrediti njegov ID odobrenja? U većini implementacija, DBA kreira korisnika automatski dajući mu privilegiju CONNECT. U ovom slučaju se obično dodaje klauzula IDENTIFIED BY koja označava lozinku. (Ako ne, operativni sistem mora odrediti da li se možete prijaviti u bazu podataka sa datim ID-om pristupa.) DBA bi, na primjer, mogao izdati GRANT CONNECT TO Thelonius IDENTIFIED BY Redwagon; koji će kreirati korisnika po imenu Thelonius, dati mu pravo da se registruje i dodijeliti mu lozinku Redwagon, sve u jednoj rečenici. Pošto je Thelonious već provjereni korisnik, on ili DBA mogu koristiti istu naredbu za promjenu Redwagonove lozinke. Iako je ovo zgodno, još uvijek postoje ograničenja u ovom pristupu. To je nemogućnost da imate korisnika koji se barem privremeno ne može registrovati. Ako želite spriječiti korisnika da se prijavi, morate koristiti privilegiju CONNECT na REVOKE, koja "uklanja" tog korisnika. Neke implementacije vam omogućavaju da kreirate i brišete korisnike, bez obzira na njihove privilegije za prijavu. Kada korisniku dodijelite privilegiju CONNECT, vi kreirate tog korisnika. Štaviše, da biste to uradili sami, morate imati DBA privilegiju. Ako će ovaj korisnik kreirati osnovne tabele (ne samo poglede), mora mu se dodijeliti i privilegija RESOURCE. Ali to odmah dovodi do drugog problema. Ako pokušate ukloniti privilegiju CONNECT korisniku koji ima tabele koje je kreirao, naredba će biti odbijena jer bi ostavila tablicu bez vlasnika, što nije dozvoljeno. Prvo morate ispustiti sve tablice koje je kreirao ovaj korisnik prije nego što uklonite njegovu privilegiju CONNECT. Ako ove tabele nisu prazne, verovatno ćete želeti da prenesete njihove podatke drugim tabelama pomoću naredbe INSERT, koja koristi upit. Ne morate posebno uklanjati privilegiju RESOURSE; Za brisanje korisnika dovoljno je izbrisati CONNECT. Iako je gore navedeno prilično standardan pristup sistemskim privilegijama, on također ima značajna ograničenja. Pojavili su se alternativni pristupi koji su preciznije definisani i preciznije kontrolišu privilegije sistema.

Ovi zaključci nas vode donekle dalje od SQL standarda kako je trenutno definiran, a u nekim implementacijama mogu u potpunosti ići dalje od SQL standarda. Ove stvari vas vjerovatno neće previše brinuti osim ako niste DBA ili korisnik visoki nivo. Redovni korisnici jednostavno moraju biti upoznati sa privilegijama sistema u principu, konsultujući njihovu dokumentaciju samo u slučaju posebnih poruka.

SAŽETAK

Privilegije vam daju mogućnost da vidite SQL iz nove perspektive kada SQL izvodi radnje preko posebnih korisnika na posebnom sistemu baze podataka. Sama naredba GRANT je prilično jednostavna: uz njenu pomoć dajete određene privilegije objekta jednom ili više korisnika. Ako dodijelite privilegiju WITH GRANT OPTION nekom korisniku, taj korisnik može zauzvrat dodijeliti tu privilegiju drugima. Sada razumete savete o korišćenju privilegija na pogledima – za poboljšanje privilegija u osnovnim tabelama, ili kao alternativu ograničenjima – i neke od prednosti i mana ovog pristupa. Sistemske privilegije koje su potrebne, ali nisu u okviru SQL standarda, razmatrane su u njihovom najopćenitijem obliku i tako ćete ih naučiti kroz praksu. Poglavlje 23 nastavit će raspravu o zaključivanju u SQL-u, kao što je spremanje ili vraćanje promjena, kreiranje vlastitih imena za tablice u vlasništvu drugih ljudi i razumijevanje šta se dešava kada različiti korisnici pokušaju pristupiti istom objektu u isto vrijeme.

RAD SA SQL-om

1. Dajte Janet pravo da promijeni ocjenu korisnika.

2. Dajte Stephanu pravo da drugim korisnicima dodijeli pravo postavljanja upita u tabeli Narudžbi.

3. Uklonite privilegiju INSERT u tabeli Dobavljači od Claire i od svih korisnika kojima je odobrena.

4. Dajte Jerryju pravo da ubaci ili izmijeni tabelu Kupci uz zadržavanje njegove sposobnosti da procjenjuje vrijednosti u rasponu od 100 do 500.

5. Dozvolite Janet da ispituje tabelu kupaca, ali je spriječite da smanji ocjene u istoj tablici kupaca.

Platforma SQL Servera koristi naredbu REVOKE kao način da opozove postavke dozvole dodijeljene datom korisniku. Ova točka je važna jer SQL Server podržava dodatni DENY izraz koji eksplicitno odbija korisniku pristup određenom resursu. U SQL Serveru, naredba REVOKE se može koristiti za opoziv privilegija dodijeljenih korisniku pomoću izraza GRANT. Ako želite eksplicitno uskratiti korisniku određenu privilegiju, trebali biste koristiti DENY naredbu.

SQL Server platforma ne podržava klauzule ANSI HIERARCHY OPTION i ADMIN OPTION. Iako klauzula ADMIN OPTION nije podržana, SQL Server verzija naredbe REVOKE ima dvije administrativne privilegije (CREATE i BACKUP). Sintaksa instrukcija je sljedeća.

POKAZI ([privilege_objekta] [, ...] | [sistemske_privilege]) [(kolona [, ...])]]| (DO | OD) (ime_primatelja [, …] | uloga [, …] | JAVNO | GOST) ]

OPCIJA GRANTA ZA

Korisnik je lišen prava da dodjeljuje određene privilegije drugim korisnicima.

privilegija objekta

Ukidaju se prava pristupa raznim uputstvima, koja se mogu kombinirati bilo kojim redoslijedom.

SVE

Sve privilegije dodijeljene u trenutno određene korisnike i/ili za određene objekte baze podataka. Ovaj prijedlog je obeshrabren jer promoviše dvosmislenost programiranja.

(ODABIR | UMETNI IZBRIŠI AŽURIRANJE)

Navedenom korisniku je odbijena navedena privilegija pristupa za navedeni objekt (na primjer, tablicu ili pogled). Da biste opozvali privilegije na nivou kolone, koristite listu kolona zatvorenu u zagrade.

REFERENCE

Pravo na kreiranje i brisanje ograničenja stranog ključa koja upućuju na objekt baze podataka kao na nadređeni objekt je opozvana.

Pravo korisnika da kreira ili izbriše pravilo u tabeli ili prikazu je opozvano.

Pravo na izvršavanje pohranjene procedure, korisnički definirane funkcije ili proširene pohranjene procedure je opozvano.

sistemska privilegija

Ukida se pravo na izvršavanje sljedećih naredbi: CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, BACKUP DATABASE i BACKUP LOG.

ON [objekat] [(kolona [, ...])]

Pravo pristupa korisniku navedenom objektu je opozvano. Ako je objekt tabela ili pogled, možete opozvati privilegije pristupa pojedinačnim stupcima. Možete opozvati SELECT, INSERT, UPDATE, DELETE i REFERENCES privilegije na tabeli ili prikazu. Na kolonama tablice ili pogleda, možete opozvati samo privilegije SELECT i UPDATE. Možete opozvati privilegije EXECUTE u pohranjenoj proceduri, korisnički definiranoj funkciji ili proširenoj pohranjenoj proceduri.

[TO | FROM] ime primaoca | uloga | JAVNO | GOST

Određuje korisnike ili uloge koji gube navedenu privilegiju. Možete koristiti ključnu riječ PUBLIC da opozovete privilegije dodijeljene ulozi PUBLIC (koja uključuje sve korisnike). Možete navesti više primalaca, odvajajući njihova imena zarezima. Podržano i u SQL Serveru Račun GUEST, koji koriste svi korisnici koji nemaju svoj unos u bazi.

Uklanjaju se privilegije korisnika koji su svoja prava dobili putem klauzule WITH GRANT OPTION. Ova klauzula je potrebna kada se koristi klauzula GRANT OPTION FOR.

AS (ime_grupe ime_uloge)

Naznačena su prava pod kojima se povlastica ukida. U nekim slučajevima, korisniku mogu privremeno biti potrebna prava određene grupe da nadjača navedene privilegije. U ovom slučaju, možete koristiti AS klauzulu da dobijete takva prava.

Dva oblika naredbe REVOKE, REVOKE privilegija objekta i REVOKE system_privilege, međusobno se isključuju. Ne pokušavajte da izvršite obe operacije u jednoj izjavi. Ključna sintaktička razlika između njih je da ne biste trebali koristiti klauzulu ON kada uklanjate sistemske privilegije. Na primjer, da uklonite sistemsku privilegiju, možete koristiti sljedeću naredbu.

OPOZOVI KREIRANJE BAZE PODATAKA, BACKUP BAZE PODATAKA OD dylana, katie

Ako su privilegije dodijeljene korisniku pomoću klauzule WITH GRANT OPTION, tada bi te privilegije trebalo opozvati korištenjem simultane upotrebe dvije klauzule - WITH GRANT OPTION i CASCADE. Na primjer:

OPOZITE OPCIJU DOBAVE ZA ODABIR, UMETANJE, AŽURIRANJE, BRISANJE NA naslovima urednicima CASCADE GO

Naredba REVOKE se može koristiti samo na trenutnoj bazi podataka. Shodno tome, ANSI standardne opcije CURRENTJJSER i CURRENTROLE se uvijek implicitno pretpostavljaju. Naredba REVOKE se također koristi za poništavanje svih DENY opcija.

SQL Server platforma također podržava dodatni DENY izraz. Sintaksa DENY naredbe je identična sintaksi naredbe REVOKE. Međutim, u suštini se razlikuju po tome što REVOKE neutrališe privilegije korisnika, dok ih DENY izričito zabranjuje. Koristite DENY naredbu da korisniku ili ulozi odbijete pristup privilegiji, čak i ako je privilegija dodijeljena eksplicitno ili putem dodjele uloge.

Naredba REVOKE se mora koristiti za uklanjanje prethodno odobrenih ili DENY privilegija. Na primjer, korisnica Kelly je otišla na produženo porodiljsko odsustvo. Za to vrijeme, njen pristup stolu za zaposlene bio je odbijen. Vratila se i ponovo smo dozvolili privilegije.

ODBIJAJTE SVE NA zaposleniku DA Kelly GO

OPOZOVI SVE ZAPOSLENE NA Kelly GO

U ovom primjeru, naredba REVOKE ne uklanja njene privilegije; ona nadjačava naredbu DENY.

Kreiranje korisnika samo po sebi ne daje korisniku nikakva prava za pristup objektima baze podataka.

Dozvole se dodjeljuju naredbom GRANT. Treba imati na umu da korisnik koji izdaje naredbu GRANT može prenijeti ili, ako želite, delegirati drugim korisnicima samo ona prava koja sam ima.

GRANT postavlja prava na objekte baze podataka korisnicima, ulogama ili drugim objektima baze podataka. Kada je objekat kreiran, samo njegov kreator ima prava na njega, i samo on može dodeliti prava drugim korisnicima ili objektima.

Za pristup tablici ili prikazu, korisniku ili objektu su potrebna prava SELECT, INSERT, UPDATE, DELETE ili REFERENCES. Sva prava se mogu dati uz opciju SVE.

Da bi pozvao proceduru u aplikaciji, korisnik mora imati prava EXECUTE.

Korisnici mogu dobiti dozvolu za dodjelu prava drugim korisnicima prenosom prava prema listi , što je specificirano opcijom WITH GRANT OPTION. Korisnik može drugima dodijeliti samo ona prava koja sam ima.

Dozvole se mogu dati svim korisnicima korištenjem opcije PUBLIC umjesto liste korisničkih imena. Navođenje opcije PUBLIC utječe samo na korisnike, ne i na objekte baze podataka.

Spisak prava je dat u tabeli. 8.5.

Tabela 8.5. Spisak prava

Prava može opozvati korisnik koji ih je dodijelio naredbom REVOKE. Ako su prava izdata koristeći SVE, onda se mogu likvidirati samo u načinu SVE; ako su prava izdana korištenjem JAVNO, onda se mogu likvidirati samo u JAVNOM načinu.

sintaksa:

GRANT (sve /PRIVILEGE) / LJST_ ) NA (TABLICA ]

(ime tabele/ime prikaza)

TO( /LIST_ /GROUP UNIX_group^

/IZVRŠI NA POSTUPKU procname TO

(LIST_ LIST_ (UZ OPCIJU GRANT./)

ILJST_rolename TO (PUBLIC

/LIST_ (SA ADKIN OPCIJOM] ) ;

;;= SELECT / DELETE / INSERT / UPDATE [ (LIST_col) ] j REFERENCE PT5T_co1) ]

; . = PROCEDURE procname j TRIGGER trigname j VIEW ime prikaza / JAVNO

;:= korisničko ime I ime uloge

:;= korisničko ime

Tabela 8.6. Opis elemenata sintakse naredbe GRANT

Argument Opis
privilegija Naziv dodijeljenog prava. Važeće vrijednosti: SELECT, DELETE, INSERT, UPDATE, REFERENCES
pukovnik Naziv kolone na koju su dodijeljena prava.
Tablename Naziv postojeće tabele na koju se odnose prava
Viewname Naziv postojeće revizije koja je predmet prava
Ime postojećeg objekta baze podataka (procedura, pregled, okidač) na koji se primjenjuju prava
korisničko ime Ime korisnika na kojeg se prenose prava
SA OPCIJOM GRANT Daje dozvole za prijenos korisnicima navedenim na LIST_
ime uloge Naziv postojeće uloge kreirane naredbom CREATE ROLE
Korisnik kojem su dodijeljena prava uloge. Spisak korisnika mora biti specificiran u isc4.gdb (kreiran, na primjer, pomoću IBConsole uslužnog programa)
GROUP unix_group Ime UNIX grupe definirano u /etc/group

Sljedeća naredba dodjeljuje SELECT i DELETE prava korisniku. Opcija WITH GRANT OPTION daje prava na njihov dalji prijenos.

Primjer 8.5

I ova komanda daje pravo da izvrši proceduru drugoj proceduri i korisniku.

Primjer 8.6

ODOBRITE IZVRŠENJE POSTUPKA PAUTOR PBOOKAUTHOR, MISHA;

U ovom slučaju, prenos prava na proceduru PBOOKAUTHOR u našoj bazi podataka je besmislen, jer jednostavno ne koristi proceduru PAUTHOR, ali je sintaktički sasvim korektan.

Sljedeća naredba je po sadržaju potpuno slična primjeru 8.5, ali je fokusirana na korištenje ugrađenog SQL-a.

Primjer 8.7 EXEC SQL

GRANT SELECT, IZBRIŠI U TBOOK MISHI SA GRANT OPCIJOM;

Likvidacija prava. REVOKE komanda

REVOKE uklanja prava pristupa objektima baze podataka. Prava su radnje s objektom koje su dopuštene korisniku. SQL prava su opisana u tabeli. 8.7.

Postoje neka ograničenja na koja treba obratiti pažnju kada koristite naredbu REVOKE. Samo korisnik koji ih je izdao može unovčiti prava. Jednom korisniku se mogu dodijeliti ista prava na objekt baze podataka od bilo kojeg broja različitih korisnika. Komanda REVOKE povlači za sobom lišavanje prava koja je prethodno dao ovaj određeni korisnik. Prava dodijeljena svim korisnicima opcijom PUBLIC mogu se opozvati samo naredbom REVOKE s opcijom PUBLIC. sintaksa:

REVOKE korisničko ime / JAVNO :;= /"USER7 korisničko ime

Sljedeća naredba eliminiše korisnikova prava na brisanje iz tabele (vidi primjer 8.5, u ovom slučaju on još uvijek ima prava čitanja).

Primjer 8.8

OPOZOVI IZBRIŠI NA PREUZETO OD MISHA;

I ova naredba opoziva pravo na izvršavanje procedure drugoj proceduri i korisniku (pogledajte isticanje odgovarajućih prava u primjeru 8.6)

OPOZIVATI .IZVRŠITI NA PAUTOR POSTUPKA IZ PBOOKAUTHOR POSTUPKA, MISHA;

 Top