web-dev-qa-db-fra.com

Comment définir les autorisations pour le corps de l'emballage

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!

4
AndrewBurton

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
3
Balazs Papp