Indstilling af tilladelser ved hjælp af grant-kommandoen. SQL GRANT-kommandoer tilbagekaldes

REVOKE - tilbagekald adgangsrettigheder

Syntaks

TILBAGE [TILDEL MULIGHED FOR] ((VÆLG | INDSÆT | OPDATERING | SLET | TRUNCATE | REFERENCER | TRIGGER) [, ...] | ALLE [PRIVILEGIER]) TIL ([TABEL] tabelnavn[, ...] | ALLE TABELLER I SKEMA skemanavn[, ...] ) FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( ( VÆLG | INDSÆT | OPDATERING | REFERENCER ) ( kolonnenavn[, ...]) [, ...] | ALLE [PRIVILEGIER] ( kolonnenavn[, ...]) ) PÅ [ TABEL ] tabelnavn[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( ( BRUG | VÆLG | OPDATERING ) [ , ... ] | ALLE [ PRIVILEGIER ] ) TIL ( SEKVENS ) sekvensnavn[, ...] | ALLE SEKVENSER I SKEMA skemanavn[, ...] ) FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( ( OPRET | FORBIND | MIDLERTIDIG | TEMP ) [ , ...] | ALLE [ PRIVILEGIER ] ) PÅ DATABASE databasenavn[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( BRUG | ALLE [ PRIVILEGIER ] ) PÅ DOMÆNE domænenavn[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( BRUG | ALLE [ PRIVILEGIER ] ) PÅ UDENLANDSKE DATAWAPPER tredjeparts_data_indpakningsnavn[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( BRUG | ALLE [ PRIVILEGIER ] ) PÅ UDENLANDSKE SERVER server navn[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( UDFØR | ALLE [ PRIVILEGIER ] ) TIL ( FUNKTION ) funktionsnavn ([ [ argument_mode ] [ argument_navn ] argument_type[, ...] ]) [, ...] | ALLE FUNKTIONER I SKEMA skemanavn[, ...] ) FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( BRUG | ALLE [ PRIVILEGIER ] ) PÅ SPROG sprog_navn[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( ( VÆLG | OPDATERING ) [ , ... ] | ALLE [ PRIVILEGIER ] ) PÅ STOR OBJEKT oid_BO[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( ( OPRET | BRUG ) [, ...] | ALLE [ PRIVILEGIER ] ) PÅ SKEMA skemanavn[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( OPRET | ALLE [ PRIVILEGIER ] ) PÅ BORDPLADSEN table_space[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGE [ TILDEL MULIGHED FOR ] ( BRUG | ALLE [ PRIVILEGIER ] ) PÅ TYPE typenavn[, ...] FRA ( [ GROUP ] rolle_navn| OFFENTLIG ) [, ...] [ CASCADE | BEGRÆNSNING ] TILBAGETRÆK [ ADMIN MULIGHED FOR ] rolle_navn[, ...] FRA rolle_navn[, ...] [ CASCADE | BEGRÆNSE]

Beskrivelse

Kommandoen REVOKE tilbagekalder en eller flere roller, der tidligere var tildelt rettigheder. Nøgleordet PUBLIC angiver en implicit defineret gruppe af alle roller.

Bemærk, at enhver given rolle modtager summen af ​​rettighederne givet direkte til den, rettighederne givet til enhver rolle, hvori den er inkluderet, og rettighederne givet til OFFENTLIG gruppe. Derfor, for eksempel, vil det at fratage PUBLIC SELECT-retten ikke nødvendigvis betyde, at alle roller mister SELECT-retten for et givent objekt: det forbliver med de roller, som det blev tildelt direkte eller indirekte gennem en anden rolle. Tilsvarende vil tilbagekaldelse af SELECT-retten fra en bruger muligvis ikke påvirke denne brugers mulighed for at bruge SELECT-retten, hvis denne ret er tildelt den PUBLIC-gruppe eller en anden rolle, som han eller hun er medlem af.

Hvis der er angivet TILSKUDSMULIGHED TIL, er det kun retten til at overdrage retten, der ophæves, ikke selve retten. Uden denne instruks bortfalder både retten og retten til at råde over den.

Hvis en bruger har en overdragelig ret og har givet den til andre brugere, anses sidstnævnte ret for afhængig. Når den første bruger fratages selve retten eller overførselsretten, og der er afhængige rettigheder, tilbagekaldes disse afhængige rettigheder også, hvis CASCADE er yderligere specificeret; ellers mislykkes operationen. Denne rekursive tilbagekaldelse påvirker kun rettigheder erhvervet gennem en kæde af brugere, der kan spores tilbage til den bruger, som er genstand for REVOKE-kommandoen. Brugere kan således ende med at beholde denne ret, hvis den også er erhvervet gennem andre brugere.

Når en adgangsret til en tabel tilbagekaldes, tilbagekaldes de tilsvarende rettigheder for hver tabelkolonne (hvis sådanne rettigheder er angivet) automatisk sammen med den. På den anden side, hvis en rolle har fået rettigheder til en tabel, har tilbagekaldelse af de samme rettigheder på det enkelte kolonneniveau ingen effekt.

Når en bruger fratages medlemskab i en rolle, ændres GRANT OPTION til ADMIN OPTION , ellers er opførselen af ​​kommandoen ens. Bemærk også, at denne form for kommandoen ikke accepterer det redundante GROUP-ord.

Noter

For at se de tilladelser, der er tildelt eksisterende tabeller og kolonner, kan du bruge kommandoen \dp i psql. Dets outputformat er diskuteret i beskrivelsen af ​​GRANT. For andre, ikke-tabelformede objekter, er andre \d kommandoer tilvejebragt, som også kan vise de rettigheder, der er tildelt dem.

En bruger kan kun tilbagekalde rettigheder, som han har givet til en anden direkte. Hvis f.eks. bruger A gav en overdragelig ret til bruger B, og bruger B til gengæld gav denne ret til bruger C, ville bruger A ikke kunne tilbagekalde denne ret direkte fra C. I stedet kunne bruger A tilbagekalde den overførbare lige fra bruger B og brug CASCADE-parameteren, så bruger C bliver frataget denne ret langs kæden. Eller hvis for eksempel både A og B gav samme ret til C, så vil A kunne tilbagekalde den ret, som han gav, men ikke bruger B, således at C som følge heraf stadig vil have denne ret.

Hvis en anden end ejeren af ​​objektet forsøger at tilbagekalde adgang til et objekt (ved hjælp af REVOKE), vil kommandoen mislykkes, hvis brugeren ikke har nogen rettigheder til det objekt. Hvis brugeren har nogle rettigheder, vil kommandoen blive udført, men brugeren vil kun kunne tilbagekalde de rettigheder, der blev givet til ham med retten til at disponere over dem. Formularerne REVOKE ALL PRIVILEGES vil udstede en advarsel, hvis brugeren slet ikke har sådanne rettigheder, mens andre formularer vil udstede en advarsel, hvis brugeren ikke har ret til at kontrollere de nøjagtige rettigheder, der er angivet i kommandoen. (I princippet gælder disse udsagn for ejeren af ​​en genstand, men han har lov til at kontrollere alle rettigheder, så sådanne situationer er ikke mulige.)

Hvis en superbruger udfører en GRANT- eller REVOKE-kommando, udføres kommandoen, som om den blev udført af ejeren af ​​det berørte objekt. Da alle rettigheder i sidste ende kommer fra objektets ejer (måske indirekte gennem en kæde eller gennem en dispositionsret), kan en superbruger tilbagekalde alle rettigheder, men dette kan kræve CASCADE-tilstand som beskrevet ovenfor.

REVOKE kan også udføres af en rolle, der ikke er ejeren af ​​det angivne objekt, men som er medlem af ejerrollen, eller et medlem af en rolle, der har WITH GRANT OPTION-rettigheder til det pågældende objekt. I dette tilfælde vil kommandoen blive udført, som om den blev udført af den indeholdende rolle, der faktisk ejer objektet eller har WITH GRANT OPTION-rettigheder. For eksempel, hvis tabel t1 ejes af rolle g1, hvoraf rolle u1 er medlem, så kan u1 tilbagekalde rettigheder til at bruge t1, der er skrevet som givet af rolle g1. Disse kan omfatte rettigheder givet af rollen u1 såvel som af andre medlemmer af rollen g1.

Hvis rollen, der udfører REVOKE-kommandoen, er blevet tildelt de specificerede rettigheder indirekte gennem flere rollemedlemskabsstier, er hvilken rolle der vil blive valgt til at udføre kommandoen, ikke bestemt. I sådanne tilfælde anbefales det at bruge kommandoen SET ROLE og skifte til den rolle, du vil se som udfører REVOKE. Hvis dette ikke gøres, kan rettigheder ikke tilbagekaldes som planlagt, eller rettigheder kan slet ikke tilbagekaldes.

Eksempler

Fjernelse af den offentlige gruppe fra at tilføje data til filmtabellen:

TILBAGE INDSÆT PÅ film FRA OFFENTLIGT;

Fjernelse af brugermanualen fra alle rettigheder til at se typer:

TILBAGE ALLE PRIVILEGIER PÅ slags FRA manuel;

Læg mærke til, hvad dette rent faktisk betyder « tage alle de rettigheder, jeg gav» .

Fjerner joe fra administratorrollen:

REVOKE admins FROM joe;

Kompatibilitet

Kompatibilitetsnotaterne for GRANT-kommandoen gælder også for REVOKE. Standarden kræver, at nøgleordet RESTRICT eller CASCADE angives, men PostgreSQL antager som standard RESTRICT.

Som standard har kontoen ingen rettigheder i Oracle-databasen. Det er ikke engang muligt at oprette forbindelser uden tildelte rettigheder. Og selv efter at have modtaget forbindelsesrettigheder, kan kontoen ikke gøre noget nyttigt (eller farligt) uden at opnå de relevante rettigheder. Rettigheder tildeles ved hjælp af GRANT-kommandoen og fjernes ved hjælp af REVOKE-kommandoen. Yderligere kommandodirektiver bruges til at tillade en konto at dele de rettigheder, den har, med andre brugere. Som standard er det kun administratorkonti (SYS og SYSTEM) der har tildelingsrettigheder. En bruger, der tildeler rettigheder til en anden bruger, kaldes bevillingsgiver, mens modtageren af ​​rettigheder kaldes bevillingshaver. Rettigheder er opdelt i to grupper: systemrettigheder, som groft sagt giver brugeren mulighed for at udføre handlinger, der påvirker dataordbogen, og rettigheder over objekter, som giver brugeren mulighed for at udføre handlinger, der påvirker dataene.

Systemrettigheder

I alt er omkring to hundrede systemrettigheder tilgængelige. De fleste af dem påvirker handlinger, der påvirker dataene (såsom oprettelse af tabeller eller brugere). Resten påvirker instansen eller databasen (oprettelse af tablespaces, ændring af databaseparametre og oprettelse af sessioner). De mest brugte tilladelser er

  • CREATESESSION – forbindelsesrettigheder. Uden disse rettigheder vil du ikke engang være i stand til at oprette forbindelse til databasen
  • RESTRICTEDSESSION – Hvis databasen blev lanceret med STARTUPRESTRICT-direktivet eller ALTERSYSTEMENABLERESTRICTEDSESSION-kommandoen blev brugt, vil kun brugere med disse rettigheder kunne oprette forbindelse til databasen
  • ALTERDATABASE – giver dig mulighed for at udføre kommandoer, der påvirker fysiske strukturer
  • ALTERSYSTEM – gør det muligt at ændre instansparametre og hukommelsesstruktur
  • CREATETABLESPACE – sammen med ALTERTABLESPACE og DROPTABLESPACE giver brugeren mulighed for at administrere tablespaces
  • CREATETABLE – giver gratee mulighed for at oprette tabeller i sit skema; inkluderer evnen til at oprette, ændre og slette tabeller, udføre DML og vælge kommandoer og administrere indekser
  • GRANTANYOBJECTPRIVILEGE – giver bevillingsmodtager mulighed for at administrere rettighederne til objekter, der ikke tilhører den, men giver ikke rettigheder til sig selv
  • CREATEANYTABLE – bevillingsmodtager kan oprette tabeller, der hører til andre konti
  • DROPANYTABLE – bevillingsmodtager giver dig mulighed for at slette tabeller, der tilhører andre konti
  • INSERTANYTABLE, UPDATEANYTABLE, DELETEANYTABLE – giver modtager ret til at udføre DML-kommandoer på objekter, der ikke tilhører den
  • SELECTANYTABLE – Giver modtageren tilladelse til at udføre SELECT på alle borde.

Syntaks for tildeling af rettigheder

GIV privilegium [, privilegium...] TIL brugernavn;

Efter oprettelse af en konto tildeles normalt rettigheder, der ofte bruges af brugere, der er involveret i udviklingen af ​​applikationen.

tillade oprette session, ændre session,

opret tabel, opret visning, opret synonym, opret klynge,

oprette databaselink, oprette sekvens,

oprette trigger, oprette type, oprette procedure, oprette operatør

til brugernavn;

Disse rettigheder giver dig mulighed for at forbinde og konfigurere en session, oprette objekter og gemme PL/SQL-objekter. Objekter kan kun oprettes i kontoskemaet; ingen rettigheder til ordninger på andre konti. Også oprettelse af objekter er begrænset af tablespace-grænser.

En anden mulighed for at tildele rettigheder ville være at tildele bevillingshaver adgang til at overføre rettigheder til andre konti. For eksempel

forbinde system/oracle;

giv oprette bord til scott med admin mulighed;

forbinde scott/tiger;

bevilge oprette tabel til jon;

Kørsel af disse kommandoer vil tillade SCOTT at oprette tabeller i sit skema og udstede GRANT-kommandoen. SCOTT giver brugeren JON rettigheder til at oprette tabeller - men JON vil kun kunne oprette tabeller i JON skemaet. Figur 6-5 viser brugerrettighederne i Databasekontrol; de samme oplysninger kan fås ved at forespørge i DBA_SYS_PRIVS-visningen.

Hvis systemtilladelser tilbagekaldes, forbliver alle handlinger, du udførte, mens du havde tilladelser, i kraft. Hvis du havde rettigheder med ADMIN OPTION, så vil alle brugere, som du har tildelt rettigheder til, beholde rettighederne, på trods af at dine rettigheder er blevet tilbagekaldt. Der er ingen registrering af, hvem der præcist tildelte systemrettigheder, så det er umuligt at fjerne CASCADE-rettigheder som vist i figur 6-6

Tilbagekaldelse af et systemprivilegium vil ikke kaskade (i modsætning til

tilbagekaldelse af et objektprivilegium).

ENHVER rettigheder giver adgang til alle objekter i databasen. Dermed

giv vælg ethvert bord til scott

Tillad SCOTT-kontoen at udføre en SELECT-forespørgsel på alle tabeller i alle databaseskemaer. Denne overdragelse af rettigheder betragtes som dårlig opførsel, og ALLE rettigheder tildeles kun til DBA'er.

Faktisk er ANY ikke så farlig nu som med tidligere udgivelser. Det er den ikke længere

inkluderer tabeller i SYS-skemaet, så dataordbogen er stadig beskyttet. Men

ALLE skal stadig bruges med ekstrem forsigtighed, da det fjerner al beskyttelse

fra brugertabeller.

Objektrettigheder

Objektrettigheder giver adgang til at udføre DML- og SELECT-kommandoer på tilsvarende objekter og eksekvere PL/SQL-objekter. Disse rettigheder eksisterer ikke for objekter i kontoskemaet; hvis en bruger har CREATE TABLE-systemrettigheder, betyder det, at han kan udføre SELECT- og DML-forespørgsler på de tabeller, han har oprettet uden yderligere rettigheder.

De ENHVER privilegier, der giver tilladelser til objekter i

hver brugerkonto i databasen er ikke objektprivilegier - det er de

systemrettigheder.

Objektrettigheder gælder for forskellige grupper af objekter

Kommandosyntaks

GIV privilegium PÅ objekt TIL brugernavn;

For eksempel

Du kan bruge ALLE til at anvende rettigheder til alle operationer, eller du kan bruge en specifik tabel- eller visningskolonnereference.

giv vælg på butik.ordrer til scott;

give opdatering (ordre_status) på store.orders til scott;

bevilge alle på store.regions til scott;

Disse kommandoer vil tillade SCOTT-kontoen at udføre en SELECT-forespørgsel på alle kolonner i ORDERS-tabellen i STORE-skemaet, men opdatere dataene i kun én kolonne. SCOTT-kontoen har også adgang til alle operationer på REGIONS-tabellen. Figur 6-7 viser resultatet af tildeling af rettigheder ved visning i Database Control

At give privilegier på kolonneniveau siges ofte at være dårlig praksis

på grund af den store arbejdsbyrde. Hvis det er nødvendigt at begrænse folk

adgang til bestemte kolonner, hvilket skaber en visning, der kun viser disse kolonner

ofte være et bedre alternativ.

Brug af WITH GRANT OPTION-direktivet vil give brugeren mulighed for at overføre sine rettigheder til andre konti. Oracle gemmer information om, hvem der har givet adgang til hvem på objektniveau; dette giver mulighed for at tilbagekalde rettigheder givet disse oplysninger. Lad os se på et eksempel

forbinde butik/admin123;

tildel udvælgelse på kunder til salg med tilskudsoption;

forbinde salg/salg;

giv vælg på butik.kunder til webapp med bevillingsmulighed;

tilslut webapp/oracle;

give select on store.customers to scott;

forbinde butik/admin123;

tilbagekalde valg på kunder fra salg;

Efter at have udført disse kommandoer, har hverken SALES-brugeren, WEBAPP-brugeren eller SCOTT-brugeren tilladelse til at udstede SELECT-kommandoer på STORE.CUSTOMERS-tabellen.

Tilbagekaldelse af et objektprivilegium vil kaskade (i modsætning til tilbagekaldelse af

I dette kapitel lærer du, hvordan du arbejder med privilegier. Som diskuteret i kapitel 2, bruges SQL typisk i miljøer, der kræver brugergenkendelse og skelnen mellem forskellige brugere af systemer. Generelt opretter databaseadministratorer selv brugere og giver dem privilegier. På den anden side har brugere, der selv opretter tabeller, rettigheder til at administrere disse tabeller. Privilegier er det, der bestemmer, om en specificeret bruger kan udføre en given kommando. Der er flere typer privilegier svarende til flere typer operationer. Privilegier tildeles og tilbagekaldes ved hjælp af to SQL-kommandoer: - GRANT og REVOKE. Dette kapitel vil vise dig, hvordan disse kommandoer bruges.

BRUGERE

Hver bruger i et SQL-miljø har et særligt identifikationsnavn eller -nummer. Terminologien er forskellig overalt, men vi har valgt (efter ANSI) at henvise til den eller nummeret som Access Identifier (ID). En kommando sendt til databasen er knyttet til en bestemt bruger; eller på anden måde en særlig adgangsidentifikator. Da det relaterer til en SQL-database, er tilladelses-id'et brugernavnet, og SQL kan bruge det specielle nøgleord USER, som refererer til det adgangs-id, der er knyttet til den aktuelle kommando. Kommandoen fortolkes og tillades (eller nægtes) baseret på information forbundet med adgangs-id'et for den bruger, der udsteder kommandoen.

TILMELDING

I systemer med mange brugere er der en form for login-procedure, som brugeren skal gennemføre for at få adgang til computersystemet. Denne procedure bestemmer, hvilket adgangs-id der vil blive knyttet til den aktuelle bruger. Typisk skal hver person, der bruger databasen, have deres eget adgangs-id og bliver ved registrering en gyldig bruger. Ofte kan brugere med mange opgaver dog registreres under forskellige adgangs-id'er, eller omvendt kan ét adgangs-id bruges af flere brugere. Fra et SQL-perspektiv er der ingen forskel mellem disse to tilfælde; det behandler brugeren blot som deres adgangs-id. SQL-databasen kan bruge sin egen login-procedure, eller den kan tillade et andet program, såsom operativsystemet (hovedprogrammet, der kører på din computer), at behandle logfilen og få adgangs-id'et fra det pågældende program. På den ene eller anden måde vil SQL have et adgangs-id til at knytte til dine handlinger, og BRUGER-nøgleordet vil være relevant for dig.

GIVER PRIVILEGIER

Hver bruger i en SQL-database har et sæt privilegier. Dette er, hvad brugeren har lov til at gøre (måske er det en logfil, som kan betragtes som et minimumsprivilegium). Disse privilegier kan ændre sig over tid - nye tilføjes, gamle fjernes. Nogle af disse privilegier er defineret i ANSI SQL, men der er yderligere privilegier, der også kræves. SQL-rettigheder som defineret af ANSI er ikke tilstrækkelige i de fleste virkelige situationer. På den anden side kan de typer privilegier, der er nødvendige, variere med den type system, du bruger - hvilket ANSI ikke giver nogen anbefalinger til. Privilegier, der ikke er en del af SQL-standarden, kan bruge syntaks, der ligner og ikke er helt i overensstemmelse med standarden.

STANDARDPRIVILEGIER

SQL-privilegier defineret af ANSI er objektprivilegier. Det betyder, at brugeren kun har privilegiet til at udføre en given kommando på et bestemt objekt i databasen. Naturligvis skal privilegier skelne mellem disse objekter, men et privilegiesystem, der udelukkende er baseret på et objekts privilegier, kan ikke adressere alt, hvad SQL har brug for, som vi vil se senere i dette kapitel. Et objekts privilegier er knyttet til både brugere og tabeller. Det vil sige, at privilegiet gives til en bestemt bruger i en specificeret tabel eller underliggende tabel eller visning. Du skal huske, at den bruger, der har oprettet tabellen (af enhver art), er ejeren af ​​denne tabel.

Det betyder, at brugeren har alle rettighederne i denne tabel og kan overføre privilegier til andre brugere i denne tabel. Privilegier, der kan tildeles en bruger:

VÆLG En bruger med dette privilegium kan køre forespørgsler på bordet.

INSERT En bruger med dette privilegium kan udstede en INSERT-kommando på en tabel.

UPDATE En bruger med dette privilegium kan udstede en UPDATE-kommando på en tabel. Du kan begrænse dette privilegium til specifikke tabelkolonner.

DELETE En bruger med dette privilegium kan udstede en DELETE-kommando på en tabel.

REFERENCER En bruger med dette privilegium kan definere en fremmednøgle, der bruger en eller flere kolonner i denne tabel som en overordnet nøgle. Du kan begrænse dette privilegium til bestemte kolonner. (Se kapitel 19 for detaljer om fremmednøgle og overordnet nøgle.)

Derudover vil du støde på ikke-standard objektprivilegier, såsom INDEX, som giver ret til at oprette et indeks på en tabel, SYNONYM, som giver ret til at oprette et synonym for et objekt, hvilket vil blive forklaret i kapitel 23, og ALTER, som giver ret til at udføre ALTER TABLE-kommandoen på en tabel. SQL-motoren tildeler disse privilegier til brugere ved hjælp af GRANT-kommandoen.

TILSKUD TEAM

Lad os antage, at brugeren Diane har en kundetabel og vil tillade brugeren Adrian at forespørge på den. Diane skal derefter indtaste følgende kommando:

TILSKUDSINDSÆT PÅ Sælgere TIL Diane;

Nu kan Adrian køre forespørgsler mod tabellen Kunder. Uden andre privilegier kan han kun vælge værdier; men kan ikke udføre nogen handling, der ville påvirke værdierne i Kunder-tabellen (herunder at bruge Kunder-tabellen som den overordnede tabel for fremmednøglen, hvilket begrænser de ændringer, der kan foretages til værdien i Kunder-tabellen).

Når SQL modtager en GRANT-kommando, kontrollerer den privilegierne for den bruger, der udsteder kommandoen, for at afgøre, om GRANT-kommandoen er gyldig. Adrian kan ikke afgive denne kommando på egen hånd. Den kan heller ikke give SELECT-tilladelse til en anden bruger: Tabellen tilhører stadig Diane (vi viser senere, hvordan Diane kan give Adrian SELECT-tilladelse til andre brugere).

Syntaksen er den samme som til at give andre privilegier. Hvis Adrian er ejeren af ​​sælgertabellen, kan han tillade Diane at indtaste rækker i den ved hjælp af følgende klausul

TILSKUDSINDSÆT PÅ Sælgere TIL Diane; Diane har nu ret til at placere en ny sælger i tabellen.

PRIVILEGIER GRUPPER, BRUGERGRUPPER

Du bør ikke begrænse dig til at give et enkelt privilegium til en individuel bruger med GRANT-kommandoen. Kommaseparerede lister over privilegier eller brugere er helt acceptable. Stephen kan levere både SELECT og INSERT i ordretabellen for Adrian

GIV UDVALG, INDSÆT PÅ ordrer TIL Adrian; eller for både Adrian og Diane GANT SELECT, INDSÆT PÅ ordrer TIL Adrian, Diane;

Når privilegier og brugere er opført på denne måde, tildeles hele listen over privilegier til alle specificerede brugere. I streng ANSI-fortolkning kan du ikke give privilegier på mange tabeller på én gang med en enkelt kommando, men nogle implementeringer kan lempe denne begrænsning ved at tillade dig at specificere flere tabeller, adskilt af kommaer, så hele listen af ​​privilegier kan tildeles for alle specificerede tabeller..

BEGRÆNSNING AF PRIVILEGIER PÅ SPECIFIKKE KOLONNER

Alle objektrettigheder bruger den samme syntaks, bortset fra kommandoerne UPDATE og REGERNCES, som ikke kræver kolonnenavne. UPDATE-privilegiet kan gives ligesom andre privilegier:

GIV OPDATERING PÅ Sælgere TIL Diane;

Denne kommando giver Diane mulighed for at ændre værdierne i enhver eller alle kolonner i leverandørtabellen. Men hvis Adrian vil forhindre Diane i at ændre f.eks. kommissioner, kan han komme ind

GIV OPDATERING (komm.) PÅ Sælgere TIL Diane;

Med andre ord skal den blot angive den specifikke kolonne, hvorpå UPDATE-privilegiet skal anvendes, i parentes efter tabelnavnet. Navnene på flere tabelkolonner kan angives i enhver rækkefølge, adskilt af kommaer:

GIV OPDATERING (by, komm.) PÅ Sælgere TIL Diane;

REFERENCER følger samme regel. Når du giver REFERENCES-privilegiet til en anden bruger, vil de være i stand til at oprette fremmednøgler, der refererer til kolonner i din tabel som overordnede nøgler. Ligesom UPDATE kan REFERENCES-privilegiet angives som en liste over en eller flere kolonner, som det privilegium er begrænset til. For eksempel kunne Diane give Stephen ret til at bruge kundetabellen som den overordnede nøgletabel med følgende kommando:

GIV REFERENCER (cname, cnum) OM kunder TIL Stephen; Denne kommando giver Stephen ret til at bruge cnum- og cname-kolonnerne som overordnede nøgler til enhver fremmednøgle i hans tabeller. Stephen kan kontrollere, hvordan dette gøres. Den kan definere (cname, cnum) eller, i vores tilfælde, (cnum, cname), som en overordnet nøgle med to kolonner, der matches af en fremmednøgle til to kolonner i en af ​​dens egne tabeller. Eller den kan oprette separate fremmednøgler for at referere til køn individuelt, og derved sikre, at Diane har en overordnet nøgle tildelt sig (se kapitel 19).

Uden begrænsninger på fremmednøglenumre skal den være baseret på disse overordnede nøgler, og forældrenøglerne for forskellige fremmednøgler skal have lov til at overlappe.

Som med UPDATE-privilegiet kan du ekskludere en liste over kolonner og dermed tillade, at alle kolonner bruges som overordnede nøgler. Adrian kan give Diane ret til at gøre dette med følgende kommando:

GIV REFERENCER OM Sælgere TIL Diane;

Naturligvis vil privilegiet kun være brugbart på kolonner, der har de begrænsninger, der kræves af forældrenøglerne.

BRUGER ALLE OG OFFENTLIGE ARGUMENTER

SQL understøtter to argumenter til GRANT-kommandoen, der har en speciel betydning: ALLE PRIVILEGES, eller simpelthen ALLE og PUBLIC. ALL bruges i stedet for privilegienavne i GRANT-kommandoen til at give alle privilegier i en tabel. For eksempel kunne Diane give Stephen hele sættet af privilegier i kundetabellen med følgende kommando:

GIV REFERENCER OM Sælgere TIL Diane;

(OPDATERING og REFERENCER-rettigheder gælder naturligvis for alle kolonner.) Her er en anden måde at sige det samme på:

GIV ALT PÅ kunder TIL Stephen;

PUBLIC er mere som en catch-all argumenttype end et brugerprivilegium. Når du tildeler udgivelsesrettigheder, modtager alle brugere dem automatisk. Oftest bruges dette til SELECT-privilegiet på visse underliggende tabeller eller visninger, som du ønsker at gøre tilgængelige for enhver bruger. For at tillade enhver bruger at se ordretabellen, kan du f.eks. indtaste følgende:

TILDEL UDVALG PÅ ORDRER TIL OFFENTLIGE;

Selvfølgelig kan du give ethvert eller alle privilegier til samfundet, men det er nok ikke tilrådeligt. Alle privilegier undtagen SELECT giver brugeren mulighed for at ændre (eller, i tilfælde af REFERENCER, begrænse) indholdet af tabellen. At tillade alle brugere at ændre indholdet af dine tabeller vil forårsage et problem.

Selvom du har en lille virksomhed, og alle dine nuværende brugere er i stand til at udføre ændringskommandoer på en given tabel, ville det være bedre at give privilegier til hver bruger individuelt end at give de samme privilegier til alle. PUBLIC er ikke begrænset til kun at overføre det til nuværende brugere. Enhver ny bruger, der tilføjes til dit system, vil automatisk modtage alle de privilegier, der tidligere er tildelt alle, så hvis du ønsker at begrænse bordadgang til alle, nu eller i fremtiden, er det bedst at tildele andre privilegier end SELECT til individuelle brugere.

TILDELING AF PRIVILEGIER VED BRUG MED TILSKUDSMULIGHED

Nogle gange ønsker skaberen af ​​et bord, at andre brugere skal kunne få privilegier på hans bord. Dette gøres typisk i systemer, hvor en eller flere personer opretter flere (eller alle) basistabellerne i en database og derefter uddelegerer ansvaret for dem til dem, der rent faktisk skal arbejde med dem. SQL giver dig mulighed for at gøre dette ved at bruge WITH GRANT OPTION-sætningen. Hvis Diane ønskede, at Adrian skulle være i stand til at give SELECT-privilegiet på Customers-tabellen til andre brugere, ville hun give ham SELECT-privilegiet ved hjælp af WITH GRANT OPTION-klausulen:

TILDEL VALG PÅ kunder TIL Adrian MED TILSKUDSMULIGHED; Adrian erhvervede derefter retten til at overføre SELECT-privilegiet til tredjeparter; det kan udstede kommandoen GRANT SELECT ON Diane.Customers TO Stephen; eller endda GIVE SELECT ON Diane.Customers TIL Stephen MED GRANT Option; En bruger med en GRANT OPTION på et bestemt privilegium på en given tabel kan til gengæld give denne rettighed på den samme tabel, med eller uden en GRANT OPTION, til enhver anden bruger. Dette ændrer ikke ejerskabet af selve bordet; som før tilhører bordet dets skaber. (Derfor skal tildelte brugere præfikse ejeradgangs-id'et, når de refererer til disse tabeller. Det næste kapitel vil vise dig denne metode.) En bruger, der bruger GRANT OPTION på alle privilegier for en given tabel, vil have fuld autoritet i denne tabel.

ANNULLERING AF PRIVILEGIER

Ligesom ANSI leverer CREATE TABLE-kommandoen til at oprette en tabel i stedet for DROP TABLE-kommandoen for at slippe af med den, giver GRANT-kommandoen dig mulighed for at give privilegier til brugere uden at give mulighed for at tage dem tilbage. Behovet for at fjerne privilegier kommer ned til REVOKE-kommandoen, som faktisk er et standardværktøj med en ret klar form for indtastning. Syntaksen for REVOKE-kommandoen ligner GRANT, men har den modsatte betydning. For at fjerne INSERT-privilegiet for Adrian i Order-tabellen, kan du indtaste

TILBAGE INDSÆT PÅ ordrer FRA Adrian;

Brug af lister over privilegier og brugere er tilladt her som med GRANT, så du kan indtaste følgende kommando:

TILBAGE INDSÆT, SLET PÅ kunder FRA Adrian, Stephen; Der er dog en vis uklarhed her. Hvem har ret til at tilbagekalde privilegier? Hvornår mister en bruger med ret til at overføre privilegier til andre denne ret? Vil de brugere, som han gav disse privilegier, også miste dem? Da dette ikke er en standardfunktion, er der ingen autoritative svar på disse spørgsmål, men den mest almindelige tilgang er denne: * Privilegier tilbagekaldes af den bruger, der har givet dem, og tilbagekaldelsen vil overlappe, det vil sige, at den automatisk forplanter sig til alle brugere, der modtog privilegiet fra ham.

BRUG AF VISNINGER TIL FILTRERING AF PRIVILEGIER

Du kan gøre privilegiehandlinger mere præcise ved at bruge visninger. Når du giver en bruger et privilegium på en basistabel, spredes det automatisk til alle rækker og, når du bruger de mulige UPDATE- og REFERENCES-undtagelser, til alle kolonner i tabellen. Ved at oprette en visning, der refererer til den underliggende tabel, og derefter overføre privilegiet til visningen i stedet for tabellen, kan du begrænse disse privilegier til alle udtryk i forespørgslen, der er indeholdt i visningen. Dette forbedrer i høj grad de grundlæggende muligheder for GRANT-kommandoen.

HVEM KAN INDLEGE?

For at oprette en visning skal du have SELECT-rettigheder på alle tabeller, som du refererer til i visningen. Hvis visningen kan ændres, vil alle INSERT-, UPDATE- og DELETE-rettigheder, du har på basistabellen, automatisk blive overført til visningen. Hvis du mangler ændringsprivilegier på basistabellerne, vil du ikke være i stand til at have dem på de visninger, du opretter, selvom disse visninger i sig selv kan ændres. Fordi fremmednøgler ikke bruges i visninger, bruges REFERENCES-privilegiet aldrig ved oprettelse af visninger. Alle disse begrænsninger er defineret af ANSI. Ikke-standard systemrettigheder (omtalt senere i dette kapitel) kan også aktiveres. I de følgende afsnit vil vi antage, at skaberne af de synspunkter, vi diskuterer, har private eller passende privilegier på alle underliggende tabeller.

BEGRÆNSNING AF VALGPRIVILEGE PÅ SPECIFIKKE KOLONNER

Lad os sige, at du vil give brugeren Claire mulighed for kun at se snum- og sname-kolonnerne i salgstabellen. Du kan gøre dette ved at sætte navnene på disse kolonner i visningen

OPRET VISNING Clairesview AS SELECT snum, sname FRA Sælgere; og giv Claire SELECT-privilegiet på visningen i stedet for på selve Sellers-bordet: GANT SELECT På Clairesview til Claire; Du kan oprette privilegier specifikt for kolonner, ligesom at bruge andre privilegier, men for en INSERT-kommando vil dette indsætte standardværdier, og for en DELETE-kommando vil kolonnebegrænsningen ikke have nogen effekt. REFERENCER og OPDATERING privilegier kan selvfølgelig gøre kolonner specifikke uden at ty til en visning.

BEGRÆNSNING AF PRIVILEGIER FOR SPECIFIKKE STRINGE Typisk er en mere nyttig måde at filtrere privilegier med visninger på at bruge visningen til at få privilegiet til kun at gælde for bestemte rækker. Det gør du naturligt ved at bruge et prædikat på visningen, der bestemmer, hvilke rækker der er inkluderet. For at give brugeren Adrian UPDATE-privilegiet på kundetabellen for alle kunder i London, kan du oprette en visning som denne:

OPRET VISNING Londoncust SOM VÆLG * FRA kunder HVOR by = "London" MED KONTROLMULIGHED; Du skal derefter give UPDATE-privilegiet på dette bord til Adrian: GANT UPDATE ON Londoncust TO Adrian; Dette er forskellen mellem privilegiet for visse rækker og UPDATE-privilegiet for visse kolonner, som gælder for alle kolonner i tabellen Kunder, men ikke for rækker, blandt hvilke rækker med en anden kønsværdi for byen end London ikke vil blive taget i betragtning . WITH CHECK OPTION-klausulen forhindrer Adrian i at ændre byens kønsværdi til noget andet end London. GIVER KUN ADGANG TIL UDTRAKTEDE DATA En anden mulighed er at tilbyde brugerne adgang til de data, der allerede er hentet, frem for de faktiske værdier i tabellen. Aggregerede funktioner kan være meget praktiske ved brug af denne metode. Du kan oprette en visning, der angiver antal, gennemsnit og total for ordrer for hver dag i ordren: CREATE VIEW Datototals AS SELECT odate, COUNT (*), SUM (amt), AVG (amt) FROM Orders GROUP BY odate; Du giver nu brugeren Diane SELECT-privilegiet på Datototal-visningen: GANT SELECT ON Datetotals TO Diane; BRUG AF REPRÆSENTATIONER SOM ET ALTERNATIV TIL BEGRÆNSNINGER En af de seneste applikationer i serien, beskrevet i kapitel 18, er brugen af ​​visninger med MED KONTROLMULIGHED som et alternativ til begrænsninger. Lad os sige, at du ville sikre dig, at alle kønsværdier i byen i tabellen Leverandører var i en af ​​de byer, hvor din virksomhed i øjeblikket har et kontor. Du kan sætte en CHECK-begrænsning direkte på bykolonnen, men det kan blive svært at ændre den senere, hvis din virksomhed f.eks. åbner andre afdelinger der. Alternativt kan du oprette en visning, der udelukker ugyldige byværdier: OPRET VISNING Valurter SOM SELECT * FRA Sælgere WHERE by IN ("London", "Rom", "San Jose", "Berlin") MED KONTROLMULIGHED; Nu, i stedet for at give brugere ændringsprivilegier i sælgertabellen, kan du tildele dem i visningen Curcities. Fordelen ved denne tilgang er, at hvis du har brug for at foretage en ændring, kan du slette den visning, oprette en ny og give privilegier til brugere i den nye visning, hvilket er nemmere end at ændre begrænsninger. Ulempen er, at ejeren af ​​Salgstabellen også skal bruge denne visning, hvis han ikke ønsker, at hans egne kommandoer skal afvises. På den anden side giver denne tilgang tabelejeren og enhver anden mulighed for at opnå ændringsprivilegier på selve bordet, snarere end på visningen, for at gøre undtagelser til begrænsninger.

Dette er ofte ønskeligt, men ikke muligt, hvis du bruger begrænsninger på basisbordet. Disse undtagelser vil desværre ikke være synlige i visningen. Hvis du vælger denne tilgang, vil du gerne oprette en anden visning, der kun indeholder undtagelser: OPRET VISNING Andre byer SOM SELECT * FRA Sælgere, HVOR by IKKE IN ("London", "Rom", "San Jose", "Berlin") MED KONTROL MULIGHED; Du bør vælge kun at give brugerne SELECT-privilegiet i denne visning, så de kan se de ekskluderede rækker, men ikke kan indsætte ugyldige byværdier i den underliggende tabel. Faktisk kunne brugere forespørge begge visninger i en forening og se alle rækkerne på én gang.

ANDRE TYPER FOR PRIVILEGIER

Selvfølgelig vil du gerne vide, hvem der har retten til at oprette bordet først. Dette privilegieområde er ikke ANSI, men det kan ikke ignoreres. Alle standard ANSI-rettigheder er afledt af dette privilegium; privilegier for tabelskabere, der kan overføre objektprivilegier. Hvis alle dine brugere opretter basistabeller i systemet med forskellige størrelser, vil dette føre til redundans i dem og til ineffektivitet af systemet. Andre spørgsmål vækker også opmærksomhed:

Hvem har ret til at ændre, slette eller begrænse tabeller?

Bør rettighederne til at oprette basistabeller være forskellige fra rettighederne til at oprette visninger?

Skal der være en superbruger - en bruger, der er ansvarlig for at vedligeholde databasen og derfor har de fleste, eller alle, privilegier, der ikke er givet individuelt?

Indtil ANSI er involveret, og SQL bruges i en række forskellige miljøer, kan vi ikke give et endeligt svar på disse spørgsmål. Vi foreslår her at overveje en del af de mest generelle konklusioner.

Privilegier, der ikke er defineret i form af specielle dataobjekter, kaldes systemprivilegier eller databaserettigheder. På et grundlæggende niveau vil disse sandsynligvis omfatte retten til at oprette dataobjekter, sandsynligvis andre end basistabeller (normalt oprettet af nogle få brugere) og visninger (normalt oprettet af et flertal af brugere). Systemrettigheder til at oprette visninger bør være et supplement til, og ikke i stedet for, de objektprivilegier, som ANSI kræver af visningsskabere (beskrevet tidligere i dette kapitel). Derudover er der i et system af enhver størrelse altid nogle typer superbrugere - brugere som automatisk har de fleste eller alle privilegier - og som kan overføre deres superbrugerstatus til en anden gennem et privilegium eller en gruppe af privilegier. Database Administrator, eller DBA, er det udtryk, der oftest bruges for en sådan superbruger og de privilegier, den har.

TYPISKE SYSTEMPRIVILEGIER

I en generel tilgang er der tre grundlæggende systemprivilegier: - CONNECT, - RESOURCE og - DBA (Database Administrator). Forenklet set kan CONNECT siges at bestå af retten til at registrere og retten til at oprette visninger og synonymer (se kapitel 23), hvis objektets privilegier overtages. RESOURCE består af retten til at oprette basistabeller. DBA er et superbrugerprivilegium, der giver brugeren høj autoritet i databasen. En eller flere brugere med datkan have dette privilegium. Nogle systemer har også en særlig bruger, nogle gange kaldet SYSADM eller SYS (System Database Administrator), som har den højeste autoritet; det er specielt for dem, og ikke kun en bruger med særlige DBA-rettigheder. Faktisk har kun én person lov til at registrere sig med navnet SYSADM, som er deres adgangs-id. Sondringen er ret subtil og fungerer forskelligt i forskellige systemer. Til vores formål vil vi referere til en meget privilegeret bruger, der udvikler og administrerer en database med DBA-privilegier, idet vi forstår, at disse privilegier faktisk er de samme privilegier. GRANT-kommandoen, i modificeret form, kan bruges med objektrettigheder såvel som systemrettigheder. Til at begynde med kan overdragelse af rettigheder ske ved hjælp af en DBA. En DBA kunne f.eks. give Rodriguez rettigheder til at oprette bord på følgende måde: TILDEL RESOURCE TIL Rodriguez;

OPRET OG SLET BRUGERE

Spørgsmålet opstår naturligvis: hvor kommer en bruger ved navn Rodriguez fra? Hvordan bestemmes dets clearance-id? I de fleste implementeringer opretter DBA brugeren ved automatisk at give ham CONNECT-privilegiet. I dette tilfælde tilføjes en IDENTIFIED BY-klausul normalt for at angive adgangskoden. (Hvis ikke, skal styresystemet afgøre, om du kan logge ind i databasen med det givne adgangs-id.) DBA'en kunne f.eks. udstede GRANT CONNECT TO Thelonius IDENTIFIED BY Redwagon; som vil oprette en bruger ved navn Thelonius, give ham ret til at registrere sig og tildele ham adgangskoden Redwagon, alt sammen i én sætning. Da Thelonious allerede er en godkendt bruger, kan han eller DBA bruge den samme kommando til at ændre Redwagons adgangskode. Selvom dette er praktisk, er der stadig begrænsninger i denne tilgang. Dette er umuligheden af ​​at have en bruger, der ikke kunne registrere sig, i det mindste midlertidigt. Hvis du vil forhindre en bruger i at logge ind, skal du bruge CONNECT privilegiet på REVOKE, som "fjerner" denne bruger. Nogle implementeringer giver dig mulighed for at oprette og slette brugere, uanset deres login-privilegier. Når du giver CONNECT-privilegiet til en bruger, opretter du denne bruger. Desuden skal du have DBA-privilegium for at gøre dette selv. Hvis denne bruger skal oprette basistabeller (ikke kun visninger), skal han også tildeles RESOURCE-privilegiet. Men dette giver straks anledning til et andet problem. Hvis du forsøger at fjerne CONNECT-privilegiet for en bruger, som har tabeller oprettet af ham, vil kommandoen blive afvist, fordi den ville forlade bordet uden en ejer, hvilket ikke er tilladt. Du skal først slippe alle tabeller oprettet af denne bruger, før du fjerner hans CONNECT-privilegium. Hvis disse tabeller ikke er tomme, vil du sandsynligvis sende deres data til andre tabeller ved hjælp af kommandoen INSERT, som bruger en forespørgsel. Du behøver ikke at fjerne RESOURSE-privilegiet separat; Det er nok at slette CONNECT for at slette brugeren. Selvom ovenstående er en ret standardtilgang til systemprivilegier, har den også betydelige begrænsninger. Der er opstået alternative tilgange, der er mere specifikt definerede og kontrolsystemprivilegier mere præcist.

Disse konklusioner fører os noget ud over SQL-standarden, som den er defineret i øjeblikket, og i nogle implementeringer kan den gå helt ud over SQL-standarden. Disse ting vil sandsynligvis ikke bekymre dig for meget, medmindre du er DBA eller bruger på højt niveau. Almindelige brugere skal simpelthen være fortrolige med systemets privilegier i princippet og kun konsultere deres dokumentation i tilfælde af særlige meddelelser.

RESUMÉ

Privilegier giver dig mulighed for at se SQL fra et nyt perspektiv, når SQL udfører handlinger gennem specielle brugere på et særligt databasesystem. Selve GRANT-kommandoen er ret enkel: med dens hjælp giver du visse privilegier for et objekt til en eller flere brugere. Hvis du giver privilegiet WITH GRANT OPTION til en bruger, kan denne bruger igen give privilegiet til andre. Du forstår nu tipsene om brug af privilegier på visninger – for at forbedre privilegier i basistabeller eller som et alternativ til begrænsninger – og nogle af fordelene og ulemperne ved denne tilgang. Systemrettigheder, der er påkrævet, men ikke inden for rammerne af SQL-standarden, er blevet diskuteret i deres mest generelle form, og du vil derfor lære dem gennem praksis. Kapitel 23 vil fortsætte diskussionen om inferens i SQL, såsom at gemme eller gendanne ændringer, oprette dine egne navne til tabeller, der ejes af andre mennesker, og forstå, hvad der sker, når forskellige brugere forsøger at få adgang til det samme objekt på samme tid.

ARBEJDER MED SQL

1. Giv Janet ret til at ændre kundens vurdering.

2. Giv Stephan ret til at give andre brugere ret til at stille forespørgsler i ordretabellen.

3. Fjern INSERT-privilegiet i leverandørtabellen fra Claire og fra alle brugere, som det blev tildelt.

4. Giv Jerry ret til at indsætte eller ændre kundetabellen, mens han bevarer sin evne til at evaluere værdier i intervallet 100 til 500.

5. Tillad Janet at forespørge i kundetabellen, men forhindre hende i at nedsætte vurderinger i den samme kundetabel.

Oprettelse af en bruger giver ikke i sig selv rettigheder til at få adgang til databaseobjekter.

Tilladelser gives af GRANT-kommandoen. Det skal huskes, at brugeren, der udsteder GRANT-kommandoen, kun kan overføre eller, hvis du foretrækker det, uddelegere til andre brugere de rettigheder, som han selv har.

GRANT sætter rettigheder på databaseobjekter til brugere, roller eller andre databaseobjekter. Når et objekt oprettes, har kun dets skaber rettigheder til det, og kun han kan give rettigheder til andre brugere eller objekter.

For at få adgang til en tabel eller visning skal brugeren eller objektet have rettighederne SELECT, INSERT, UPDATE, DELETE eller REFERENCES. Alle rettigheder kan gives med ALLE-indstillingen.

For at kalde en procedure i en applikation skal brugeren have EXECUTE-rettigheder.

Brugere kan få tilladelse til at give rettigheder til andre brugere ved at overføre rettigheder i henhold til listen , som er angivet af WITH GRANT Option. Brugeren kan kun give andre de rettigheder, som han selv har.

Tilladelser kan gives til alle brugere ved at bruge indstillingen OFFENTLIG i stedet for listen over brugernavne. Angivelse af indstillingen PUBLIC påvirker kun brugere, ikke databaseobjekter.

Listen over rettigheder er angivet i tabel. 8.5.

Tabel 8.5. Liste over rettigheder

Rettigheder kan tilbagekaldes af brugeren, der har givet dem ved hjælp af REVOKE-kommandoen. Hvis rettigheder blev udstedt ved hjælp af ALL, så kan de kun likvideres i ALL-tilstand; hvis rettigheder blev udstedt ved hjælp af PUBLIC, så kan de kun likvideres i OFFENTLIG-tilstand.

Syntaks:

TILDEL (alle /PRIVILEGES] / LJST_ ) TIL (TABEL ]

(tabelnavn/visningsnavn)

TIL( /LISTE_ /GROUP UNIX_gruppe^

/UDFØR PÅ PROCEDURE procname TO

(LISTE_ LISTE_ (MED TILSKUDSMULIGHED./)

ILJST_rollename TO (OFFENTLIG

/LISTE_ (MED ADKIN MULIGHED] );

;;= VÆLG / SLET / INDSÆT / OPDATERING [ (LIST_col) ] j REFERENCER PT5T_co1) ]

; . = PROCEDURE procnavn j TRIGGER trignavn j VIS visningsnavn / OFFENTLIG

;:= brugernavn I rollenavn

:;= brugernavn

Tabel 8.6. Beskrivelse af syntakselementerne i GRANT-kommandoen

Argument Beskrivelse
privilegium Navnet på den tildelte rettighed. Gyldige værdier: SELECT, DELETE, INSERT, UPDATE, REFERENCES
Col Navnet på den kolonne, som rettighederne er tildelt.
Tabelnavn Navn på den eksisterende tabel, som rettighederne gælder for
Visningsnavn Navn på den eksisterende anmeldelse, der er underlagt rettigheder
Navnet på et eksisterende databaseobjekt (procedure, gennemgang, trigger), som rettighederne gælder
brugernavn Navn på den bruger, som rettighederne er overført til
MED TILSKUDSMULIGHED Giver overførselstilladelser til brugere angivet i LIST_
rollenavn Navn på en eksisterende rolle oprettet af kommandoen CREATE ROLE
Brugeren, som rollerettighederne er tildelt. Listen over brugere skal angives i isc4.gdb (oprettet f.eks. af IBConsole-værktøjet)
GROUP unix_group UNIX-gruppenavn defineret i /etc/group

Følgende kommando giver SELECT og DELETE rettigheder til brugeren. Muligheden WITH GRANT Option giver rettighederne til deres videre overførsel.

Eksempel 8.5

Og denne kommando giver ret til at udføre en procedure til en anden procedure og bruger.

Eksempel 8.6

TILDELE UDFØRELSE AF PROCEDURE PAUTHOR TIL PROCEDURE PBOOKAUTHOR, MISHA;

I dette tilfælde er det meningsløst at overføre rettigheder til PBOOKAUTHOR-proceduren i vores database, da den simpelthen ikke bruger PAUTHOR-proceduren, men syntaktisk er den ganske korrekt.

Følgende kommando ligner fuldstændigt indholdet i eksempel 8.5, men er fokuseret på at bruge indlejret SQL.

Eksempel 8.7 EXEC SQL

TILDEL SELECT, SLET PÅ TBOOK TIL MISHA MED TILDELINGSMULIGHED;

Likvidation af rettigheder. REVOKE kommando

REVOKE fjerner adgangsrettigheder til databaseobjekter. Rettigheder er handlinger med et objekt, som er tilladt for brugeren. SQL-rettigheder er beskrevet i tabel. 8.7.

Der er nogle begrænsninger at bemærke, når du bruger REVOKE-kommandoen. Kun den bruger, der har udstedt dem, kan likvidere rettigheder. En bruger kan tildeles de samme rettigheder til et databaseobjekt fra et vilkårligt antal forskellige brugere. REVOKE-kommandoen medfører fratagelse af rettigheder, der tidligere er givet af denne særlige bruger. Rettigheder givet til alle brugere af PUBLIC-indstillingen kan kun tilbagekaldes ved REVOKE-kommandoen med PUBLIC-indstillingen. Syntaks:

TILBAGE brugernavn / OFFENTLIG :;= /"BRUGER7 brugernavn

Den følgende kommando eliminerer brugerens rettigheder til at slette fra tabellen (se eksempel 8.5, i dette tilfælde har han stadig læserettigheder).

Eksempel 8.8

TILBAGE SLET PÅ TAGE FRA MISHA;

Og denne kommando tilbagekalder retten til at udføre en procedure fra en anden procedure og bruger (se fremhævelse af de tilsvarende rettigheder i eksempel 8.6)

TILBAGE .EXECUTE ON PROCEDURE PAUTHOR FRA PROCEDURE PBOOKAUTHOR, MISHA;

SQL Server-platformen bruger REVOKE-sætningen som en måde at tilbagekalde de tilladelsesindstillinger, der er tildelt en given bruger. Dette punkt er vigtigt, fordi SQL Server understøtter en yderligere DENY-sætning, der eksplicit nægter en bruger adgang til en specificeret ressource. I SQL Server kan REVOKE-sætningen bruges til at tilbagekalde privilegier, der er tildelt en bruger ved hjælp af GRANT-sætningen. Hvis du eksplicit ønsker at nægte en bruger et bestemt privilegium, skal du bruge DENY-erklæringen.

SQL Server-platformen understøtter ikke klausulerne ANSI HIERARCHY OPTION og ADMIN OPTION. Selvom ADMIN OPTION-udtrykket ikke understøttes, har SQL Server-versionen af ​​REVOKE-kommandoen to administrative rettigheder (CREATE og BACKUP). Instruktionssyntaksen er som følger.

TILBAGE ([object_privilege] [, ...] | [system_privilege]) [(kolonne [, ...])]]| (TO | FROM) (recipient_name [, …] | rolle [, …] | OFFENTLIG | GÆST) ]

TILSKUDSMULIGHED FOR

Brugeren er frataget retten til at tildele specifikke privilegier til andre brugere.

objektprivilegium

Adgangsrettigheder til forskellige instruktioner, som kan kombineres i vilkårlig rækkefølge, tilbagekaldes.

ALLE

Alle privilegier, der i øjeblikket er tildelt de angivne brugere og/eller til de angivne databaseobjekter, tilbagekaldes. Dette forslag frarådes, fordi det fremmer programmering tvetydighed.

(VÆLG | INDSÆT SLET OPDATERING)

Den angivne bruger nægtes det angivne adgangsprivilegium på det angivne objekt (f.eks. en tabel eller visning). For at tilbagekalde rettigheder på kolonneniveau skal du bruge en liste over kolonner omgivet af parentes.

REFERENCER

Retten til at oprette og slette fremmednøglebegrænsninger, der refererer til et databaseobjekt som et overordnet objekt, tilbagekaldes.

Brugerens ret til at oprette eller slette en regel i en tabel eller visning tilbagekaldes.

Retten til at udføre en lagret procedure, brugerdefineret funktion eller udvidet lagret procedure tilbagekaldes.

systemprivilegium

Retten til at udføre følgende sætninger er tilbagekaldt: CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, BACKUP DATABASE og BACKUP LOG.

TIL [objekt] [(kolonne [, ...])]

Brugerens adgangsret til det angivne objekt tilbagekaldes. Hvis objektet er en tabel eller visning, kan du tilbagekalde adgangsrettigheder på individuelle kolonner. Du kan tilbagekalde privilegierne SELECT, INSERT, UPDATE, DELETE og REFERENCES på en tabel eller visning. På tabel- eller visningskolonner kan du kun tilbagekalde SELECT- og UPDATE-rettigheder. Du kan tilbagekalde EXECUTE-rettigheder i en lagret procedure, brugerdefineret funktion eller udvidet lagret procedure.

[TIL | FROM] modtagernavn | rolle | OFFENTLIGE | GÆST

Angiver de brugere eller roller, der mister det angivne privilegium. Du kan bruge nøgleordet PUBLIC til at tilbagekalde privilegier, der er tildelt rollen PUBLIC (som omfatter alle brugere). Du kan angive flere modtagere ved at adskille deres navne med kommaer. SQL Server understøtter også GUEST-kontoen, som bruges af alle brugere, der ikke har deres egen konto i databasen.

Rettighederne for brugere, der har modtaget deres rettigheder gennem WITH GRANT OPTION-klausulen, fjernes. Denne klausul er påkrævet, når du bruger GRANT OPTION FOR-klausulen.

AS (gruppenavn rollenavn)

De rettigheder, hvorunder privilegiet tilbagekaldes, er angivet. I nogle tilfælde kan en bruger midlertidigt have brug for en bestemt gruppes rettigheder for at tilsidesætte de angivne privilegier. I dette tilfælde kan du bruge AS-klausulen til at opnå sådanne rettigheder.

De to former for REVOKE-sætningen, REVOKE-objektprivilegium og REVOKE system_privilege, er gensidigt udelukkende. Forsøg ikke at udføre begge operationer på én gang. Den vigtigste syntaktiske forskel mellem de to er, at du ikke bør bruge ON-klausulen, når du fjerner systemrettigheder. For at fjerne et systemprivilegium kan du f.eks. bruge følgende kommando.

TILBAGE OPRET DATABASE, BACKUP DATABASE FRA dylan, katie

Hvis privilegier blev tildelt en bruger ved hjælp af WITH GRANT OPTION-klausulen, skal disse privilegier tilbagekaldes ved samtidig brug af to klausuler - WITH GRANT OPTION og CASCADE. For eksempel:

TILBAGE TILDELINGSMULIGHED FOR VALG, INDSÆT, OPDATERING, SLET PÅ titler TIL redaktører CASCADE GO

REVOKE-kommandoen kan kun bruges på den aktuelle database. Derfor antages ANSI-standardindstillingerne CURRENTJJSER og CURRENTROLE altid implicit. REVOKE-erklæringen bruges også til at annullere alle DENY-muligheder.

SQL Server-platformen understøtter også en yderligere DENY-sætning. Syntaksen for DENY-sætningen er identisk med syntaksen for REVOKE-sætningen. Men i det væsentlige adskiller de sig ved, at REVOKE neutraliserer brugerens privilegier, mens DENY eksplicit forbyder dem. Brug DENY-sætningen til at nægte en bruger eller rolle adgang til et privilegium, selvom privilegiet er givet eksplicit eller gennem rolletildeling.

REVOKE-sætningen skal bruges til at fjerne tidligere tildelte eller DENY-rettigheder. For eksempel gik bruger Kelly på forlænget barsel. I løbet af denne tid blev hendes adgang til medarbejderbordet nægtet. Hun vendte tilbage, og vi gav privilegier igen.

NÆGT ALLE PÅ medarbejder TIL Kelly GO

TILBAGE ALLE medarbejdere TIL Kelly GO

I dette eksempel fjerner REVOKE-kommandoen ikke hendes privilegier; den tilsidesætter DENY-kommandoen.