これが私の状況です(無実を保護するために少し環境が整っています)。既存のパッケージと機能にアクセスするための同一のアクセス許可が必要な、テストシステム上のパッケージと製品システム上のパッケージがあります。どちらのシステムも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の問題ですか?助けて!ありがとう!
EXECUTE
に加えて他に何かありますか? DEBUG
を付与する場合、PACKAGE BODY
でEXECUTE
を暗黙的に「取得」します(クエリで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