ORA-01031: insufficient privileges
Kullanıcınızda ifade için gereken bir sistem ya da nesne yetkisi yok — örneğin CREATE TABLE, ALTER SYSTEM ya da bir paket üzerinde EXECUTE. Definer’s rights PL/SQL içinde roller üzerinden gelen yetkiler sayılmaz.
Ne anlama gelir?
Oracle her ifade için yetkileri denetler. ORA-01031, ifadenin anlaşıldığı ve nesnenin bulunduğu, ama kullanıcınızın bu işlemi yapmaya izni olmadığı anlamına gelir. Worksheet’te çalışan bir kodun saklı prosedür içinde patlamasının en yaygın nedenidir; çünkü definer’s rights birimlerde roller devre dışıdır.
Yaygın nedenler
CREATE TABLE,CREATE VIEWya daALTER SYSTEMgibi bir sistem yetkisinin eksik olması.- Başka bir şemanın nesnesi üzerinde
UPDATE,DELETEya daEXECUTEgibi bir nesne yetkisinin eksik olması. - Yetkinin bir rol üzerinden gelmesi ama ifadenin definer’s rights bir prosedür içinde çalışması.
- Doğru işletim sistemi grubunda ya da parola dosyasında olmadan AS SYSDBA bağlanmaya çalışmak.
Nasıl çözülür?
- Sahip olduklarınızı listeleyin:
SESSION_PRIVS(sistem yetkileri) veSESSION_ROLES. - Nesne sahibinden ya da bir DBA’dan tam olarak eksik yetkiyi isteyin.
- Saklı prosedürlerde yetkiyi doğrudan prosedür sahibine verin ya da uygunsa invoker’s rights (
AUTHID CURRENT_USER) kullanın. - Tek bir hatayı gidermek için geniş kapsamlı
ANYyetkileri vermekten kaçının.
Örnek
Şu anda neleri yapabiliyorum?
SELECT privilege FROM session_privs ORDER BY privilege;
SELECT role FROM session_roles ORDER BY role;
Prosedür sahibine doğrudan yetki:
GRANT CREATE TABLE TO app_owner;
GRANT UPDATE ON hr.employees TO app_owner;
SQLlightspeed’de
Bir ifade hata verdiğinde SQLlightspeed’in hata paneli, hata kodunu sade bir Türkçe açıklama ve ne yapmanız gerektiğine dair bir öneriyle; Oracle’ın kendi mesajı ve Oracle dokümantasyonuna bağlantıyla birlikte gösterir — bu hata ve sık görülen onlarca başka hata için.
İlgili hatalar
ORA-00942ORA-01017ORA-00054 Tüm Oracle hataları →
Oracle dokümantasyonu: ORA-01031. Oracle, Oracle Corporation’ın tescilli ticari markasıdır. SQLlightspeed’in Oracle ile bir bağlantısı yoktur.