2017-08-14 93 views
-1

適切なアクセス権が付与されていても、パッケージ内でプロシージャを実行すると権限が不足します。ORA-01031:権限が不十分です

CREATE OR REPLACE PACKAGE DEVELOPER.DDL_PACKS 
AS 
PROCEDURE disbcons 
AS 
    BEGIN 
    EXECUTE IMMEDIATE 'ALTER TABLE TESTER.ADDRESS DISABLE CONSTRAINT PK4'; 
    END; 
END; 

GRANT ALTER ON TESTER.ADDRESS TO DEVELOPER; 

EXEC developer.ddl.disbcons 

EDIT: IパッケージヘッダーにAUTHID DEFINERを追加しようとしました。でも、DEVELOPERで実行すると、ORA-01031:insufficient privilegesエラーが発生します。ユーザー

私がAUTHID CURRENT_USERを追加して、同じDEVELOPERユーザーで実行すると、実行はうまくいきます。あなたが唯一、私はそれが後に動作するとは思わパッケージ仕様の範囲内AUTHID DEFINER/CURRENT_USERを追加することができます@Vivek AUTHID DEFINER

+0

パッケージ内のプロシージャに 'AUTHID DEFINER'を追加する方法はありますか? – Vivek

+0

[ストアドプロシージャ内でイミディエイトを実行すると、権限が不十分なままエラーが発生する](https://stackoverflow.com/questions/996198/execute-immediate-within-a-stored-procedure-keeps-giving-insufficient-priviliges) – lad2025

+0

@Vivek - あなたの手続きがパッケージ内にある場合は、個々の手続きではなく、パッケージレベルでのみ 'AUTHID'を設定することができます。 – kfinity

答えて

0

で実行する場合、Oracleは、関連するアクセス権を考慮していない理由を私は理解していない、以下のパッケージの仕様があるべきである。

CREATE OR REPLACE PACKAGE DEVELOPER.DDL_PACKS AUTHID CURRENT_USER 
AS 

    PROCEDURE disbcons; 

END; 
+0

これは、私がパッケージを作成したユーザーIDで既に実行しているので、違いはありません。 – Vivek

+0

@Vivekあなたはユーザーの開発者の認可は何ですか?例えばユーザーはDBAの役割を持っていますか?正確に何がありますか? –

+0

@Vivek DEFINERの代わりにCURRENT_USERを試してみると、うまくいく –

関連する問題