SELECT version();
version
------------------------------------------------------------------------------------------
PostgreSQL 9.6.0 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit
(1 ligne)
-- connecté phil, utilisateur propriétaire de t1
GRANT TRUNCATE ON t1 TO phills;
GRANT
-- connecté phills
TRUNCATE TABLE phil.t1;
TRUNCATE TABLE
Avec PostgreSQL le propriétaire de la table peut simplement donner le privilège de tronquer sa table à un autre rôle (utilisateur).
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
-- connecté phil, utilisateur propriétaire de t1
SQL> GRANT TRUNCATE ON t1 TO phills;
GRANT TRUNCATE ON t1 TO phills;
*
ERROR at line 1:
ORA-00990: missing or invalid privilege
SQL> GRANT DELETE ON t1 TO phills;
Grant succeeded.
-- connecté phills
TRUNCATE TABLE phil.t1;
TRUNCATE TABLE phil.t1
*
ERROR at line 1:
ORA-01031: insufficient privileges
-- connecté system, utilisateur dba
GRANT drop any table TO phills;
-- connecté phills
SQL> TRUNCATE TABLE phil.t1;
Table truncated.
Oracle ne dispose pas de privilège dédié pour autoriser un utilisateur ou rôle à réaliser un TRUNCATE sur une table ne lui appartenant pas. Oracle utilise la notion de privilège système et il faut disposer du privilège DROP ANY TABLE pour réaliser un TRUNCATE sur une table dont on nest pas propriétaire. Accorder ce privilège est cependant dangereux car lutilisateur disposant de DROP ANY TABLE pourra réaliser un TRUNCATE sur la table considérée...mais il pourra aussi tronquer ou supprimer nimporte quelle autre table ! Tom Kyte recommande dutiliser une procédure PL/SQL pour contourner ce problème mais devoir utiliser une procédure pour un besoin couvert par SQL est toujours regrettable.