< Øídící pøíkazy | SQL postupnì | REVOKE >
Tímto pøíkazem pøidìjujeme nìjaké právo nìjakému u¾ivateli èi roli. Rùzných mo¾ných systémových práv i objektových práv je mnoho, zde uká¾eme, jak pøidìlovat vybraná základní práva k tabulkám a pohledùm.
V pøíkladech pøedpokládáme, ¾e existují u¾ivatelé KROKODYL1 a KROKODYL2 a ¾e se mù¾ete jako tito u¾ivatelé pøihlásit. Eventuelnì zamìòte tato u¾ivatelská jména za jiná, která se hodí pro vá¹ pøípad. Tabulky a pohledy z uvedených pøíkladù jsou z kapitol CREATE TABLE a CREATE VIEW
Pøíklad: Pøidìlte právo INSERT a UPDATE k tabulce TEMA u¾ivateli KROKODYL1.
grant insert, update on TEMA to KROKODYL1; |
Pøihla¹te se jako KROKODYL1 a vyzkou¹ejte práva k tabulce <schema_kde_jste_pohled_vytvoøili>.TEMA . Asi vám bude chybìt právo SELECT... |
Pøíklad: (Pøihla¹te se k pùvodnímu úètu.) Pøidìlte právo SELECT k pohledu POCTY_VE_MESTECH u¾ivateli KROKODYL2, dejte mu mo¾nost toto právo postoupit dal¹ím u¾ivatelùm.
grant select on POCTY_VE_MESTECH to KROKODYL2 with grant option; |
Klauzule with grant option znamená, ¾e u¾ivatel, kterému je takto právo pøidìleno, mù¾e ho sám dále pøidìlit nìkomu dal¹ímu. Opìt pod úètem KROKODYL2 vyzkou¹ejte. |
Pøíklad: (Pøihla¹te se k pùvodnímu úètu.) Pøidìlte právo SELECT a UPDATE k pohledu SKYPE_OSOBY u¾ivateli KROKODYL2.
grant select,update on SKYPE_OSOBY to KROKODYL2; |
| Nyní mù¾ete vyzkou¹et, zda u¾ivatel KROKODYL2 mù¾e do sloupce SKYPE pohledu SKYPE_OSOBY vlo¾it práznou hodnotu: pøihla¹te se jako u¾ivatel KROKODYL2, najdìte nìjakého ze SKYPE_OSOBY a zjitìte jeho ID. |
update <schema_kde_jste_pohled_vytvoøili>.SKYPE_OSOBY set SKYPE=NULL where ID=<zji¹tìné_ID>; |
 | Grantovat mù¾eme jen práva, ke kterým máme GRANT OPTION, tedy k objektùm, jich¾ jsme vlastníky, nebo nám bylo pøidìleno právo with grant option. |
Následuje komplexní pøíklad na správu práv k jednotlivým záznamùm.
Pøíklad: Tabulka ZAPISY bude uchovávat zápisy rùzných u¾ivatelù, jejím vlastníkem bude KROKODYL2. Ostatní u¾ivatelé mají vidìt jen "své" záznamy. Pøihla¹te se jako KROKODYL2.
create table ZAPISY (
IDZAP int,
TEXT CLOB not null,
UZIV varchar2(100) default USER,
KDY DATE default sysdate,
constraint ZAPISY_PK primary key (IDZAP)); |
| (Funkce USER je funkcí Oracle vracející u¾ivatelské jméno pøihlá¹eného u¾ivatele.) |
create sequence ZAPISYID; |
| (Sekvence je objekt Oracle slou¾ící k postupnému automatickému generování èísel int.) Pro utomatické generování IDZAP definujeme trigger: |
create or replace trigger ZAPISYIDNOVY before insert on ZAPISY
for each row
when (new.IDZAP is null)
begin
select ZAPISYID.nextval into :new.IDZAP from dual;
end; |
| Na zkou¹ku vlo¾íme jeden záznam a podíváme se na nìj: |
insert into ZAPISY (TEXT) values ('Papala Pepièka papáníèko, pokapala si kanapíèko.');
select * from ZAPISY; |
| Definujeme pohled ZAPISYU k tomu, aby ukazoval jen zápisy pøihlá¹eného u¾ivatele. Podíváme se "tímto pohledem". |
create view ZAPISYU as
(select TEXT,KDY from ZAPISY where UZIV=USER)
with check option;
select * from ZAPISYU; |
| Pøidìlíme u¾ivateli KROKODYL1 práva k pohledu ZAPISYU. |
grant all on ZAPISYU to KROKODYL1; |
| Pøihla¹te se jako KROKODYL1. Podíveje se pohledem ZAPISYU. |
select * from KROKODYL2.ZAPISYU; |
| Nejsou vidìt ¾ádné záznamy. Vlo¾íme jeden zápis. Podíváme se. |
insert into KROKODYL2.ZAPISYU (TEXT) values ('Babièka dnes nepøijde.');
select * from KROKODYL2.ZAPISYU; |
| Pøihla¹te se opìt jako KROKODYL2. Podíváme se. |
select * from ZAPISYU;
select * from ZAPISY; |
| Ukliïte po sobì... |
drop table ZAPISY;
drop sequence ZAPISYID;
drop view ZAPISYU; |
< Øídící pøíkazy | SQL postupnì | REVOKE >