J'ai testé cet exemple sur Oracle 11.2. Il vous montre pourquoi il faut faire attention quand vous utilisez la commande REVOKE. Quand on donne le rôle DBA à un utilisateur, Oracle lui donne le privilège système UNLIMITED TABLESPACE en même temps:
SQL> create user andrew identified by reid
2 /
Utilisateur créé.
SQL> grant dba to andrew
2 /
Autorisation de privilèges (GRANT) acceptée.
SQL> select granted_role from dba_role_privs
2 where grantee = 'ANDREW'
3 /
GRANTED_ROLE
------------------------------
DBA
SQL> select privilege from dba_sys_privs
2 where grantee = 'ANDREW'
3 /
PRIVILEGE
----------------------------------------
UNLIMITED TABLESPACE
SQL>
Quand on révoque le rôle DBA d'un utilisateur, Oracle révoque le privilège système UNLIMITED TABLESPACE aussi:
SQL> revoke dba from andrew
2 /
Suppression de privilèges (REVOKE) acceptée.
SQL> select granted_role from dba_role_privs
2 where grantee = 'ANDREW'
3 /
aucune ligne sélectionnée
SQL> select privilege from dba_sys_privs
2 where grantee = 'ANDREW'
3 /
aucune ligne sélectionnée
SQL>
Alors, qu'est-ce qui se passe si on donne le privilège système UNLIMITED TABLESPACE à un utilisateur explicitement?
SQL> grant unlimited tablespace to andrew
2 /
Autorisation de privilèges (GRANT) acceptée.
SQL> select privilege from dba_sys_privs
2 where grantee = 'ANDREW'
3 /
PRIVILEGE
----------------------------------------
UNLIMITED TABLESPACE
SQL>
Puis on lui donne le rôle DBA:
SQL> grant dba to andrew
2 /
Autorisation de privilèges (GRANT) acceptée.
SQL> select granted_role from dba_role_privs
2 where grantee = 'ANDREW'
3 /
GRANTED_ROLE
------------------------------
DBA
SQL> select privilege from dba_sys_privs
2 where grantee = 'ANDREW'
3 /
PRIVILEGE
----------------------------------------
UNLIMITED TABLESPACE
SQL>
... et ensuite on le révoque:
SQL> revoke dba from andrew
2 /
Suppression de privilèges (REVOKE) acceptée.
SQL> select granted_role from dba_role_privs
2 where grantee = 'ANDREW'
3 /
aucune ligne sélectionnée
SQL>
Oracle révoque le privilège système UNLIMITED TABLESPACE aussi. J'imagine que vous n'aviez pas l'intention de faire cela!
SQL> select privilege from dba_sys_privs
2 where grantee = 'ANDREW'
3 /
aucune ligne sélectionnée
SQL>
Aucun commentaire:
Enregistrer un commentaire