プロシージャは定義者権限で動作する。
なので、別ユーザに Execute 権限を付与しても、実行するときはプロシージャのスキーマユーザで実行される。
-- user G で接続 DROP TABLE TAB1; CREATE TABLE tab1 ( col1 CHAR(2), col2 VARCHAR2(100), CONSTRAINT tab1_pk PRIMARY KEY(col1) ) PARTITION BY RANGE( col1 ) ( PARTITION tab1_part1 VALUES LESS THAN ('10'), PARTITION tab1_part2 VALUES LESS THAN ('20'), PARTITION tab1_part3 VALUES LESS THAN ('30'), PARTITION tab1_part4 VALUES LESS THAN ('40') ); create or replace procedure testp is begin EXECUTE IMMEDIATE 'ALTER TABLE TAB1 DROP PARTITION tab1_part1'; END; / grant execute on testp to h;
で、権限を付与したユーザで alter table drop partiton を叩いてみる。
ALTER TABLE g.TAB1 DROP PARTITION tab1_part1; ---> これはエラー exec g.testp; ---> これは正常終了
なので、定義者の権限で実行されていることがわかる。