Programımızı yaratan kişi kullanan kişiden daha üstün olabilir. Bu durumda programı çalıştıran kişi daha az object üzerinde hakka sahip olduğu için programın içinde kullanılmış olabilecek herhangi bir object kullanma yetkisi yoksa hata alacaktır. Bunu engellemek ya da düzenlemek için Authid ifadesini kullanırız.
Authid ifadesini kullanabilmek için "Authid" ifadesini başlıktaki "IS" veya "AS" anahtar sözcüklerinden önce kullanmak gerekmektedir.
Seçenekler:
Authid definer: default olarak kullanılmaktadır. Yani normalde programı oluşturan kullanıcının hakları ile çalıştırılır.
Authid current_user: Programımızı yaratan değil de, şu an çalıştıran kullanıcının haklarıyla çalıştırır.
Avantajı Nedir?
Object'lerin çalıştırılması sırasında bu şekilde ayırt edilmesi bize ayrı bir katman yaratır, güvenlik sağlar. Bu şekilde birden fazla aynı object'i kullanabilir. Kod paylaşılırken erişilebilen object'ler(data) ayrı tutulabilinir. İstediğimiz object'i paylaşmak istediğimizde bu yapıyı, programın içine atarak erişebiliriz.
Özetle; datalar ayrı ama kodlar paylaşılırken bu yapı kullanılabilir. Ancak bu sayede data başka birisinin tablespace'indeyken erişim sağlanabilir.
Syntax?
Syntax olarak daha önce de belirttiğimiz gibi procedure veya fonksiyonlarda isimden sonra kullanılacak şekilde konulur ve "AS" ve "IS" yapılarından önce konulur.
Örneğin aşağıdaki yapılarda DBA rolüne sahip birisi olarak aşağıdaki prosedürü yaratıp DBA rolüne sahip olmayan birinin kullanımına AUTHID DEFINER olarak verirsek procedure çalışacaktır. Halbuki AUTHID CURRENT_USER olarak verilirse procedure çalışmayacaktır; çünkü kullanıcı DBA rolüne sahip olmayacaktır.
CREATE OR REPLACE PROCEDURE definer_test AUTHID DEFINER IS
BEGIN
FOR rec IN (SELECT table_name FROM dba_tables)
LOOP
dbms_output.put_line(rec.table_name);
END LOOP;
END definer_test;
/
CREATE OR REPLACE PROCEDURE cu_test AUTHID CURRENT_USER IS
BEGIN
FOR rec IN (SELECT table_name FROM dba_tables)
LOOP
dbms_output.put_line(rec.table_name);
END LOOP;
END cu_test;
/
Cok Guzel bir aciklama Tesekkurler
YanıtlaSil