Thursday, July 23, 2009

GRANT EXECUTE YETKİSİ

--kendi semamizda proceduremizi olusturalim ve içerisinde yine kendi semamizdaki bir tabloyu silelim.

--tablomuzu yaratalim.

CREATE TABLE deneme_silsene (

  a NUMBER);


--procedure yaratalim

CREATE OR REPLACE PROCEDURE Deneme_sil

AS

  v_dyn_sql  VARCHAR2(200) DEFAULT NULL;

BEGIN

  v_dyn_sql := 'drop table deneme_silsene';

  

  EXECUTE IMMEDIATE v_dyn_sql;

  

  COMMIT;

END;

/


--baska bir semadan (userdan "hedefowner") baglanarak olusturdugumuz procedureyi çalistiralim.

BEGIN

  hedefowner.deneme_sil;

  

  COMMIT;

END;

/


--yetkiniz yok hatasi alacagiz bu hatayi asmak için yetki verelim.

--bu yetkiyi kendi semamiza baglanarak kendi schemamiz altinda vermemiz gerkiyor.

GRANT EXECUTE ON deneme_sil TO hedefowner;


-- procedure normal bir sekilde çalisti ve kendi tablomuzu sildi.

-- burada tablomuz için diger user'a yetki vermedik ama yine de tablomuz üzerinde islem yapabildi.

-- grant execute yetkisi sikintili bir yetki oldugunu buradan anlayabiliriz.

--söyle bir deneme de yapalim isterseniz.

--simdi procedureyi çalistiracagimiz schemada da ayni isimde bir tablo yaratalim ve hangi tabloyu silecegine bakalim.

-- bu konu hakkinda fikri olmayan arkadaslariniz ile iddaya girerek ögle yemegi kazanabilirsiniz.

--simdi su sekilde oldu son durum.

SELECT *

FROM   hedefowner.deneme_sil;


SELECT *

FROM   buradansiliyom.deneme_sil;


--iki farkli schemada ayni isimde tablom var

BEGIN

  hedefowner.deneme_sil;

  

  COMMIT;

END;

/


-- burada bu procedure'yi çagirir isem hangi tabloyu silecek. procedure schema adini belirtmedim. procedurenin yaratildigi yerdeki tabloyu mu silecek

-- yoksa calistirdigimiz yerdeki tabloyu mu silecek?

--iste bu sorunun cevabi procedurenin oldugu create edildigi schemadaki tabloyu silecektir.

--bu durumu asmak için yada kafa karistirmasina , olurda yanlis schema altinda islemler yapmasini engellemek için

--"schema_adi"."tablo_adi" seklinde çalismakta fayda var. bunu aliskanlik edinmek lazim.

DROP PROCEDURE hedefowner.deneme_sil;

1 comment:

Anonymous said...

güzel bir yöntem,arkadaşım :) makale'lerinin devamını diliyorum...