Updates from Şubat, 2016 Toggle Comment Threads | Tuş takımı kısayolları

  • dutali 1:51 am on 2016-02-10 Kalıcı Bağlantı | Cevapla  

    Oracle DB- Şemadaki objelere toptan yetki vermek 

    Özelikle veriambarı projelerinde şemalar arasında yetki-erişim sorunu sık sık yaşanır. Bazı işlemler sık sık temp tablo yaratılması ve düşürülmesi gerektirir. Bazen de veritabanında birbiri ardına gelen uzun projeler nedeniyle her daim yeni objeler yaratılır ya da objeler üzerindeki yetkiler kaybedilerek tekrar yaratılır.

    Peki bu sorun nasıl aşılabilir?

    Başka bazı veritabanlarında bir şema başka bir şemanın tüm yetkilerine ,sonradan yaratılan objeler de dahil, otomatik olarak sahip olabiliyor. Maalesef oracle bu konuyu çözebilmiş değil . Ya da çözmeye çalışmıyor.

    Sistem yöneticisinin telefonunu hızlı aramalara eklemek bir çözüm olabilir. Prosedürlerle uğraşmayı sevmeyen kültürümüz buna kolay bir çözüm bulmuş durumda: Sık sık yetki ihtiyacı olan şemayı DBA yetkisi ile donatmak. Bu en çok kullanılan yöntem olsa gerek ki normal kullanıcılara DBA yetkisi verilmeyen veritabanı daha görmedim.

    Sistematik çözüm uygulayanlar her yeni yaratılan obje sonrası çalışmak üzere gerekli yetkileri atayan prosedürler kullanırlar. Bu da ancak canlı ortamda düşürülüp yaratılabilen temp tablolar için bir çözüm. Diğer durumlar için gene kullanıcının sadece prosedürü çağırmak şeklinde olsa da müdahalesi gerekli olur.

    Disiplin gerektirmeyen bir yöntem olarak da her akşam çalışacak ve belirli bir şemadaki tüm objeler için başka bir şemaya belli başlı yetkileri veren bir prosedür yazılabilir. Her ne kadar amaca yönelik ve çok kesin çözüm sağlamasa da gene de işe yarar ve sistemde DBA enflasyonunu azaltır.

    Yazmak için zaman ayırmak istemeyenler için aşağıda belli başlı hakları belli başlı objeler için toptan veren prosedür. Sistem ihtiyaçlarına uygun olarak değişiklik yapılabilir

    Prosedürün invoker right ile çalışacak şekilde yazıldığına ve user_object yerine all_object tablosuna sorgu atıldığına dikkat edin. Prosedürü ya objelerin sahibi olan şema, ya da DBA yetkisine sahip olan şema kullanabilecektir.

     

    CREATE OR REPLACE PROCEDURE grant_all_scheme_to_scheme (
    owner_scheme_in   IN VARCHAR2
    , scheme_in         IN VARCHAR2)
    AUTHID CURRENT_USER IS
    l_owner_check   NUMBER := 0;
    l_scheme_check         NUMBER := 0;
    CURSOR objects_cur (owner_in VARCHAR2) IS
    SELECT object_name, object_type
    FROM all_objects
    WHERE     1 = 1
    AND object_type IN (‘FUNCTION’
    , ‘PROCEDURE’
    , ‘PACKAGE’
    , ‘TABLE’
    , ‘VIEW’
    , ‘SEQUENCE’)
    AND owner = owner_in;
    /*Ebubekir Çelik-2014
    Parametreler:
    SCHEME_IN: yetki verilecek şema
    OWNER_SCHEME_IN: içinde bulunan tablo,prosedür vs objelere erişilmesi istenen şema
    SCHEME_IN ile verilen şema için , OWNER_SCHEME_IN şemasındaki TABLE, VIEW ,FUNCTION, PROCEDURE, PACKAGE, SEQUENCE türündeki
    objelere (obje türlerine bağlı olarak) çalıştırma,seçme, kayıt ekleme yetkisi verir.

      ÖR:
    BEGIN
    grant_all_scheme_to_scheme( ‘HR’,’OE’)
    END;

    */
    BEGIN
    SELECT COUNT (*)
    INTO l_owner_check
    FROM all_users
    WHERE username = owner_scheme_in;

       IF l_owner_check <> 1 THEN
    raise_application_error (-20002
    , ‘ Kaynak şema bulunamadı : ‘ ||
    owner_scheme_in);
    END IF;

       SELECT COUNT (*)
    INTO l_scheme_check
    FROM all_users
    WHERE username = scheme_in;

       IF l_scheme_check <> 1 THEN
    raise_application_error (-20003
    , ‘ Yetki verilecek şema bulunamadı : ‘ ||
    scheme_in);
    END IF;

       FOR rec IN objects_cur (OWNER_SCHEME_IN) LOOP
    IF rec.object_type IN (‘FUNCTION’, ‘PROCEDURE’, ‘PACKAGE’) THEN
    EXECUTE IMMEDIATE
    ‘GRANT EXECUTE ON ‘ || OWNER_SCHEME_IN || ‘.’ || rec.object_name || ‘ TO ‘ || scheme_in;
    ELSIF rec.object_type IN (‘TABLE’) THEN
    EXECUTE IMMEDIATE
    ‘GRANT SELECT ON ‘ || OWNER_SCHEME_IN || ‘.’ || rec.object_name || ‘ TO ‘ || scheme_in;
    EXECUTE IMMEDIATE
    ‘GRANT INSERT ON ‘ || OWNER_SCHEME_IN || ‘.’ || rec.object_name || ‘ TO ‘ || scheme_in;
    ELSIF rec.object_type IN ( ‘VIEW’) THEN
    EXECUTE IMMEDIATE
    ‘GRANT SELECT ON ‘ || OWNER_SCHEME_IN || ‘.’ || rec.object_name || ‘ TO ‘ || scheme_in;
    ELSIF rec.object_type IN (‘SEQUENCE’) THEN
    EXECUTE IMMEDIATE
    ‘GRANT SELECT ON ‘ || OWNER_SCHEME_IN || ‘.’ || rec.object_name || ‘ TO ‘ || scheme_in;
    ELSE
    NULL;
    END IF;
    END LOOP;
    DBMS_OUTPUT.put_line (‘İşlem başarılı’);
    EXCEPTION
    WHEN OTHERS THEN
    RAISE;
    END;


     

     

    Görüşmek üzere

     
  • dutali 6:16 am on 2015-03-19 Kalıcı Bağlantı | Cevapla  

    ODI Work Repository’de Load plan adımlarını hiyerarşik olarak gösterme 

    Oracle Data Integrator 11g için yazdığım bir sorgu. ODI Client üzerinden load plan incelemek yerine bu sorgu aynı Designer’da görüldüğü gibi load plan adımlarını  görebilirsiniz.

    Sorguda load plan adımları tablosundaki tüm detaylar bulunuyor. İlgilenmediğiniz kolonu kendiniz kaldırabilirsiniz

    Id ya da kısa kod ile doldurulmuş alanların (step_type, restary_type gibi ) tümünün  karşılığı bulunuyor.

    Ayrıca exception içeren adımlarda exception durumunda ne çalıştırılacağı da excptn kolonunda görülebilir

    Hatırlatma :Sorguda hiyerarşiktir, eğer bu sorguda  filterleme yapmak isterseniz tüm sorguyu paranteze alıp üzerine WHERE cümleciği yazabilirsiniz ( select * from (aşağıdaki sql) where … ),ya da START WITH kısmını değiştirebilirsiniz.

    
    SELECT l.load_plan_name
    , LEVEL AS seviye
    , LPAD (' ', 5 * (LEVEL - 1)) || s.lp_step_name AS step
    , CASE
    WHEN s.lp_step_type = 'SE' THEN 'Serial'
    WHEN s.lp_step_type = 'PA' THEN 'Parallel'
    WHEN s.lp_step_type = 'CS' THEN 'Case'
    WHEN s.lp_step_type = 'CW' THEN 'When'
    WHEN s.lp_step_type = 'CE' THEN 'Else'
    WHEN s.lp_step_type = 'EX' THEN 'Exception'
    ELSE NULL
    END
    AS step_type
    , CASE
    WHEN s.restart_type = 'SF' THEN 'From Failure'
    WHEN s.restart_type = 'PA' THEN 'All Children'
    WHEN s.restart_type = 'PF' THEN 'Failed Children'
    WHEN s.restart_type = 'RN' THEN 'From new session-Scen'
    WHEN s.restart_type = 'RT' THEN 'From failed task-Scen'
    WHEN s.restart_type = 'RS' THEN 'From failed step-Scen'
    END
    AS restart_type
    , CASE WHEN s.ind_enabled = 1 THEN 'ENABLED' WHEN s.ind_enabled = 0 THEN 'DISABLED' END
    AS is_enabled
    , s.scen_name AS scenario
    , e.i_lp_step AS excptn_id
    , e.lp_step_name AS excptn
    , CASE
    WHEN s.except_behavior = 'R' THEN 'Run Exception and Raise'
    WHEN s.except_behavior = 'I' THEN 'Run Exception and Ignore'
    END
    AS except_behavior
    , s.step_priority
    , s.step_order
    , s.step_timeout
    , s.i_lp_step
    , s.var_name || ' ' || ' ' || s.var_op || s.var_value AS var_opt
    , s.scen_no
    , s.scen_version
    , s.max_par_error
    , s.sess_keywords
    , s.var_long_value
    FROM prod_odi_work.snp_lp_step s
    , prod_odi_work.snp_load_plan l
    , prod_odi_work.snp_lp_step e
    WHERE     1 = 1
    AND s.i_load_plan = l.i_load_plan  
    AND s.i_lp_step_except = e.i_lp_step(+) 
    START WITH s.par_i_lp_step IS NULL  --koşul buraya eklenebilir
    CONNECT BY PRIOR s.i_lp_step = s.par_i_lp_step
    ORDER SIBLINGS BY s.step_order;
    
     
c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
Cevapla
e
Düzenle
o
Show/Hide comments
t
En üste git
l
Go to login
h
Show/Hide help
shift + esc
Vazgeç
%d blogcu bunu beğendi: