2017-08-06 5 views
0

J'ai un paquet Oracle avec une procédure qui crée une table, plutôt que de lui accorder des privilèges.Aucun privilège pour rassembler des statistiques de table

Le code est juste semblable à ceci:

Begin 
Execute immediate 'create table SU.temp_tbl...'; 
... 
... 
Dbms_stats.gather_table_stats('SU', 'TEMP_TBL'); 
End; 

Le propriétaire de la procédure est l'utilisateur avec le rôle de DBA.

Ce rôle a

créer un privilège de table

Tels que

Analyser tout privilège de table

Alors pourquoi quand je suis en cours d'exécution de cette procédure , Je reçois une exception de 'aucun privilège ges 'sur la commande gather table, Mais le' create 'vient d'être exécuté ok?

Et quelle est la solution? Ai-je besoin de l'utilisateur SU pour accorder un privilège explicite d'analyse à l'administrateur de base de données? J'utilise la version Oracle 11g.

Merci.

Répondre

3

Les privilèges doivent être accordés directement au propriétaire de la procédure/du package, et non indirectement par un rôle.

Bien sûr, le EXECUTE ON owner.name_of_procedure est également nécessaire.

Des notes d'utilisation du GATHER_TABLE_STATS Procedure

Pour bénéficier de cette procédure, vous devez être propriétaire de la table, ou vous avez besoin du tout privilège ANALYSER.