Voici ma situation (légèrement envague de protéger l'innocent): j'ai un package sur un système de test et un package sur le système de produit qui doit avoir des autorisations identiques pour accéder aux packages et aux fonctions de sortie. Les deux systèmes sont oracle. J'utilise la requête suivante pour vérifier les autorisations existantes:
with objects as (
select owner, table_name, listagg(privilege, ', ') WITHIN GROUP (ORDER BYPRIVILEGE) AS PRIVS
from all_tab_privs_recd
where grantee = 'EABINTEG'
group BY owner, table_name
order by owner, table_name)
select ob.owner as OWNER, ob.table_name as NAME, ao.object_type as TYPE, ob.PRIVS as GRANTS
from objects ob left join all_objects ao on ob.owner = ao.owner
and ob.table_name = ao.object_name
order by ao.object_type, ob.owner, ob.table_name;
Les requêtes reviennent presque identiques, à l'exception du test contiennent des rangées qui disent que le compte a exécuté des autorisations accordées pour le corps de l'emballage. L'administrateur a exécuté des questions pour accéder à mon compte exécuté sur les packages, je peux voir des autorisations d'exécution identiques accordées pour le colis sur le test et le prod.
J'ai regardé autour de moi et je n'ai rien trouvé. Quelqu'un d'autre a-t-il couru contre cela? Comment accorder des privilèges d'exécution pour un organisme de colis. Est-ce un problème de synonyme? Aider! Merci!
Quelque chose d'autre en plus de EXECUTE
? Lorsque vous accordez DEBUG
, vous "obtenez" EXECUTE
sur le PACKAGE BODY
(J'ai remplacé Eabinteg avec U2 dans votre requête):
SQL> create user u1 identified by u1;
User created.
SQL> create user u2 identified by u2;
User created.
SQL> grant create session to u1, u2;
Grant succeeded.
SQL> create package u1.p1 as
2 procedure pr1;
3 end;
4 /
Package created.
SQL> create or replace package body u1.p1 as
2 procedure pr1 as
3 begin
4 null;
5 end;
6 end;
7 /
Package body created.
SQL> grant execute on u1.p1 to u2;
Grant succeeded.
SQL> conn u2/u2
Connected.
SQL> @yourquery
OWNER NAME TYPE GRANTS
----- ----- ------------------- ------------------------------
U1 P1 PACKAGE EXECUTE
Semble ok jusqu'à présent.
SQL> conn u1/u1
Connected.
SQL> grant debug on u1.p1 to u2;
Grant succeeded.
SQL> conn u2/u2
Connected.
SQL> @yourquery
OWNER NAME TYPE GRANTS
----- ----- ------------------- ------------------------------
U1 P1 PACKAGE DEBUG, EXECUTE
U1 P1 PACKAGE BODY DEBUG, EXECUTE
Si vous révoquez DEBUG
maintenant, le PACKAGE BODY
la ligne disparaît.
SQL> conn u1/u1
Connected.
SQL> revoke debug on u1.p1 from u2;
Revoke succeeded.
SQL> conn u2/u2
Connected.
SQL> @yourquery
OWNER NAME TYPE GRANTS
----- ----- ------------------- ------------------------------
U1 P1 PACKAGE EXECUTE