Privilegi su Oggetti
S i n t a s s i
GRANT <privileges> ON <object> TO <user> [WITH GRANT OPTION];
Di seguito i privilegi:
SELECT
INSERT
UPDATE
DELETE
REFERENCES (abilita la creazione di constraint su una tabella)
ALTER (abilita l'esecuzione di ALTER TABLE su una tabella)
INDEX
ALL (tutti i privilegi di prima)
L'opzione WITH GRANT OPTION permette di estendere ad una altro utente i privilegi ricevuti.
E s e m p i o
HR concede i privilegi di select di una tabella a SH con l'opzione "with grant option" e SH estende gli stessi privilegi a OE.
Apriamo 3 terminali.
Terminale 1: ci colleghiamo come HR e diamo la seguente grant.
SQL> conn hr/<password>
Connected.
SQL> GRANT select ON hr.employees TO SH WITH GRANT OPTION;
Grant succeeded.
Terminale 2: ci colleghiamo come SH
SQL> show user;
USER is "SH"
SQL> select count(*) from employees;
COUNT(*)
----------
107
Terminale 3: ci colleghiamo come OE ed interroghiamo la tabella employees.
SQL> show user
USER is "OE"
SQL> select count(*) from hr.employees;
ERROR at line 1:
ORA-00942: table or view does not exist
Terminale 2: diamo a OE le grant di select sulla tabella employees.
SQL> GRANT select ON hr.employees TO OE;
Grant succeeded.Terminale 3
Terminale 3: anche OE vede la suddetta tabella.
SQL> select count(*) from hr.employees;
COUNT(*)
----------
107
S i n t a s s i
REVOKE <privileges> ON <object> FROM <user>;
Un utente non può revocare privilegi che non ha concesso.
HR non può revocare i privilegi di OE.
SQL> REVOKE select ON employees FROM OE;
Errore SQL: ORA-01927: l'utente non può revocare (REVOKE) privilegi che non ha concesso
01927. 00000 - "cannot REVOKE privileges you did not grant"
*Cause: You can only revoke privileges you granted.
*Action: Don't revoke these privileges.
HR può revocare i privilegi concessi a SH.
SQL> REVOKE select ON employees FROM SH;
revoke succeeded.
Revocando i privilegi a SH vengono revocati i privilegi anche a OE.
Se un utente A vuole fornire a tutti gli utenti le grant di select sulla sua tabella "prova" deve eseguire il comando seguente:
GRANT select ON prova TO PUBLIC;
Non è possibile eseguire grant su più oggetti contemporaneamente, ma occorre eseguire due comandi separati.
Ad esempio la seguente istruzione eseguita dall'user HR va in errore:
GRANT ALL ON hr.countires, hr.locations TO SH;
USER_TAB_PRIVS_MADE o USER_COL_PRIVS_MADE o DBA_TAB_PRIVS o USER_TAB_PRIVS_RECD o USER_COL_PRIVS_RECD
GRANT <privileges> ON <object> TO <user> [WITH GRANT OPTION];
Di seguito i privilegi:
SELECT
INSERT
UPDATE
DELETE
REFERENCES (abilita la creazione di constraint su una tabella)
ALTER (abilita l'esecuzione di ALTER TABLE su una tabella)
INDEX
ALL (tutti i privilegi di prima)
L'opzione WITH GRANT OPTION permette di estendere ad una altro utente i privilegi ricevuti.
E s e m p i o
HR concede i privilegi di select di una tabella a SH con l'opzione "with grant option" e SH estende gli stessi privilegi a OE.
Apriamo 3 terminali.
Terminale 1: ci colleghiamo come HR e diamo la seguente grant.
SQL> conn hr/<password>
Connected.
SQL> GRANT select ON hr.employees TO SH WITH GRANT OPTION;
Grant succeeded.
Terminale 2: ci colleghiamo come SH
SQL> show user;
USER is "SH"
SQL> select count(*) from employees;
COUNT(*)
----------
107
Terminale 3: ci colleghiamo come OE ed interroghiamo la tabella employees.
SQL> show user
USER is "OE"
SQL> select count(*) from hr.employees;
ERROR at line 1:
ORA-00942: table or view does not exist
Terminale 2: diamo a OE le grant di select sulla tabella employees.
SQL> GRANT select ON hr.employees TO OE;
Grant succeeded.Terminale 3
Terminale 3: anche OE vede la suddetta tabella.
SQL> select count(*) from hr.employees;
COUNT(*)
----------
107
S i n t a s s i
REVOKE <privileges> ON <object> FROM <user>;
Un utente non può revocare privilegi che non ha concesso.
HR non può revocare i privilegi di OE.
SQL> REVOKE select ON employees FROM OE;
Errore SQL: ORA-01927: l'utente non può revocare (REVOKE) privilegi che non ha concesso
01927. 00000 - "cannot REVOKE privileges you did not grant"
*Cause: You can only revoke privileges you granted.
*Action: Don't revoke these privileges.
HR può revocare i privilegi concessi a SH.
SQL> REVOKE select ON employees FROM SH;
revoke succeeded.
Revocando i privilegi a SH vengono revocati i privilegi anche a OE.
Se un utente A vuole fornire a tutti gli utenti le grant di select sulla sua tabella "prova" deve eseguire il comando seguente:
GRANT select ON prova TO PUBLIC;
Non è possibile eseguire grant su più oggetti contemporaneamente, ma occorre eseguire due comandi separati.
Ad esempio la seguente istruzione eseguita dall'user HR va in errore:
GRANT ALL ON hr.countires, hr.locations TO SH;
USER_TAB_PRIVS_MADE o USER_COL_PRIVS_MADE o DBA_TAB_PRIVS o USER_TAB_PRIVS_RECD o USER_COL_PRIVS_RECD
sono viste del dizionario dati che visualizza per ogni user i privilegi concessi, compresi gli oggetti e le user a cui sono state assegnate.
Grantee= beneficiario cioè il nome dell’utente a cui è stato dato la grant
Grantor= proprietario cioè il nome dell’utente che ha concesso le grant
Grantee= beneficiario cioè il nome dell’utente a cui è stato dato la grant
Grantor= proprietario cioè il nome dell’utente che ha concesso le grant
Grant di esecuzione di un package, procedure o funzione
GRANT EXECUTE ON <owner>.<procedura|funzione|package> TO users;