Gblog

おもにTips

定義者権限の確認

プロシージャは定義者権限で動作する。

なので、別ユーザに 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;
---> これは正常終了

 

なので、定義者の権限で実行されていることがわかる。