web-dev-qa-db-ja.com

パッケージ本体のアクセス許可を設定する方法

これが私の状況です(無実を保護するために少し環境が整っています)。既存のパッケージと機能にアクセスするための同一のアクセス許可が必要な、テストシステム上のパッケージと製品システム上のパッケージがあります。どちらのシステムもOracleです。次のクエリを使用して、既存の権限を確認します。

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;

クエリにはほとんど同じ結果が返されますが、Testには、アカウントにPACKAGE BODYに対するEXECUTE権限が付与されていることを示す行がいくつかあります。管理者がクエリを実行して、私のアカウントにパッケージの実行を許可しました。TestとProdの両方で、パッケージに対して付与された同一のEXECUTE権限を確認できます。

周りを見回しても何も見つかりませんでした。他の誰かがこれに反対していますか?パッケージボディにEXECUTE権限を付与するにはどうすればよいですか。これはSYNONYMの問題ですか?助けて!ありがとう!

4
AndrewBurton

EXECUTEに加えて他に何かありますか? DEBUGを付与する場合、PACKAGE BODYEXECUTEを暗黙的に「取得」します(クエリでEABINTEGをU2に置き換えました)。

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

これまでのところ問題ないようです。

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

ここでDEBUGを取り消すと、PACKAGE BODY行が消えます。

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