dimanche 16 mars 2014

Le Problème avec REVOKE

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